0s autopkgtest [07:38:49]: starting date and time: 2024-03-27 07:38:49+0000 0s autopkgtest [07:38:49]: git checkout: 4a1cd702 l/adt_testbed: don't blame the testbed for unsolvable build deps 0s autopkgtest [07:38:49]: host juju-7f2275-prod-proposed-migration-environment-3; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work._wd4n1ex/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-3@lcy02-24.secgroup --name adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 --image adt/ubuntu-noble-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-3 --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/ 535s autopkgtest [07:47:44]: testbed dpkg architecture: amd64 535s autopkgtest [07:47:44]: testbed apt version: 2.7.12 535s autopkgtest [07:47:44]: @@@@@@@@@@@@@@@@@@@@ test bed setup 535s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 535s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 535s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 535s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 535s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 535s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 535s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 535s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 535s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 535s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 535s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 535s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 535s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 535s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 535s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 535s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 535s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 539s Fetched 11.7 MB in 1s (7809 kB/s) 539s Reading package lists... 540s Reading package lists... 541s Building dependency tree... 541s Reading state information... 541s Calculating upgrade... 541s The following packages will be upgraded: 541s psmisc 541s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 541s Need to get 179 kB of archives. 541s After this operation, 28.7 kB disk space will be freed. 541s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 542s Fetched 179 kB in 0s (9005 kB/s) 542s (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 ... 71864 files and directories currently installed.) 542s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 542s Unpacking psmisc (23.7-1) over (23.6-2) ... 542s Setting up psmisc (23.7-1) ... 542s Processing triggers for man-db (2.12.0-3) ... 543s Reading package lists... 543s Building dependency tree... 543s Reading state information... 544s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 544s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 544s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 544s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 544s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 545s Reading package lists... 545s Reading package lists... 546s Building dependency tree... 546s Reading state information... 546s Calculating upgrade... 546s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 546s Reading package lists... 547s Building dependency tree... 547s Reading state information... 547s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 547s autopkgtest [07:47:56]: testbed running kernel: Linux 6.8.0-11-generic #11-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 14 00:29:05 UTC 2024 547s autopkgtest [07:47:56]: @@@@@@@@@@@@@@@@@@@@ apt-source jruby 548s Get:1 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (dsc) [3591 B] 548s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (tar) [15.2 MB] 548s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (tar) [6204 kB] 548s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/universe jruby 9.4.6.0+ds-1ubuntu3 (diff) [39.4 kB] 548s gpgv: Signature made Wed Mar 20 06:57:01 2024 UTC 548s gpgv: using RSA key 92978A6E195E4921825F7FF0F34F09744E9F5DD9 548s gpgv: Can't check signature: No public key 548s dpkg-source: warning: cannot verify inline signature for ./jruby_9.4.6.0+ds-1ubuntu3.dsc: no acceptable signature found 550s autopkgtest [07:47:59]: testing package jruby version 9.4.6.0+ds-1ubuntu3 551s autopkgtest [07:48:00]: build not needed 553s autopkgtest [07:48:02]: test smoke: preparing testbed 555s Reading package lists... 555s Building dependency tree... 555s Reading state information... 556s Starting pkgProblemResolver with broken count: 0 556s Starting 2 pkgProblemResolver with broken count: 0 556s Done 556s The following additional packages will be installed: 556s ca-certificates-java default-jre-headless fontconfig-config 556s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 556s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 556s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 556s libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java libheadius-options-java 556s libinvokebinder-java libjansi-native-java libjansi1-java libjcodings-java 556s libjffi-java libjffi-jni libjitescript-java libjline2-java 556s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 556s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 556s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 556s liblcms2-2 libpcsclite1 libsnakeyaml-engine-java openjdk-21-jre-headless 556s Suggested packages: 556s default-jre libasound2-plugins alsa-utils cups-common 556s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 556s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 556s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 556s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic 556s Recommended packages: 556s fonts-lato alsa-ucm-conf alsa-topology-conf 556s The following NEW packages will be installed: 556s autopkgtest-satdep ca-certificates-java default-jre-headless 556s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 556s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 556s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 556s libfontconfig1 libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java 556s libheadius-options-java libinvokebinder-java libjansi-native-java 556s libjansi1-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 556s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 556s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 556s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 556s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 556s libsnakeyaml-engine-java openjdk-21-jre-headless 556s 0 upgraded, 47 newly installed, 0 to remove and 0 not upgraded. 556s Need to get 89.2 MB/89.2 MB of archives. 556s After this operation, 268 MB of additional disk space will be used. 556s Get:1 /tmp/autopkgtest.mg4W0U/1-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [704 B] 556s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 556s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 556s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 556s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 556s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 556s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 556s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 556s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 556s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 556s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 556s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 556s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 556s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 556s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 556s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 556s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 556s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 556s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 556s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 557s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 557s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 557s Get:23 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 557s Get:24 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 557s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 557s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 557s Get:27 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 557s Get:28 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 557s Get:29 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 557s Get:30 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 557s Get:31 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 557s Get:32 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 557s Get:33 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 557s Get:34 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 557s Get:35 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 557s Get:36 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 557s Get:37 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 557s Get:38 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 557s Get:39 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 557s Get:40 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 557s Get:41 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 557s Get:42 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 557s Get:43 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 557s Get:44 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 557s Get:45 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 557s Get:46 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 557s Get:47 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 558s Fetched 89.2 MB in 1s (63.4 MB/s) 558s Selecting previously unselected package ca-certificates-java. 558s (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 ... 71861 files and directories currently installed.) 558s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 558s Unpacking ca-certificates-java (20240118) ... 558s Selecting previously unselected package java-common. 558s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 558s Unpacking java-common (0.75+exp1) ... 558s Selecting previously unselected package libavahi-common-data:amd64. 558s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 558s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 558s Selecting previously unselected package libavahi-common3:amd64. 558s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 558s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 558s Selecting previously unselected package libavahi-client3:amd64. 558s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 558s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 558s Selecting previously unselected package libcups2:amd64. 558s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_amd64.deb ... 558s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 558s Selecting previously unselected package liblcms2-2:amd64. 558s Preparing to unpack .../06-liblcms2-2_2.14-2_amd64.deb ... 558s Unpacking liblcms2-2:amd64 (2.14-2) ... 558s Selecting previously unselected package libjpeg-turbo8:amd64. 558s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 558s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 558s Selecting previously unselected package libjpeg8:amd64. 558s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_amd64.deb ... 558s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 558s Selecting previously unselected package fonts-dejavu-mono. 558s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 558s Unpacking fonts-dejavu-mono (2.37-8) ... 558s Selecting previously unselected package fonts-dejavu-core. 558s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 558s Unpacking fonts-dejavu-core (2.37-8) ... 558s Selecting previously unselected package fontconfig-config. 558s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 559s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 559s Selecting previously unselected package libfontconfig1:amd64. 559s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 559s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 559s Selecting previously unselected package libasound2-data. 559s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 559s Unpacking libasound2-data (1.2.10-3build1) ... 559s Selecting previously unselected package libasound2:amd64. 559s Preparing to unpack .../14-libasound2_1.2.10-3build1_amd64.deb ... 559s Unpacking libasound2:amd64 (1.2.10-3build1) ... 559s Selecting previously unselected package libgraphite2-3:amd64. 559s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_amd64.deb ... 559s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 559s Selecting previously unselected package libharfbuzz0b:amd64. 559s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_amd64.deb ... 559s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 559s Selecting previously unselected package libpcsclite1:amd64. 559s Preparing to unpack .../17-libpcsclite1_2.0.0-1_amd64.deb ... 559s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 559s Selecting previously unselected package openjdk-21-jre-headless:amd64. 559s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 559s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 560s Selecting previously unselected package default-jre-headless. 560s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 560s Unpacking default-jre-headless (2:1.21-75+exp1) ... 560s Selecting previously unselected package libasm-java. 560s Preparing to unpack .../20-libasm-java_9.6~us1-0ubuntu1_all.deb ... 560s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 560s Selecting previously unselected package libbackport9-java. 560s Preparing to unpack .../21-libbackport9-java_1.10-2_all.deb ... 560s Unpacking libbackport9-java (1.10-2) ... 560s Selecting previously unselected package libdirgra-java. 560s Preparing to unpack .../22-libdirgra-java_0.4-2_all.deb ... 560s Unpacking libdirgra-java (0.4-2) ... 560s Selecting previously unselected package libfixposix4t64:amd64. 560s Preparing to unpack .../23-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 560s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 560s Selecting previously unselected package libheadius-options-java. 560s Preparing to unpack .../24-libheadius-options-java_1.7-1_all.deb ... 560s Unpacking libheadius-options-java (1.7-1) ... 560s Selecting previously unselected package libinvokebinder-java. 560s Preparing to unpack .../25-libinvokebinder-java_1.13-1_all.deb ... 560s Unpacking libinvokebinder-java (1.13-1) ... 560s Selecting previously unselected package libhawtjni-runtime-java. 560s Preparing to unpack .../26-libhawtjni-runtime-java_1.18-1_all.deb ... 560s Unpacking libhawtjni-runtime-java (1.18-1) ... 560s Selecting previously unselected package libjansi-native-java. 560s Preparing to unpack .../27-libjansi-native-java_1.8-2_all.deb ... 560s Unpacking libjansi-native-java (1.8-2) ... 560s Selecting previously unselected package libjansi1-java. 560s Preparing to unpack .../28-libjansi1-java_1.18-3ubuntu1_all.deb ... 560s Unpacking libjansi1-java (1.18-3ubuntu1) ... 560s Selecting previously unselected package libjcodings-java. 560s Preparing to unpack .../29-libjcodings-java_1.0.58-1_all.deb ... 560s Unpacking libjcodings-java (1.0.58-1) ... 560s Selecting previously unselected package libjffi-jni:amd64. 560s Preparing to unpack .../30-libjffi-jni_1.3.13+ds-1_amd64.deb ... 560s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 560s Selecting previously unselected package libjffi-java. 560s Preparing to unpack .../31-libjffi-java_1.3.13+ds-1_all.deb ... 560s Unpacking libjffi-java (1.3.13+ds-1) ... 560s Selecting previously unselected package libjitescript-java. 560s Preparing to unpack .../32-libjitescript-java_0.4.3-1_all.deb ... 560s Unpacking libjitescript-java (0.4.3-1) ... 560s Selecting previously unselected package libjline2-java. 560s Preparing to unpack .../33-libjline2-java_2.14.6-5_all.deb ... 560s Unpacking libjline2-java (2.14.6-5) ... 560s Selecting previously unselected package libjnr-constants-java. 560s Preparing to unpack .../34-libjnr-constants-java_0.10.4-2_all.deb ... 560s Unpacking libjnr-constants-java (0.10.4-2) ... 560s Selecting previously unselected package libjnr-x86asm-java. 560s Preparing to unpack .../35-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 560s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 560s Selecting previously unselected package libjnr-ffi-java. 560s Preparing to unpack .../36-libjnr-ffi-java_2.2.15-2_all.deb ... 560s Unpacking libjnr-ffi-java (2.2.15-2) ... 560s Selecting previously unselected package libjnr-enxio-java. 560s Preparing to unpack .../37-libjnr-enxio-java_0.32.16-1_all.deb ... 560s Unpacking libjnr-enxio-java (0.32.16-1) ... 560s Selecting previously unselected package libjnr-netdb-java. 560s Preparing to unpack .../38-libjnr-netdb-java_1.1.6-1.1_all.deb ... 560s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 561s Selecting previously unselected package libjnr-posix-java. 561s Preparing to unpack .../39-libjnr-posix-java_3.1.18-1_all.deb ... 561s Unpacking libjnr-posix-java (3.1.18-1) ... 561s Selecting previously unselected package libjnr-unixsocket-java. 561s Preparing to unpack .../40-libjnr-unixsocket-java_0.38.21-2_all.deb ... 561s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 561s Selecting previously unselected package libjoda-time-java. 561s Preparing to unpack .../41-libjoda-time-java_2.10.14-1_all.deb ... 561s Unpacking libjoda-time-java (2.10.14-1) ... 561s Selecting previously unselected package libjruby-joni-java. 561s Preparing to unpack .../42-libjruby-joni-java_2.2.1-1_all.deb ... 561s Unpacking libjruby-joni-java (2.2.1-1) ... 561s Selecting previously unselected package libjzlib-java. 561s Preparing to unpack .../43-libjzlib-java_1.1.3-3_all.deb ... 561s Unpacking libjzlib-java (1.1.3-3) ... 561s Selecting previously unselected package libsnakeyaml-engine-java. 561s Preparing to unpack .../44-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 561s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 561s Selecting previously unselected package jruby. 561s Preparing to unpack .../45-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 561s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 561s Selecting previously unselected package autopkgtest-satdep. 561s Preparing to unpack .../46-1-autopkgtest-satdep.deb ... 561s Unpacking autopkgtest-satdep (0) ... 561s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 561s Setting up liblcms2-2:amd64 (2.14-2) ... 561s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 561s Setting up java-common (0.75+exp1) ... 561s Setting up libasm-java (9.6~us1-0ubuntu1) ... 561s Setting up libheadius-options-java (1.7-1) ... 561s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 561s Setting up libjzlib-java (1.1.3-3) ... 561s Setting up libbackport9-java (1.10-2) ... 561s Setting up libasound2-data (1.2.10-3build1) ... 561s Setting up libjitescript-java (0.4.3-1) ... 561s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 561s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 561s Setting up fonts-dejavu-mono (2.37-8) ... 561s Setting up fonts-dejavu-core (2.37-8) ... 561s Setting up libpcsclite1:amd64 (2.0.0-1) ... 561s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 561s Setting up libjoda-time-java (2.10.14-1) ... 561s Setting up libjcodings-java (1.0.58-1) ... 561s Setting up libasound2:amd64 (1.2.10-3build1) ... 561s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 561s Setting up libinvokebinder-java (1.13-1) ... 561s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 561s Setting up ca-certificates-java (20240118) ... 561s No JRE found. Skipping Java certificates setup. 561s Setting up libhawtjni-runtime-java (1.18-1) ... 561s Setting up libdirgra-java (0.4-2) ... 561s Setting up libjnr-constants-java (0.10.4-2) ... 561s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 561s Setting up libjffi-java (1.3.13+ds-1) ... 561s Setting up libjruby-joni-java (2.2.1-1) ... 561s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 561s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 561s Setting up libjansi-native-java (1.8-2) ... 561s Setting up libjansi1-java (1.18-3ubuntu1) ... 561s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 561s Setting up libjline2-java (2.14.6-5) ... 561s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 561s Setting up libjnr-ffi-java (2.2.15-2) ... 561s Setting up libjnr-enxio-java (0.32.16-1) ... 561s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 561s Setting up libjnr-netdb-java (1.1.6-1.1) ... 561s Setting up libjnr-posix-java (3.1.18-1) ... 561s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 561s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 561s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 561s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 561s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 561s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 561s Setting up libjnr-unixsocket-java (0.38.21-2) ... 561s Processing triggers for libc-bin (2.39-0ubuntu6) ... 562s Processing triggers for man-db (2.12.0-3) ... 562s Processing triggers for ca-certificates-java (20240118) ... 563s Adding debian:ACCVRAIZ1.pem 563s Adding debian:AC_RAIZ_FNMT-RCM.pem 563s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 563s Adding debian:ANF_Secure_Server_Root_CA.pem 563s Adding debian:Actalis_Authentication_Root_CA.pem 563s Adding debian:AffirmTrust_Commercial.pem 563s Adding debian:AffirmTrust_Networking.pem 563s Adding debian:AffirmTrust_Premium.pem 563s Adding debian:AffirmTrust_Premium_ECC.pem 563s Adding debian:Amazon_Root_CA_1.pem 563s Adding debian:Amazon_Root_CA_2.pem 563s Adding debian:Amazon_Root_CA_3.pem 563s Adding debian:Amazon_Root_CA_4.pem 563s Adding debian:Atos_TrustedRoot_2011.pem 563s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 563s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 563s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 563s Adding debian:BJCA_Global_Root_CA1.pem 563s Adding debian:BJCA_Global_Root_CA2.pem 563s Adding debian:Baltimore_CyberTrust_Root.pem 563s Adding debian:Buypass_Class_2_Root_CA.pem 563s Adding debian:Buypass_Class_3_Root_CA.pem 563s Adding debian:CA_Disig_Root_R2.pem 563s Adding debian:CFCA_EV_ROOT.pem 563s Adding debian:COMODO_Certification_Authority.pem 563s Adding debian:COMODO_ECC_Certification_Authority.pem 563s Adding debian:COMODO_RSA_Certification_Authority.pem 563s Adding debian:Certainly_Root_E1.pem 563s Adding debian:Certainly_Root_R1.pem 563s Adding debian:Certigna.pem 563s Adding debian:Certigna_Root_CA.pem 563s Adding debian:Certum_EC-384_CA.pem 563s Adding debian:Certum_Trusted_Network_CA.pem 563s Adding debian:Certum_Trusted_Network_CA_2.pem 563s Adding debian:Certum_Trusted_Root_CA.pem 563s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 563s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 563s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 563s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 563s Adding debian:Comodo_AAA_Services_root.pem 563s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 563s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 563s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 563s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 563s Adding debian:DigiCert_Assured_ID_Root_CA.pem 563s Adding debian:DigiCert_Assured_ID_Root_G2.pem 563s Adding debian:DigiCert_Assured_ID_Root_G3.pem 563s Adding debian:DigiCert_Global_Root_CA.pem 563s Adding debian:DigiCert_Global_Root_G2.pem 563s Adding debian:DigiCert_Global_Root_G3.pem 563s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 563s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 563s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 563s Adding debian:DigiCert_Trusted_Root_G4.pem 563s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 563s Adding debian:Entrust_Root_Certification_Authority.pem 563s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 563s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 563s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 563s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 563s Adding debian:GLOBALTRUST_2020.pem 563s Adding debian:GTS_Root_R1.pem 563s Adding debian:GTS_Root_R2.pem 563s Adding debian:GTS_Root_R3.pem 563s Adding debian:GTS_Root_R4.pem 563s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 563s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 563s Adding debian:GlobalSign_Root_CA.pem 563s Adding debian:GlobalSign_Root_CA_-_R3.pem 563s Adding debian:GlobalSign_Root_CA_-_R6.pem 563s Adding debian:GlobalSign_Root_E46.pem 563s Adding debian:GlobalSign_Root_R46.pem 563s Adding debian:Go_Daddy_Class_2_CA.pem 563s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 563s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 563s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 563s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 563s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 563s Adding debian:HiPKI_Root_CA_-_G1.pem 563s Adding debian:Hongkong_Post_Root_CA_3.pem 563s Adding debian:ISRG_Root_X1.pem 563s Adding debian:ISRG_Root_X2.pem 563s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 563s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 563s Adding debian:Izenpe.com.pem 563s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 563s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 563s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 563s Adding debian:NAVER_Global_Root_Certification_Authority.pem 563s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 563s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 563s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 563s Adding debian:QuoVadis_Root_CA_1_G3.pem 563s Adding debian:QuoVadis_Root_CA_2.pem 563s Adding debian:QuoVadis_Root_CA_2_G3.pem 563s Adding debian:QuoVadis_Root_CA_3.pem 563s Adding debian:QuoVadis_Root_CA_3_G3.pem 563s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 563s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 563s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 563s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 563s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 563s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 563s Adding debian:SZAFIR_ROOT_CA2.pem 563s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 563s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 563s Adding debian:SecureSign_RootCA11.pem 563s Adding debian:SecureTrust_CA.pem 563s Adding debian:Secure_Global_CA.pem 563s Adding debian:Security_Communication_ECC_RootCA1.pem 563s Adding debian:Security_Communication_RootCA2.pem 563s Adding debian:Security_Communication_RootCA3.pem 563s Adding debian:Security_Communication_Root_CA.pem 563s Adding debian:Starfield_Class_2_CA.pem 563s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 563s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 563s Adding debian:SwissSign_Gold_CA_-_G2.pem 563s Adding debian:SwissSign_Silver_CA_-_G2.pem 563s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 563s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 563s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 563s Adding debian:TWCA_Global_Root_CA.pem 563s Adding debian:TWCA_Root_Certification_Authority.pem 563s Adding debian:TeliaSonera_Root_CA_v1.pem 563s Adding debian:Telia_Root_CA_v2.pem 563s Adding debian:TrustAsia_Global_Root_CA_G3.pem 563s Adding debian:TrustAsia_Global_Root_CA_G4.pem 563s Adding debian:Trustwave_Global_Certification_Authority.pem 563s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 563s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 563s Adding debian:TunTrust_Root_CA.pem 563s Adding debian:UCA_Extended_Validation_Root.pem 563s Adding debian:UCA_Global_G2_Root.pem 563s Adding debian:USERTrust_ECC_Certification_Authority.pem 563s Adding debian:USERTrust_RSA_Certification_Authority.pem 563s Adding debian:XRamp_Global_CA_Root.pem 563s Adding debian:certSIGN_ROOT_CA.pem 563s Adding debian:certSIGN_Root_CA_G2.pem 563s Adding debian:e-Szigno_Root_CA_2017.pem 563s Adding debian:ePKI_Root_Certification_Authority.pem 563s Adding debian:emSign_ECC_Root_CA_-_C3.pem 563s Adding debian:emSign_ECC_Root_CA_-_G3.pem 563s Adding debian:emSign_Root_CA_-_C1.pem 563s Adding debian:emSign_Root_CA_-_G1.pem 563s Adding debian:vTrus_ECC_Root_CA.pem 563s Adding debian:vTrus_Root_CA.pem 563s done. 563s Setting up default-jre-headless (2:1.21-75+exp1) ... 563s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 563s Setting up autopkgtest-satdep (0) ... 566s (Reading database ... 74632 files and directories currently installed.) 566s Removing autopkgtest-satdep (0) ... 566s autopkgtest [07:48:15]: test smoke: [----------------------- 569s Hello World! 572s Hello JRuby! 572s autopkgtest [07:48:21]: test smoke: -----------------------] 572s smoke PASS (superficial)autopkgtest [07:48:21]: test smoke: - - - - - - - - - - results - - - - - - - - - - 572s 572s autopkgtest [07:48:21]: test jgem: preparing testbed 574s Reading package lists... 574s Building dependency tree... 574s Reading state information... 574s Starting pkgProblemResolver with broken count: 0 574s Starting 2 pkgProblemResolver with broken count: 0 574s Done 575s The following additional packages will be installed: 575s libgmp-dev libgmpxx4ldbl libruby libruby3.1 libruby3.2 rake ruby 575s ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 575s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 575s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 575s rubygems-integration 575s Suggested packages: 575s gmp-doc libgmp10-doc libmpfr-dev ri ruby-dev bundler 575s Recommended packages: 575s zip fonts-lato libjs-jquery ruby3.1-doc ruby3.2-doc 575s The following NEW packages will be installed: 575s autopkgtest-satdep libgmp-dev libgmpxx4ldbl libruby libruby3.1 libruby3.2 575s rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 575s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 575s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 575s ruby3.2-dev rubygems-integration 575s 0 upgraded, 25 newly installed, 0 to remove and 0 not upgraded. 575s Need to get 12.6 MB/12.6 MB of archives. 575s After this operation, 63.2 MB of additional disk space will be used. 575s Get:1 /tmp/autopkgtest.mg4W0U/2-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [756 B] 575s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2ubuntu4 [9956 B] 575s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2ubuntu4 [342 kB] 575s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 rubygems-integration all 1.18 [5336 B] 575s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1 amd64 3.1.2-7ubuntu4 [48.9 kB] 575s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-rubygems all 3.4.20-1 [238 kB] 575s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 ruby amd64 1:3.1+1 [3466 B] 575s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 rake all 13.0.6-3 [61.6 kB] 575s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 575s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-webrick all 1.8.1-1 [52.3 kB] 575s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 575s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.2 amd64 3.2.3-1 [5339 kB] 575s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-sdbm amd64 1.0.0-5build3 [18.6 kB] 575s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.1 amd64 3.1.2-7ubuntu4 [5164 kB] 575s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libruby amd64 1:3.1+1 [4640 B] 575s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1-dev amd64 3.1.2-7ubuntu4 [394 kB] 575s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2 amd64 3.2.3-1 [50.7 kB] 575s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2-dev amd64 3.2.3-1 [399 kB] 575s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-all-dev amd64 1:3.1+1 [5732 B] 575s Get:20 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 575s Get:21 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 575s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 575s Get:23 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 575s Get:24 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 575s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 576s Fetched 12.6 MB in 0s (26.4 MB/s) 576s Selecting previously unselected package libgmpxx4ldbl:amd64. 576s (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 ... 74632 files and directories currently installed.) 576s Preparing to unpack .../00-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 576s Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 576s Selecting previously unselected package libgmp-dev:amd64. 576s Preparing to unpack .../01-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 576s Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 576s Selecting previously unselected package rubygems-integration. 576s Preparing to unpack .../02-rubygems-integration_1.18_all.deb ... 576s Unpacking rubygems-integration (1.18) ... 576s Selecting previously unselected package ruby3.1. 576s Preparing to unpack .../03-ruby3.1_3.1.2-7ubuntu4_amd64.deb ... 576s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 576s Selecting previously unselected package ruby-rubygems. 576s Preparing to unpack .../04-ruby-rubygems_3.4.20-1_all.deb ... 576s Unpacking ruby-rubygems (3.4.20-1) ... 576s Selecting previously unselected package ruby. 576s Preparing to unpack .../05-ruby_1%3a3.1+1_amd64.deb ... 576s Unpacking ruby (1:3.1+1) ... 576s Selecting previously unselected package rake. 576s Preparing to unpack .../06-rake_13.0.6-3_all.deb ... 576s Unpacking rake (13.0.6-3) ... 576s Selecting previously unselected package ruby-net-telnet. 576s Preparing to unpack .../07-ruby-net-telnet_0.2.0-1_all.deb ... 576s Unpacking ruby-net-telnet (0.2.0-1) ... 576s Selecting previously unselected package ruby-webrick. 576s Preparing to unpack .../08-ruby-webrick_1.8.1-1_all.deb ... 576s Unpacking ruby-webrick (1.8.1-1) ... 576s Selecting previously unselected package ruby-xmlrpc. 576s Preparing to unpack .../09-ruby-xmlrpc_0.3.2-2_all.deb ... 576s Unpacking ruby-xmlrpc (0.3.2-2) ... 576s Selecting previously unselected package libruby3.2:amd64. 576s Preparing to unpack .../10-libruby3.2_3.2.3-1_amd64.deb ... 576s Unpacking libruby3.2:amd64 (3.2.3-1) ... 576s Selecting previously unselected package ruby-sdbm:amd64. 576s Preparing to unpack .../11-ruby-sdbm_1.0.0-5build3_amd64.deb ... 576s Unpacking ruby-sdbm:amd64 (1.0.0-5build3) ... 576s Selecting previously unselected package libruby3.1:amd64. 576s Preparing to unpack .../12-libruby3.1_3.1.2-7ubuntu4_amd64.deb ... 576s Unpacking libruby3.1:amd64 (3.1.2-7ubuntu4) ... 577s Selecting previously unselected package libruby:amd64. 577s Preparing to unpack .../13-libruby_1%3a3.1+1_amd64.deb ... 577s Unpacking libruby:amd64 (1:3.1+1) ... 577s Selecting previously unselected package ruby3.1-dev:amd64. 577s Preparing to unpack .../14-ruby3.1-dev_3.1.2-7ubuntu4_amd64.deb ... 577s Unpacking ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 577s Selecting previously unselected package ruby3.2. 577s Preparing to unpack .../15-ruby3.2_3.2.3-1_amd64.deb ... 577s Unpacking ruby3.2 (3.2.3-1) ... 577s Selecting previously unselected package ruby3.2-dev:amd64. 577s Preparing to unpack .../16-ruby3.2-dev_3.2.3-1_amd64.deb ... 577s Unpacking ruby3.2-dev:amd64 (3.2.3-1) ... 577s Selecting previously unselected package ruby-all-dev:amd64. 577s Preparing to unpack .../17-ruby-all-dev_1%3a3.1+1_amd64.deb ... 577s Unpacking ruby-all-dev:amd64 (1:3.1+1) ... 577s Selecting previously unselected package ruby-diff-lcs. 577s Preparing to unpack .../18-ruby-diff-lcs_1.5.1-1_all.deb ... 577s Unpacking ruby-diff-lcs (1.5.1-1) ... 577s Selecting previously unselected package ruby-rspec-support. 577s Preparing to unpack .../19-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 577s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 577s Selecting previously unselected package ruby-rspec-core. 577s Preparing to unpack .../20-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 577s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 577s Selecting previously unselected package ruby-rspec-expectations. 577s Preparing to unpack .../21-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 577s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 577s Selecting previously unselected package ruby-rspec-mocks. 577s Preparing to unpack .../22-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 577s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 577s Selecting previously unselected package ruby-rspec. 577s Preparing to unpack .../23-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 577s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 577s Selecting previously unselected package autopkgtest-satdep. 577s Preparing to unpack .../24-2-autopkgtest-satdep.deb ... 577s Unpacking autopkgtest-satdep (0) ... 577s Setting up rubygems-integration (1.18) ... 577s Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 577s Setting up ruby-net-telnet (0.2.0-1) ... 577s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 577s Setting up ruby-webrick (1.8.1-1) ... 577s Setting up ruby-xmlrpc (0.3.2-2) ... 577s Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 577s Setting up rake (13.0.6-3) ... 577s Setting up libruby:amd64 (1:3.1+1) ... 577s Setting up ruby-rubygems (3.4.20-1) ... 577s Setting up ruby-sdbm:amd64 (1.0.0-5build3) ... 577s Setting up libruby3.1:amd64 (3.1.2-7ubuntu4) ... 577s Setting up libruby3.2:amd64 (3.2.3-1) ... 577s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 577s Setting up ruby3.2 (3.2.3-1) ... 577s Setting up ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 577s Setting up ruby3.2-dev:amd64 (3.2.3-1) ... 577s Setting up ruby-all-dev:amd64 (1:3.1+1) ... 577s Setting up ruby (1:3.1+1) ... 577s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 577s Setting up ruby-diff-lcs (1.5.1-1) ... 577s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 577s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 577s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 577s Setting up autopkgtest-satdep (0) ... 577s Processing triggers for libc-bin (2.39-0ubuntu6) ... 577s Processing triggers for man-db (2.12.0-3) ... 580s (Reading database ... 81080 files and directories currently installed.) 580s Removing autopkgtest-satdep (0) ... 580s autopkgtest [07:48:29]: test jgem: [----------------------- 581s installing system gems into jruby: 581s * diff-lcs-1.5.1 581s * minitest-5.15.0 581s * power_assert-2.0.1 581s * rake-13.0.6 581s * rexml-3.2.5 581s * rspec-3.13.0 581s * rspec-core-3.13.0 581s * rspec-expectations-3.13.0 581s * rspec-mocks-3.13.0 581s * rspec-support-3.13.1 581s * test-unit-3.5.3 586s json (default: 2.7.1 java) 594s Successfully installed hello_command_line-0.1.0 594s 1 gem installed 599s hello_command_line (0.1.0) 602s This is a command tool written by ruby. 602s autopkgtest [07:48:51]: test jgem: -----------------------] 602s autopkgtest [07:48:51]: test jgem: - - - - - - - - - - results - - - - - - - - - - 602s jgem PASS 602s autopkgtest [07:48:51]: test jirb: preparing testbed 1123s autopkgtest [07:57:32]: testbed dpkg architecture: amd64 1123s autopkgtest [07:57:32]: testbed apt version: 2.7.12 1123s autopkgtest [07:57:32]: @@@@@@@@@@@@@@@@@@@@ test bed setup 1124s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 1124s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 1124s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 1124s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 1124s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 1124s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 1124s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 1124s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 1124s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 1124s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 1124s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 1124s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 1124s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 1124s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 1124s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 1124s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 1124s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 1127s Fetched 11.7 MB in 2s (7319 kB/s) 1128s Reading package lists... 1129s Reading package lists... 1130s Building dependency tree... 1130s Reading state information... 1130s Calculating upgrade... 1130s The following packages will be upgraded: 1130s psmisc 1130s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1130s Need to get 179 kB of archives. 1130s After this operation, 28.7 kB disk space will be freed. 1130s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 1131s Fetched 179 kB in 0s (6832 kB/s) 1131s (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 ... 71864 files and directories currently installed.) 1131s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 1131s Unpacking psmisc (23.7-1) over (23.6-2) ... 1131s Setting up psmisc (23.7-1) ... 1131s Processing triggers for man-db (2.12.0-3) ... 1132s Reading package lists... 1132s Building dependency tree... 1132s Reading state information... 1133s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1133s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 1133s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 1133s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 1133s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 1134s Reading package lists... 1134s Reading package lists... 1135s Building dependency tree... 1135s Reading state information... 1135s Calculating upgrade... 1136s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1136s Reading package lists... 1136s Building dependency tree... 1136s Reading state information... 1136s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1137s Reading package lists... 1138s Building dependency tree... 1138s Reading state information... 1138s Starting pkgProblemResolver with broken count: 0 1138s Starting 2 pkgProblemResolver with broken count: 0 1138s Done 1139s The following additional packages will be installed: 1139s ca-certificates-java default-jre-headless expect fontconfig-config 1139s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 1139s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 1139s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 1139s libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java libheadius-options-java 1139s libinvokebinder-java libjansi-native-java libjansi1-java libjcodings-java 1139s libjffi-java libjffi-jni libjitescript-java libjline2-java 1139s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 1139s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 1139s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 1139s liblcms2-2 libpcsclite1 libsnakeyaml-engine-java libtcl8.6 1139s openjdk-21-jre-headless tcl-expect tcl8.6 1139s Suggested packages: 1139s default-jre tk8.6 libasound2-plugins alsa-utils cups-common 1139s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 1139s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 1139s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 1139s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic 1139s tcl-tclreadline 1139s Recommended packages: 1139s fonts-lato alsa-ucm-conf alsa-topology-conf 1139s The following NEW packages will be installed: 1139s autopkgtest-satdep ca-certificates-java default-jre-headless expect 1139s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 1139s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 1139s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 1139s libfontconfig1 libgraphite2-3 libharfbuzz0b libhawtjni-runtime-java 1139s libheadius-options-java libinvokebinder-java libjansi-native-java 1139s libjansi1-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 1139s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 1139s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 1139s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 1139s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 1139s libsnakeyaml-engine-java libtcl8.6 openjdk-21-jre-headless tcl-expect tcl8.6 1139s 0 upgraded, 51 newly installed, 0 to remove and 0 not upgraded. 1139s Need to get 90.4 MB/90.4 MB of archives. 1139s After this operation, 273 MB of additional disk space will be used. 1139s Get:1 /tmp/autopkgtest.mg4W0U/3-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [704 B] 1139s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 1139s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 1139s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 1139s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 1139s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 1139s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 1139s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 1139s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 1139s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 1139s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 1139s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 1139s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 1139s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 1139s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 1139s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 1139s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 1139s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 1139s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 1139s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 1139s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 1139s Get:22 http://ftpmaster.internal/ubuntu noble/main amd64 libtcl8.6 amd64 8.6.13+dfsg-2 [984 kB] 1139s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 tcl8.6 amd64 8.6.13+dfsg-2 [14.7 kB] 1139s Get:24 http://ftpmaster.internal/ubuntu noble/universe amd64 tcl-expect amd64 5.45.4-2build1 [105 kB] 1139s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 expect amd64 5.45.4-2build1 [137 kB] 1139s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 1139s Get:27 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 1139s Get:28 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 1139s Get:29 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 1139s Get:30 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 1139s Get:31 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 1139s Get:32 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 1139s Get:33 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 1139s Get:34 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 1139s Get:35 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 1139s Get:36 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 1139s Get:37 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 1139s Get:38 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 1139s Get:39 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 1139s Get:40 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 1139s Get:41 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 1139s Get:42 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 1139s Get:43 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 1139s Get:44 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 1139s Get:45 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 1139s Get:46 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 1139s Get:47 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 1139s Get:48 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 1139s Get:49 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 1139s Get:50 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 1139s Get:51 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 1140s Fetched 90.4 MB in 1s (111 MB/s) 1140s Selecting previously unselected package ca-certificates-java. 1140s (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 ... 71861 files and directories currently installed.) 1140s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 1140s Unpacking ca-certificates-java (20240118) ... 1140s Selecting previously unselected package java-common. 1140s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 1140s Unpacking java-common (0.75+exp1) ... 1140s Selecting previously unselected package libavahi-common-data:amd64. 1140s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 1140s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 1140s Selecting previously unselected package libavahi-common3:amd64. 1140s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 1140s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 1140s Selecting previously unselected package libavahi-client3:amd64. 1140s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 1140s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 1140s Selecting previously unselected package libcups2:amd64. 1140s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_amd64.deb ... 1140s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 1140s Selecting previously unselected package liblcms2-2:amd64. 1140s Preparing to unpack .../06-liblcms2-2_2.14-2_amd64.deb ... 1140s Unpacking liblcms2-2:amd64 (2.14-2) ... 1140s Selecting previously unselected package libjpeg-turbo8:amd64. 1140s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 1140s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 1140s Selecting previously unselected package libjpeg8:amd64. 1140s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_amd64.deb ... 1140s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 1140s Selecting previously unselected package fonts-dejavu-mono. 1140s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 1140s Unpacking fonts-dejavu-mono (2.37-8) ... 1140s Selecting previously unselected package fonts-dejavu-core. 1140s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 1140s Unpacking fonts-dejavu-core (2.37-8) ... 1140s Selecting previously unselected package fontconfig-config. 1140s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 1140s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 1140s Selecting previously unselected package libfontconfig1:amd64. 1140s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 1140s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 1140s Selecting previously unselected package libasound2-data. 1140s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 1140s Unpacking libasound2-data (1.2.10-3build1) ... 1141s Selecting previously unselected package libasound2:amd64. 1141s Preparing to unpack .../14-libasound2_1.2.10-3build1_amd64.deb ... 1141s Unpacking libasound2:amd64 (1.2.10-3build1) ... 1141s Selecting previously unselected package libgraphite2-3:amd64. 1141s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_amd64.deb ... 1141s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 1141s Selecting previously unselected package libharfbuzz0b:amd64. 1141s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_amd64.deb ... 1141s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 1141s Selecting previously unselected package libpcsclite1:amd64. 1141s Preparing to unpack .../17-libpcsclite1_2.0.0-1_amd64.deb ... 1141s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 1141s Selecting previously unselected package openjdk-21-jre-headless:amd64. 1141s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 1141s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 1142s Selecting previously unselected package default-jre-headless. 1142s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 1142s Unpacking default-jre-headless (2:1.21-75+exp1) ... 1142s Selecting previously unselected package libtcl8.6:amd64. 1142s Preparing to unpack .../20-libtcl8.6_8.6.13+dfsg-2_amd64.deb ... 1142s Unpacking libtcl8.6:amd64 (8.6.13+dfsg-2) ... 1142s Selecting previously unselected package tcl8.6. 1142s Preparing to unpack .../21-tcl8.6_8.6.13+dfsg-2_amd64.deb ... 1142s Unpacking tcl8.6 (8.6.13+dfsg-2) ... 1142s Selecting previously unselected package tcl-expect:amd64. 1142s Preparing to unpack .../22-tcl-expect_5.45.4-2build1_amd64.deb ... 1142s Unpacking tcl-expect:amd64 (5.45.4-2build1) ... 1142s Selecting previously unselected package expect. 1142s Preparing to unpack .../23-expect_5.45.4-2build1_amd64.deb ... 1142s Unpacking expect (5.45.4-2build1) ... 1142s Selecting previously unselected package libasm-java. 1142s Preparing to unpack .../24-libasm-java_9.6~us1-0ubuntu1_all.deb ... 1142s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 1142s Selecting previously unselected package libbackport9-java. 1142s Preparing to unpack .../25-libbackport9-java_1.10-2_all.deb ... 1142s Unpacking libbackport9-java (1.10-2) ... 1142s Selecting previously unselected package libdirgra-java. 1142s Preparing to unpack .../26-libdirgra-java_0.4-2_all.deb ... 1142s Unpacking libdirgra-java (0.4-2) ... 1142s Selecting previously unselected package libfixposix4t64:amd64. 1142s Preparing to unpack .../27-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 1142s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 1142s Selecting previously unselected package libheadius-options-java. 1142s Preparing to unpack .../28-libheadius-options-java_1.7-1_all.deb ... 1142s Unpacking libheadius-options-java (1.7-1) ... 1142s Selecting previously unselected package libinvokebinder-java. 1142s Preparing to unpack .../29-libinvokebinder-java_1.13-1_all.deb ... 1142s Unpacking libinvokebinder-java (1.13-1) ... 1142s Selecting previously unselected package libhawtjni-runtime-java. 1142s Preparing to unpack .../30-libhawtjni-runtime-java_1.18-1_all.deb ... 1142s Unpacking libhawtjni-runtime-java (1.18-1) ... 1142s Selecting previously unselected package libjansi-native-java. 1142s Preparing to unpack .../31-libjansi-native-java_1.8-2_all.deb ... 1142s Unpacking libjansi-native-java (1.8-2) ... 1142s Selecting previously unselected package libjansi1-java. 1142s Preparing to unpack .../32-libjansi1-java_1.18-3ubuntu1_all.deb ... 1142s Unpacking libjansi1-java (1.18-3ubuntu1) ... 1142s Selecting previously unselected package libjcodings-java. 1142s Preparing to unpack .../33-libjcodings-java_1.0.58-1_all.deb ... 1142s Unpacking libjcodings-java (1.0.58-1) ... 1142s Selecting previously unselected package libjffi-jni:amd64. 1142s Preparing to unpack .../34-libjffi-jni_1.3.13+ds-1_amd64.deb ... 1142s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 1142s Selecting previously unselected package libjffi-java. 1142s Preparing to unpack .../35-libjffi-java_1.3.13+ds-1_all.deb ... 1142s Unpacking libjffi-java (1.3.13+ds-1) ... 1142s Selecting previously unselected package libjitescript-java. 1142s Preparing to unpack .../36-libjitescript-java_0.4.3-1_all.deb ... 1142s Unpacking libjitescript-java (0.4.3-1) ... 1142s Selecting previously unselected package libjline2-java. 1142s Preparing to unpack .../37-libjline2-java_2.14.6-5_all.deb ... 1142s Unpacking libjline2-java (2.14.6-5) ... 1142s Selecting previously unselected package libjnr-constants-java. 1142s Preparing to unpack .../38-libjnr-constants-java_0.10.4-2_all.deb ... 1142s Unpacking libjnr-constants-java (0.10.4-2) ... 1142s Selecting previously unselected package libjnr-x86asm-java. 1142s Preparing to unpack .../39-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 1142s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 1142s Selecting previously unselected package libjnr-ffi-java. 1142s Preparing to unpack .../40-libjnr-ffi-java_2.2.15-2_all.deb ... 1142s Unpacking libjnr-ffi-java (2.2.15-2) ... 1142s Selecting previously unselected package libjnr-enxio-java. 1142s Preparing to unpack .../41-libjnr-enxio-java_0.32.16-1_all.deb ... 1142s Unpacking libjnr-enxio-java (0.32.16-1) ... 1142s Selecting previously unselected package libjnr-netdb-java. 1142s Preparing to unpack .../42-libjnr-netdb-java_1.1.6-1.1_all.deb ... 1142s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 1142s Selecting previously unselected package libjnr-posix-java. 1142s Preparing to unpack .../43-libjnr-posix-java_3.1.18-1_all.deb ... 1142s Unpacking libjnr-posix-java (3.1.18-1) ... 1142s Selecting previously unselected package libjnr-unixsocket-java. 1142s Preparing to unpack .../44-libjnr-unixsocket-java_0.38.21-2_all.deb ... 1142s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 1142s Selecting previously unselected package libjoda-time-java. 1142s Preparing to unpack .../45-libjoda-time-java_2.10.14-1_all.deb ... 1142s Unpacking libjoda-time-java (2.10.14-1) ... 1142s Selecting previously unselected package libjruby-joni-java. 1142s Preparing to unpack .../46-libjruby-joni-java_2.2.1-1_all.deb ... 1142s Unpacking libjruby-joni-java (2.2.1-1) ... 1142s Selecting previously unselected package libjzlib-java. 1142s Preparing to unpack .../47-libjzlib-java_1.1.3-3_all.deb ... 1142s Unpacking libjzlib-java (1.1.3-3) ... 1142s Selecting previously unselected package libsnakeyaml-engine-java. 1142s Preparing to unpack .../48-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 1142s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 1142s Selecting previously unselected package jruby. 1142s Preparing to unpack .../49-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 1142s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 1143s Selecting previously unselected package autopkgtest-satdep. 1143s Preparing to unpack .../50-3-autopkgtest-satdep.deb ... 1143s Unpacking autopkgtest-satdep (0) ... 1143s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 1143s Setting up liblcms2-2:amd64 (2.14-2) ... 1143s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 1143s Setting up java-common (0.75+exp1) ... 1143s Setting up libasm-java (9.6~us1-0ubuntu1) ... 1143s Setting up libheadius-options-java (1.7-1) ... 1143s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 1143s Setting up libjzlib-java (1.1.3-3) ... 1143s Setting up libbackport9-java (1.10-2) ... 1143s Setting up libasound2-data (1.2.10-3build1) ... 1143s Setting up libjitescript-java (0.4.3-1) ... 1143s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 1143s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 1143s Setting up fonts-dejavu-mono (2.37-8) ... 1143s Setting up libtcl8.6:amd64 (8.6.13+dfsg-2) ... 1143s Setting up fonts-dejavu-core (2.37-8) ... 1143s Setting up libpcsclite1:amd64 (2.0.0-1) ... 1143s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 1143s Setting up libjoda-time-java (2.10.14-1) ... 1143s Setting up libjcodings-java (1.0.58-1) ... 1143s Setting up libasound2:amd64 (1.2.10-3build1) ... 1143s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 1143s Setting up libinvokebinder-java (1.13-1) ... 1143s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 1143s Setting up ca-certificates-java (20240118) ... 1143s No JRE found. Skipping Java certificates setup. 1143s Setting up libhawtjni-runtime-java (1.18-1) ... 1143s Setting up libdirgra-java (0.4-2) ... 1143s Setting up libjnr-constants-java (0.10.4-2) ... 1143s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 1143s Setting up libjffi-java (1.3.13+ds-1) ... 1143s Setting up tcl8.6 (8.6.13+dfsg-2) ... 1143s Setting up libjruby-joni-java (2.2.1-1) ... 1143s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 1143s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 1143s Setting up tcl-expect:amd64 (5.45.4-2build1) ... 1143s Setting up libjansi-native-java (1.8-2) ... 1143s Setting up libjansi1-java (1.18-3ubuntu1) ... 1143s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 1143s Setting up libjline2-java (2.14.6-5) ... 1143s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 1143s Setting up libjnr-ffi-java (2.2.15-2) ... 1143s Setting up expect (5.45.4-2build1) ... 1143s Setting up libjnr-enxio-java (0.32.16-1) ... 1143s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 1143s Setting up libjnr-netdb-java (1.1.6-1.1) ... 1143s Setting up libjnr-posix-java (3.1.18-1) ... 1143s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 1143s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 1143s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 1143s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 1143s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 1143s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 1143s Setting up libjnr-unixsocket-java (0.38.21-2) ... 1143s Processing triggers for libc-bin (2.39-0ubuntu6) ... 1143s Processing triggers for man-db (2.12.0-3) ... 1144s Processing triggers for ca-certificates-java (20240118) ... 1144s Adding debian:ACCVRAIZ1.pem 1144s Adding debian:AC_RAIZ_FNMT-RCM.pem 1144s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 1144s Adding debian:ANF_Secure_Server_Root_CA.pem 1144s Adding debian:Actalis_Authentication_Root_CA.pem 1144s Adding debian:AffirmTrust_Commercial.pem 1144s Adding debian:AffirmTrust_Networking.pem 1144s Adding debian:AffirmTrust_Premium.pem 1144s Adding debian:AffirmTrust_Premium_ECC.pem 1144s Adding debian:Amazon_Root_CA_1.pem 1145s Adding debian:Amazon_Root_CA_2.pem 1145s Adding debian:Amazon_Root_CA_3.pem 1145s Adding debian:Amazon_Root_CA_4.pem 1145s Adding debian:Atos_TrustedRoot_2011.pem 1145s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 1145s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 1145s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 1145s Adding debian:BJCA_Global_Root_CA1.pem 1145s Adding debian:BJCA_Global_Root_CA2.pem 1145s Adding debian:Baltimore_CyberTrust_Root.pem 1145s Adding debian:Buypass_Class_2_Root_CA.pem 1145s Adding debian:Buypass_Class_3_Root_CA.pem 1145s Adding debian:CA_Disig_Root_R2.pem 1145s Adding debian:CFCA_EV_ROOT.pem 1145s Adding debian:COMODO_Certification_Authority.pem 1145s Adding debian:COMODO_ECC_Certification_Authority.pem 1145s Adding debian:COMODO_RSA_Certification_Authority.pem 1145s Adding debian:Certainly_Root_E1.pem 1145s Adding debian:Certainly_Root_R1.pem 1145s Adding debian:Certigna.pem 1145s Adding debian:Certigna_Root_CA.pem 1145s Adding debian:Certum_EC-384_CA.pem 1145s Adding debian:Certum_Trusted_Network_CA.pem 1145s Adding debian:Certum_Trusted_Network_CA_2.pem 1145s Adding debian:Certum_Trusted_Root_CA.pem 1145s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 1145s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 1145s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 1145s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 1145s Adding debian:Comodo_AAA_Services_root.pem 1145s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 1145s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 1145s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 1145s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 1145s Adding debian:DigiCert_Assured_ID_Root_CA.pem 1145s Adding debian:DigiCert_Assured_ID_Root_G2.pem 1145s Adding debian:DigiCert_Assured_ID_Root_G3.pem 1145s Adding debian:DigiCert_Global_Root_CA.pem 1145s Adding debian:DigiCert_Global_Root_G2.pem 1145s Adding debian:DigiCert_Global_Root_G3.pem 1145s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 1145s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 1145s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 1145s Adding debian:DigiCert_Trusted_Root_G4.pem 1145s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 1145s Adding debian:Entrust_Root_Certification_Authority.pem 1145s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 1145s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 1145s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 1145s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 1145s Adding debian:GLOBALTRUST_2020.pem 1145s Adding debian:GTS_Root_R1.pem 1145s Adding debian:GTS_Root_R2.pem 1145s Adding debian:GTS_Root_R3.pem 1145s Adding debian:GTS_Root_R4.pem 1145s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 1145s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 1145s Adding debian:GlobalSign_Root_CA.pem 1145s Adding debian:GlobalSign_Root_CA_-_R3.pem 1145s Adding debian:GlobalSign_Root_CA_-_R6.pem 1145s Adding debian:GlobalSign_Root_E46.pem 1145s Adding debian:GlobalSign_Root_R46.pem 1145s Adding debian:Go_Daddy_Class_2_CA.pem 1145s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 1145s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 1145s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 1145s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 1145s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 1145s Adding debian:HiPKI_Root_CA_-_G1.pem 1145s Adding debian:Hongkong_Post_Root_CA_3.pem 1145s Adding debian:ISRG_Root_X1.pem 1145s Adding debian:ISRG_Root_X2.pem 1145s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 1145s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 1145s Adding debian:Izenpe.com.pem 1145s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 1145s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 1145s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 1145s Adding debian:NAVER_Global_Root_Certification_Authority.pem 1145s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 1145s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 1145s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 1145s Adding debian:QuoVadis_Root_CA_1_G3.pem 1145s Adding debian:QuoVadis_Root_CA_2.pem 1145s Adding debian:QuoVadis_Root_CA_2_G3.pem 1145s Adding debian:QuoVadis_Root_CA_3.pem 1145s Adding debian:QuoVadis_Root_CA_3_G3.pem 1145s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 1145s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 1145s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 1145s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 1145s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 1145s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 1145s Adding debian:SZAFIR_ROOT_CA2.pem 1145s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 1145s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 1145s Adding debian:SecureSign_RootCA11.pem 1145s Adding debian:SecureTrust_CA.pem 1145s Adding debian:Secure_Global_CA.pem 1145s Adding debian:Security_Communication_ECC_RootCA1.pem 1145s Adding debian:Security_Communication_RootCA2.pem 1145s Adding debian:Security_Communication_RootCA3.pem 1145s Adding debian:Security_Communication_Root_CA.pem 1145s Adding debian:Starfield_Class_2_CA.pem 1145s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 1145s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 1145s Adding debian:SwissSign_Gold_CA_-_G2.pem 1145s Adding debian:SwissSign_Silver_CA_-_G2.pem 1145s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 1145s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 1145s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 1145s Adding debian:TWCA_Global_Root_CA.pem 1145s Adding debian:TWCA_Root_Certification_Authority.pem 1145s Adding debian:TeliaSonera_Root_CA_v1.pem 1145s Adding debian:Telia_Root_CA_v2.pem 1145s Adding debian:TrustAsia_Global_Root_CA_G3.pem 1145s Adding debian:TrustAsia_Global_Root_CA_G4.pem 1145s Adding debian:Trustwave_Global_Certification_Authority.pem 1145s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 1145s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 1145s Adding debian:TunTrust_Root_CA.pem 1145s Adding debian:UCA_Extended_Validation_Root.pem 1145s Adding debian:UCA_Global_G2_Root.pem 1145s Adding debian:USERTrust_ECC_Certification_Authority.pem 1145s Adding debian:USERTrust_RSA_Certification_Authority.pem 1145s Adding debian:XRamp_Global_CA_Root.pem 1145s Adding debian:certSIGN_ROOT_CA.pem 1145s Adding debian:certSIGN_Root_CA_G2.pem 1145s Adding debian:e-Szigno_Root_CA_2017.pem 1145s Adding debian:ePKI_Root_Certification_Authority.pem 1145s Adding debian:emSign_ECC_Root_CA_-_C3.pem 1145s Adding debian:emSign_ECC_Root_CA_-_G3.pem 1145s Adding debian:emSign_Root_CA_-_C1.pem 1145s Adding debian:emSign_Root_CA_-_G1.pem 1145s Adding debian:vTrus_ECC_Root_CA.pem 1145s Adding debian:vTrus_Root_CA.pem 1145s done. 1145s Setting up default-jre-headless (2:1.21-75+exp1) ... 1145s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 1145s Setting up autopkgtest-satdep (0) ... 1148s (Reading database ... 74962 files and directories currently installed.) 1148s Removing autopkgtest-satdep (0) ... 1159s autopkgtest [07:58:08]: test jirb: [----------------------- 1159s spawn /usr/bin/jirb --singleline --prompt simple 1163s >> puts 'Hello' + 'World' 1168s HelloWorldautopkgtest [07:58:17]: test jirb: -----------------------] 1168s autopkgtest [07:58:17]: test jirb: - - - - - - - - - - results - - - - - - - - - - 1168s jirb PASS 1168s autopkgtest [07:58:17]: test jruby: preparing testbed 1684s autopkgtest [08:06:53]: testbed dpkg architecture: amd64 1684s autopkgtest [08:06:53]: testbed apt version: 2.7.12 1684s autopkgtest [08:06:53]: @@@@@@@@@@@@@@@@@@@@ test bed setup 1684s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 1684s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 1684s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 1685s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 1685s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 1685s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 1685s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 1685s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 1685s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 1685s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 1685s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 1685s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 1685s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 1685s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 1685s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 1685s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 1685s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 1688s Fetched 11.7 MB in 2s (7670 kB/s) 1688s Reading package lists... 1689s Reading package lists... 1690s Building dependency tree... 1690s Reading state information... 1690s Calculating upgrade... 1690s The following packages will be upgraded: 1690s psmisc 1690s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1690s Need to get 179 kB of archives. 1690s After this operation, 28.7 kB disk space will be freed. 1690s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 1691s Fetched 179 kB in 0s (4118 kB/s) 1691s (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 ... 71864 files and directories currently installed.) 1691s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 1691s Unpacking psmisc (23.7-1) over (23.6-2) ... 1691s Setting up psmisc (23.7-1) ... 1691s Processing triggers for man-db (2.12.0-3) ... 1692s Reading package lists... 1692s Building dependency tree... 1692s Reading state information... 1692s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1693s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 1693s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 1693s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 1693s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 1694s Reading package lists... 1694s Reading package lists... 1694s Building dependency tree... 1694s Reading state information... 1695s Calculating upgrade... 1695s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1695s Reading package lists... 1695s Building dependency tree... 1695s Reading state information... 1696s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 1699s Reading package lists... 1699s Building dependency tree... 1699s Reading state information... 1700s Starting pkgProblemResolver with broken count: 0 1700s Starting 2 pkgProblemResolver with broken count: 0 1700s Done 1700s The following additional packages will be installed: 1700s ant build-essential ca-certificates-java cpp cpp-13 cpp-13-x86-64-linux-gnu 1700s cpp-x86-64-linux-gnu default-jdk-headless default-jre-headless 1700s fontconfig-config fonts-dejavu-core fonts-dejavu-mono g++ g++-13 1700s g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13 1700s gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu java-common jruby junit4 1700s libasan8 libasm-java libasound2 libasound2-data libatomic1 libavahi-client3 1700s libavahi-common-data libavahi-common3 libbackport9-java libc-dev-bin 1700s libc6-dev libcc1-0 libcrypt-dev libcups2 libdirgra-java libfixposix4t64 1700s libfontconfig1 libgcc-13-dev libgmp-dev libgmpxx4ldbl libgomp1 1700s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 1700s libheadius-options-java libhwasan0 libinvokebinder-java libisl23 libitm1 1700s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 1700s libjcodings-java libjffi-java libjffi-jni libjitescript-java libjline2-java 1700s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 1700s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 1700s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 1700s liblcms2-2 liblsan0 libmpc3 libpcsclite1 libquadmath0 libruby libruby3.1 1700s libruby3.2 libsnakeyaml-engine-java libstdc++-13-dev libtsan2 libubsan1 1700s linux-libc-dev openjdk-21-jdk-headless openjdk-21-jre-headless rake 1700s rpcsvc-proto ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 1700s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 1700s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 1700s ruby3.2-dev rubygems-integration 1700s Suggested packages: 1700s ant-doc cpp-doc gcc-13-locales cpp-13-doc default-jre g++-multilib 1700s g++-13-multilib gcc-13-doc gcc-multilib manpages-dev autoconf automake 1700s libtool flex bison gdb gcc-doc gcc-13-multilib gdb-x86-64-linux-gnu 1700s libasound2-plugins alsa-utils glibc-doc cups-common gmp-doc libgmp10-doc 1700s libmpfr-dev libheadius-options-java-doc libinvokebinder-java-doc 1700s libjnr-ffi-java-doc libjnr-netdb-java-doc libjnr-posix-java-doc 1700s libjoda-convert-java liblcms2-utils pcscd libstdc++-13-doc openjdk-21-demo 1700s openjdk-21-source libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 1700s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri 1700s ruby-dev bundler 1700s Recommended packages: 1700s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf manpages 1700s manpages-dev libc-devtools zip libjs-jquery ruby3.1-doc ruby3.2-doc 1700s The following NEW packages will be installed: 1700s ant autopkgtest-satdep build-essential ca-certificates-java cpp cpp-13 1700s cpp-13-x86-64-linux-gnu cpp-x86-64-linux-gnu default-jdk-headless 1700s default-jre-headless fontconfig-config fonts-dejavu-core fonts-dejavu-mono 1700s g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13 1700s gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu java-common jruby junit4 1700s libasan8 libasm-java libasound2 libasound2-data libatomic1 libavahi-client3 1700s libavahi-common-data libavahi-common3 libbackport9-java libc-dev-bin 1700s libc6-dev libcc1-0 libcrypt-dev libcups2 libdirgra-java libfixposix4t64 1700s libfontconfig1 libgcc-13-dev libgmp-dev libgmpxx4ldbl libgomp1 1700s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 1700s libheadius-options-java libhwasan0 libinvokebinder-java libisl23 libitm1 1700s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 1700s libjcodings-java libjffi-java libjffi-jni libjitescript-java libjline2-java 1700s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 1700s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 1700s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 1700s liblcms2-2 liblsan0 libmpc3 libpcsclite1 libquadmath0 libruby libruby3.1 1700s libruby3.2 libsnakeyaml-engine-java libstdc++-13-dev libtsan2 libubsan1 1700s linux-libc-dev openjdk-21-jdk-headless openjdk-21-jre-headless rake 1700s rpcsvc-proto ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 1700s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 1700s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 1700s ruby3.2-dev rubygems-integration 1700s 0 upgraded, 109 newly installed, 0 to remove and 0 not upgraded. 1700s Need to get 253 MB/253 MB of archives. 1700s After this operation, 675 MB of additional disk space will be used. 1700s Get:1 /tmp/autopkgtest.mg4W0U/4-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [816 B] 1700s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 1700s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 1700s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 1700s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 1700s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 1700s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 1700s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 1700s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 1700s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 1700s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 1700s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 1700s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 1700s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 1700s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 1700s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 1700s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 1700s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 1700s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 1700s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 1701s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 1701s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 ant all 1.10.14-1 [2147 kB] 1701s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 libc-dev-bin amd64 2.39-0ubuntu6 [20.4 kB] 1701s Get:24 http://ftpmaster.internal/ubuntu noble/main amd64 linux-libc-dev amd64 6.8.0-11.11 [1595 kB] 1701s Get:25 http://ftpmaster.internal/ubuntu noble/main amd64 libcrypt-dev amd64 1:4.4.36-4 [128 kB] 1701s Get:26 http://ftpmaster.internal/ubuntu noble/main amd64 rpcsvc-proto amd64 1.4.2-0ubuntu6 [68.5 kB] 1701s Get:27 http://ftpmaster.internal/ubuntu noble/main amd64 libc6-dev amd64 2.39-0ubuntu6 [2126 kB] 1701s Get:28 http://ftpmaster.internal/ubuntu noble/main amd64 libisl23 amd64 0.26-3 [741 kB] 1701s Get:29 http://ftpmaster.internal/ubuntu noble/main amd64 libmpc3 amd64 1.3.1-1 [54.1 kB] 1701s Get:30 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [11.2 MB] 1701s Get:31 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-13 amd64 13.2.0-17ubuntu2 [1030 B] 1701s Get:32 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B] 1701s Get:33 http://ftpmaster.internal/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB] 1701s Get:34 http://ftpmaster.internal/ubuntu noble/main amd64 libcc1-0 amd64 14-20240303-1ubuntu1 [47.7 kB] 1701s Get:35 http://ftpmaster.internal/ubuntu noble/main amd64 libgomp1 amd64 14-20240303-1ubuntu1 [147 kB] 1701s Get:36 http://ftpmaster.internal/ubuntu noble/main amd64 libitm1 amd64 14-20240303-1ubuntu1 [29.1 kB] 1701s Get:37 http://ftpmaster.internal/ubuntu noble/main amd64 libatomic1 amd64 14-20240303-1ubuntu1 [10.4 kB] 1701s Get:38 http://ftpmaster.internal/ubuntu noble/main amd64 libasan8 amd64 14-20240303-1ubuntu1 [3026 kB] 1701s Get:39 http://ftpmaster.internal/ubuntu noble/main amd64 liblsan0 amd64 14-20240303-1ubuntu1 [1310 kB] 1701s Get:40 http://ftpmaster.internal/ubuntu noble/main amd64 libtsan2 amd64 14-20240303-1ubuntu1 [2732 kB] 1701s Get:41 http://ftpmaster.internal/ubuntu noble/main amd64 libubsan1 amd64 14-20240303-1ubuntu1 [1172 kB] 1701s Get:42 http://ftpmaster.internal/ubuntu noble/main amd64 libhwasan0 amd64 14-20240303-1ubuntu1 [1629 kB] 1701s Get:43 http://ftpmaster.internal/ubuntu noble/main amd64 libquadmath0 amd64 14-20240303-1ubuntu1 [155 kB] 1701s Get:44 http://ftpmaster.internal/ubuntu noble/main amd64 libgcc-13-dev amd64 13.2.0-17ubuntu2 [2687 kB] 1701s Get:45 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [21.9 MB] 1701s Get:46 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-13 amd64 13.2.0-17ubuntu2 [477 kB] 1701s Get:47 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B] 1701s Get:48 http://ftpmaster.internal/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B] 1701s Get:49 http://ftpmaster.internal/ubuntu noble/main amd64 libstdc++-13-dev amd64 13.2.0-17ubuntu2 [2340 kB] 1701s Get:50 http://ftpmaster.internal/ubuntu noble/main amd64 g++-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [12.5 MB] 1701s Get:51 http://ftpmaster.internal/ubuntu noble/main amd64 g++-13 amd64 13.2.0-17ubuntu2 [14.5 kB] 1701s Get:52 http://ftpmaster.internal/ubuntu noble/main amd64 g++-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [964 B] 1701s Get:53 http://ftpmaster.internal/ubuntu noble/main amd64 g++ amd64 4:13.2.0-7ubuntu1 [1100 B] 1701s Get:54 http://ftpmaster.internal/ubuntu noble/main amd64 build-essential amd64 12.10ubuntu1 [4928 B] 1701s Get:55 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jdk-headless amd64 21.0.2+13-2 [82.5 MB] 1702s Get:56 http://ftpmaster.internal/ubuntu noble/main amd64 default-jdk-headless amd64 2:1.21-75+exp1 [960 B] 1702s Get:57 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 1702s Get:58 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 1702s Get:59 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 1702s Get:60 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 1702s Get:61 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 1702s Get:62 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 1702s Get:63 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 1702s Get:64 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 1702s Get:65 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 1702s Get:66 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 1702s Get:67 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 1702s Get:68 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 1702s Get:69 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 1702s Get:70 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 1702s Get:71 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 1702s Get:72 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 1702s Get:73 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 1702s Get:74 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 1702s Get:75 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 1702s Get:76 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 1702s Get:77 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 1702s Get:78 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 1702s Get:79 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 1702s Get:80 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 1702s Get:81 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 1702s Get:82 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 1702s Get:83 http://ftpmaster.internal/ubuntu noble/universe amd64 libhamcrest-java all 2.2-2 [117 kB] 1702s Get:84 http://ftpmaster.internal/ubuntu noble/universe amd64 junit4 all 4.13.2-4 [347 kB] 1702s Get:85 http://ftpmaster.internal/ubuntu noble/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2ubuntu4 [9956 B] 1702s Get:86 http://ftpmaster.internal/ubuntu noble/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2ubuntu4 [342 kB] 1702s Get:87 http://ftpmaster.internal/ubuntu noble/universe amd64 libjakarta-annotation-api-java all 2.1.1-1 [30.1 kB] 1702s Get:88 http://ftpmaster.internal/ubuntu noble/main amd64 rubygems-integration all 1.18 [5336 B] 1702s Get:89 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1 amd64 3.1.2-7ubuntu4 [48.9 kB] 1702s Get:90 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-rubygems all 3.4.20-1 [238 kB] 1702s Get:91 http://ftpmaster.internal/ubuntu noble/main amd64 ruby amd64 1:3.1+1 [3466 B] 1702s Get:92 http://ftpmaster.internal/ubuntu noble/main amd64 rake all 13.0.6-3 [61.6 kB] 1702s Get:93 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 1702s Get:94 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-webrick all 1.8.1-1 [52.3 kB] 1702s Get:95 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 1702s Get:96 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.2 amd64 3.2.3-1 [5339 kB] 1702s Get:97 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-sdbm amd64 1.0.0-5build3 [18.6 kB] 1702s Get:98 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.1 amd64 3.1.2-7ubuntu4 [5164 kB] 1703s Get:99 http://ftpmaster.internal/ubuntu noble/main amd64 libruby amd64 1:3.1+1 [4640 B] 1703s Get:100 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1-dev amd64 3.1.2-7ubuntu4 [394 kB] 1703s Get:101 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2 amd64 3.2.3-1 [50.7 kB] 1703s Get:102 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2-dev amd64 3.2.3-1 [399 kB] 1703s Get:103 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-all-dev amd64 1:3.1+1 [5732 B] 1703s Get:104 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 1703s Get:105 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 1703s Get:106 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 1703s Get:107 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 1703s Get:108 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 1703s Get:109 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 1703s Fetched 253 MB in 3s (99.2 MB/s) 1703s Selecting previously unselected package ca-certificates-java. 1703s (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 ... 71861 files and directories currently installed.) 1703s Preparing to unpack .../000-ca-certificates-java_20240118_all.deb ... 1703s Unpacking ca-certificates-java (20240118) ... 1703s Selecting previously unselected package java-common. 1703s Preparing to unpack .../001-java-common_0.75+exp1_all.deb ... 1703s Unpacking java-common (0.75+exp1) ... 1703s Selecting previously unselected package libavahi-common-data:amd64. 1703s Preparing to unpack .../002-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 1703s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 1703s Selecting previously unselected package libavahi-common3:amd64. 1703s Preparing to unpack .../003-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 1703s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 1703s Selecting previously unselected package libavahi-client3:amd64. 1703s Preparing to unpack .../004-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 1703s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 1703s Selecting previously unselected package libcups2:amd64. 1703s Preparing to unpack .../005-libcups2_2.4.6-0ubuntu3_amd64.deb ... 1703s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 1703s Selecting previously unselected package liblcms2-2:amd64. 1703s Preparing to unpack .../006-liblcms2-2_2.14-2_amd64.deb ... 1703s Unpacking liblcms2-2:amd64 (2.14-2) ... 1703s Selecting previously unselected package libjpeg-turbo8:amd64. 1703s Preparing to unpack .../007-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 1703s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 1703s Selecting previously unselected package libjpeg8:amd64. 1703s Preparing to unpack .../008-libjpeg8_8c-2ubuntu11_amd64.deb ... 1703s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 1703s Selecting previously unselected package fonts-dejavu-mono. 1703s Preparing to unpack .../009-fonts-dejavu-mono_2.37-8_all.deb ... 1703s Unpacking fonts-dejavu-mono (2.37-8) ... 1703s Selecting previously unselected package fonts-dejavu-core. 1703s Preparing to unpack .../010-fonts-dejavu-core_2.37-8_all.deb ... 1703s Unpacking fonts-dejavu-core (2.37-8) ... 1704s Selecting previously unselected package fontconfig-config. 1704s Preparing to unpack .../011-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 1704s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 1704s Selecting previously unselected package libfontconfig1:amd64. 1704s Preparing to unpack .../012-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 1704s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 1704s Selecting previously unselected package libasound2-data. 1704s Preparing to unpack .../013-libasound2-data_1.2.10-3build1_all.deb ... 1704s Unpacking libasound2-data (1.2.10-3build1) ... 1704s Selecting previously unselected package libasound2:amd64. 1704s Preparing to unpack .../014-libasound2_1.2.10-3build1_amd64.deb ... 1704s Unpacking libasound2:amd64 (1.2.10-3build1) ... 1704s Selecting previously unselected package libgraphite2-3:amd64. 1704s Preparing to unpack .../015-libgraphite2-3_1.3.14-2_amd64.deb ... 1704s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 1704s Selecting previously unselected package libharfbuzz0b:amd64. 1704s Preparing to unpack .../016-libharfbuzz0b_8.3.0-2_amd64.deb ... 1704s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 1704s Selecting previously unselected package libpcsclite1:amd64. 1704s Preparing to unpack .../017-libpcsclite1_2.0.0-1_amd64.deb ... 1704s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 1704s Selecting previously unselected package openjdk-21-jre-headless:amd64. 1704s Preparing to unpack .../018-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 1704s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 1705s Selecting previously unselected package default-jre-headless. 1705s Preparing to unpack .../019-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 1705s Unpacking default-jre-headless (2:1.21-75+exp1) ... 1705s Selecting previously unselected package ant. 1705s Preparing to unpack .../020-ant_1.10.14-1_all.deb ... 1705s Unpacking ant (1.10.14-1) ... 1705s Selecting previously unselected package libc-dev-bin. 1705s Preparing to unpack .../021-libc-dev-bin_2.39-0ubuntu6_amd64.deb ... 1705s Unpacking libc-dev-bin (2.39-0ubuntu6) ... 1705s Selecting previously unselected package linux-libc-dev:amd64. 1705s Preparing to unpack .../022-linux-libc-dev_6.8.0-11.11_amd64.deb ... 1705s Unpacking linux-libc-dev:amd64 (6.8.0-11.11) ... 1705s Selecting previously unselected package libcrypt-dev:amd64. 1705s Preparing to unpack .../023-libcrypt-dev_1%3a4.4.36-4_amd64.deb ... 1705s Unpacking libcrypt-dev:amd64 (1:4.4.36-4) ... 1705s Selecting previously unselected package rpcsvc-proto. 1705s Preparing to unpack .../024-rpcsvc-proto_1.4.2-0ubuntu6_amd64.deb ... 1705s Unpacking rpcsvc-proto (1.4.2-0ubuntu6) ... 1705s Selecting previously unselected package libc6-dev:amd64. 1705s Preparing to unpack .../025-libc6-dev_2.39-0ubuntu6_amd64.deb ... 1705s Unpacking libc6-dev:amd64 (2.39-0ubuntu6) ... 1705s Selecting previously unselected package libisl23:amd64. 1705s Preparing to unpack .../026-libisl23_0.26-3_amd64.deb ... 1705s Unpacking libisl23:amd64 (0.26-3) ... 1705s Selecting previously unselected package libmpc3:amd64. 1705s Preparing to unpack .../027-libmpc3_1.3.1-1_amd64.deb ... 1705s Unpacking libmpc3:amd64 (1.3.1-1) ... 1705s Selecting previously unselected package cpp-13-x86-64-linux-gnu. 1705s Preparing to unpack .../028-cpp-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 1705s Unpacking cpp-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1706s Selecting previously unselected package cpp-13. 1706s Preparing to unpack .../029-cpp-13_13.2.0-17ubuntu2_amd64.deb ... 1706s Unpacking cpp-13 (13.2.0-17ubuntu2) ... 1706s Selecting previously unselected package cpp-x86-64-linux-gnu. 1706s Preparing to unpack .../030-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 1706s Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1706s Selecting previously unselected package cpp. 1706s Preparing to unpack .../031-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ... 1706s Unpacking cpp (4:13.2.0-7ubuntu1) ... 1706s Selecting previously unselected package libcc1-0:amd64. 1706s Preparing to unpack .../032-libcc1-0_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libcc1-0:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libgomp1:amd64. 1706s Preparing to unpack .../033-libgomp1_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libgomp1:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libitm1:amd64. 1706s Preparing to unpack .../034-libitm1_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libitm1:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libatomic1:amd64. 1706s Preparing to unpack .../035-libatomic1_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libatomic1:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libasan8:amd64. 1706s Preparing to unpack .../036-libasan8_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libasan8:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package liblsan0:amd64. 1706s Preparing to unpack .../037-liblsan0_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking liblsan0:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libtsan2:amd64. 1706s Preparing to unpack .../038-libtsan2_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libtsan2:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libubsan1:amd64. 1706s Preparing to unpack .../039-libubsan1_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libubsan1:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libhwasan0:amd64. 1706s Preparing to unpack .../040-libhwasan0_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libhwasan0:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libquadmath0:amd64. 1706s Preparing to unpack .../041-libquadmath0_14-20240303-1ubuntu1_amd64.deb ... 1706s Unpacking libquadmath0:amd64 (14-20240303-1ubuntu1) ... 1706s Selecting previously unselected package libgcc-13-dev:amd64. 1706s Preparing to unpack .../042-libgcc-13-dev_13.2.0-17ubuntu2_amd64.deb ... 1706s Unpacking libgcc-13-dev:amd64 (13.2.0-17ubuntu2) ... 1706s Selecting previously unselected package gcc-13-x86-64-linux-gnu. 1706s Preparing to unpack .../043-gcc-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 1706s Unpacking gcc-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1707s Selecting previously unselected package gcc-13. 1707s Preparing to unpack .../044-gcc-13_13.2.0-17ubuntu2_amd64.deb ... 1707s Unpacking gcc-13 (13.2.0-17ubuntu2) ... 1707s Selecting previously unselected package gcc-x86-64-linux-gnu. 1707s Preparing to unpack .../045-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 1707s Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1707s Selecting previously unselected package gcc. 1707s Preparing to unpack .../046-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ... 1707s Unpacking gcc (4:13.2.0-7ubuntu1) ... 1707s Selecting previously unselected package libstdc++-13-dev:amd64. 1707s Preparing to unpack .../047-libstdc++-13-dev_13.2.0-17ubuntu2_amd64.deb ... 1707s Unpacking libstdc++-13-dev:amd64 (13.2.0-17ubuntu2) ... 1707s Selecting previously unselected package g++-13-x86-64-linux-gnu. 1707s Preparing to unpack .../048-g++-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 1707s Unpacking g++-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1707s Selecting previously unselected package g++-13. 1707s Preparing to unpack .../049-g++-13_13.2.0-17ubuntu2_amd64.deb ... 1707s Unpacking g++-13 (13.2.0-17ubuntu2) ... 1707s Selecting previously unselected package g++-x86-64-linux-gnu. 1707s Preparing to unpack .../050-g++-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 1707s Unpacking g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1707s Selecting previously unselected package g++. 1707s Preparing to unpack .../051-g++_4%3a13.2.0-7ubuntu1_amd64.deb ... 1707s Unpacking g++ (4:13.2.0-7ubuntu1) ... 1707s Selecting previously unselected package build-essential. 1707s Preparing to unpack .../052-build-essential_12.10ubuntu1_amd64.deb ... 1707s Unpacking build-essential (12.10ubuntu1) ... 1707s Selecting previously unselected package openjdk-21-jdk-headless:amd64. 1707s Preparing to unpack .../053-openjdk-21-jdk-headless_21.0.2+13-2_amd64.deb ... 1707s Unpacking openjdk-21-jdk-headless:amd64 (21.0.2+13-2) ... 1708s Selecting previously unselected package default-jdk-headless. 1708s Preparing to unpack .../054-default-jdk-headless_2%3a1.21-75+exp1_amd64.deb ... 1708s Unpacking default-jdk-headless (2:1.21-75+exp1) ... 1708s Selecting previously unselected package libasm-java. 1708s Preparing to unpack .../055-libasm-java_9.6~us1-0ubuntu1_all.deb ... 1708s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 1708s Selecting previously unselected package libbackport9-java. 1708s Preparing to unpack .../056-libbackport9-java_1.10-2_all.deb ... 1708s Unpacking libbackport9-java (1.10-2) ... 1708s Selecting previously unselected package libdirgra-java. 1708s Preparing to unpack .../057-libdirgra-java_0.4-2_all.deb ... 1708s Unpacking libdirgra-java (0.4-2) ... 1708s Selecting previously unselected package libfixposix4t64:amd64. 1708s Preparing to unpack .../058-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 1708s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 1708s Selecting previously unselected package libheadius-options-java. 1708s Preparing to unpack .../059-libheadius-options-java_1.7-1_all.deb ... 1708s Unpacking libheadius-options-java (1.7-1) ... 1708s Selecting previously unselected package libinvokebinder-java. 1708s Preparing to unpack .../060-libinvokebinder-java_1.13-1_all.deb ... 1708s Unpacking libinvokebinder-java (1.13-1) ... 1708s Selecting previously unselected package libhawtjni-runtime-java. 1708s Preparing to unpack .../061-libhawtjni-runtime-java_1.18-1_all.deb ... 1708s Unpacking libhawtjni-runtime-java (1.18-1) ... 1708s Selecting previously unselected package libjansi-native-java. 1708s Preparing to unpack .../062-libjansi-native-java_1.8-2_all.deb ... 1708s Unpacking libjansi-native-java (1.8-2) ... 1708s Selecting previously unselected package libjansi1-java. 1708s Preparing to unpack .../063-libjansi1-java_1.18-3ubuntu1_all.deb ... 1708s Unpacking libjansi1-java (1.18-3ubuntu1) ... 1708s Selecting previously unselected package libjcodings-java. 1708s Preparing to unpack .../064-libjcodings-java_1.0.58-1_all.deb ... 1708s Unpacking libjcodings-java (1.0.58-1) ... 1708s Selecting previously unselected package libjffi-jni:amd64. 1708s Preparing to unpack .../065-libjffi-jni_1.3.13+ds-1_amd64.deb ... 1708s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 1708s Selecting previously unselected package libjffi-java. 1708s Preparing to unpack .../066-libjffi-java_1.3.13+ds-1_all.deb ... 1708s Unpacking libjffi-java (1.3.13+ds-1) ... 1708s Selecting previously unselected package libjitescript-java. 1708s Preparing to unpack .../067-libjitescript-java_0.4.3-1_all.deb ... 1708s Unpacking libjitescript-java (0.4.3-1) ... 1708s Selecting previously unselected package libjline2-java. 1708s Preparing to unpack .../068-libjline2-java_2.14.6-5_all.deb ... 1708s Unpacking libjline2-java (2.14.6-5) ... 1708s Selecting previously unselected package libjnr-constants-java. 1708s Preparing to unpack .../069-libjnr-constants-java_0.10.4-2_all.deb ... 1708s Unpacking libjnr-constants-java (0.10.4-2) ... 1708s Selecting previously unselected package libjnr-x86asm-java. 1708s Preparing to unpack .../070-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 1708s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 1708s Selecting previously unselected package libjnr-ffi-java. 1708s Preparing to unpack .../071-libjnr-ffi-java_2.2.15-2_all.deb ... 1708s Unpacking libjnr-ffi-java (2.2.15-2) ... 1708s Selecting previously unselected package libjnr-enxio-java. 1708s Preparing to unpack .../072-libjnr-enxio-java_0.32.16-1_all.deb ... 1708s Unpacking libjnr-enxio-java (0.32.16-1) ... 1708s Selecting previously unselected package libjnr-netdb-java. 1708s Preparing to unpack .../073-libjnr-netdb-java_1.1.6-1.1_all.deb ... 1708s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 1708s Selecting previously unselected package libjnr-posix-java. 1708s Preparing to unpack .../074-libjnr-posix-java_3.1.18-1_all.deb ... 1708s Unpacking libjnr-posix-java (3.1.18-1) ... 1708s Selecting previously unselected package libjnr-unixsocket-java. 1708s Preparing to unpack .../075-libjnr-unixsocket-java_0.38.21-2_all.deb ... 1708s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 1708s Selecting previously unselected package libjoda-time-java. 1708s Preparing to unpack .../076-libjoda-time-java_2.10.14-1_all.deb ... 1708s Unpacking libjoda-time-java (2.10.14-1) ... 1708s Selecting previously unselected package libjruby-joni-java. 1708s Preparing to unpack .../077-libjruby-joni-java_2.2.1-1_all.deb ... 1708s Unpacking libjruby-joni-java (2.2.1-1) ... 1708s Selecting previously unselected package libjzlib-java. 1708s Preparing to unpack .../078-libjzlib-java_1.1.3-3_all.deb ... 1708s Unpacking libjzlib-java (1.1.3-3) ... 1708s Selecting previously unselected package libsnakeyaml-engine-java. 1708s Preparing to unpack .../079-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 1708s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 1708s Selecting previously unselected package jruby. 1708s Preparing to unpack .../080-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 1708s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 1709s Selecting previously unselected package libhamcrest-java. 1709s Preparing to unpack .../081-libhamcrest-java_2.2-2_all.deb ... 1709s Unpacking libhamcrest-java (2.2-2) ... 1709s Selecting previously unselected package junit4. 1709s Preparing to unpack .../082-junit4_4.13.2-4_all.deb ... 1709s Unpacking junit4 (4.13.2-4) ... 1709s Selecting previously unselected package libgmpxx4ldbl:amd64. 1709s Preparing to unpack .../083-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 1709s Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 1709s Selecting previously unselected package libgmp-dev:amd64. 1709s Preparing to unpack .../084-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 1709s Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 1709s Selecting previously unselected package libjakarta-annotation-api-java. 1709s Preparing to unpack .../085-libjakarta-annotation-api-java_2.1.1-1_all.deb ... 1709s Unpacking libjakarta-annotation-api-java (2.1.1-1) ... 1709s Selecting previously unselected package rubygems-integration. 1709s Preparing to unpack .../086-rubygems-integration_1.18_all.deb ... 1709s Unpacking rubygems-integration (1.18) ... 1709s Selecting previously unselected package ruby3.1. 1709s Preparing to unpack .../087-ruby3.1_3.1.2-7ubuntu4_amd64.deb ... 1709s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 1709s Selecting previously unselected package ruby-rubygems. 1709s Preparing to unpack .../088-ruby-rubygems_3.4.20-1_all.deb ... 1709s Unpacking ruby-rubygems (3.4.20-1) ... 1709s Selecting previously unselected package ruby. 1709s Preparing to unpack .../089-ruby_1%3a3.1+1_amd64.deb ... 1709s Unpacking ruby (1:3.1+1) ... 1709s Selecting previously unselected package rake. 1709s Preparing to unpack .../090-rake_13.0.6-3_all.deb ... 1709s Unpacking rake (13.0.6-3) ... 1709s Selecting previously unselected package ruby-net-telnet. 1709s Preparing to unpack .../091-ruby-net-telnet_0.2.0-1_all.deb ... 1709s Unpacking ruby-net-telnet (0.2.0-1) ... 1709s Selecting previously unselected package ruby-webrick. 1709s Preparing to unpack .../092-ruby-webrick_1.8.1-1_all.deb ... 1709s Unpacking ruby-webrick (1.8.1-1) ... 1709s Selecting previously unselected package ruby-xmlrpc. 1709s Preparing to unpack .../093-ruby-xmlrpc_0.3.2-2_all.deb ... 1709s Unpacking ruby-xmlrpc (0.3.2-2) ... 1709s Selecting previously unselected package libruby3.2:amd64. 1709s Preparing to unpack .../094-libruby3.2_3.2.3-1_amd64.deb ... 1709s Unpacking libruby3.2:amd64 (3.2.3-1) ... 1710s Selecting previously unselected package ruby-sdbm:amd64. 1710s Preparing to unpack .../095-ruby-sdbm_1.0.0-5build3_amd64.deb ... 1710s Unpacking ruby-sdbm:amd64 (1.0.0-5build3) ... 1710s Selecting previously unselected package libruby3.1:amd64. 1710s Preparing to unpack .../096-libruby3.1_3.1.2-7ubuntu4_amd64.deb ... 1710s Unpacking libruby3.1:amd64 (3.1.2-7ubuntu4) ... 1710s Selecting previously unselected package libruby:amd64. 1710s Preparing to unpack .../097-libruby_1%3a3.1+1_amd64.deb ... 1710s Unpacking libruby:amd64 (1:3.1+1) ... 1710s Selecting previously unselected package ruby3.1-dev:amd64. 1710s Preparing to unpack .../098-ruby3.1-dev_3.1.2-7ubuntu4_amd64.deb ... 1710s Unpacking ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 1710s Selecting previously unselected package ruby3.2. 1710s Preparing to unpack .../099-ruby3.2_3.2.3-1_amd64.deb ... 1710s Unpacking ruby3.2 (3.2.3-1) ... 1710s Selecting previously unselected package ruby3.2-dev:amd64. 1710s Preparing to unpack .../100-ruby3.2-dev_3.2.3-1_amd64.deb ... 1710s Unpacking ruby3.2-dev:amd64 (3.2.3-1) ... 1710s Selecting previously unselected package ruby-all-dev:amd64. 1710s Preparing to unpack .../101-ruby-all-dev_1%3a3.1+1_amd64.deb ... 1710s Unpacking ruby-all-dev:amd64 (1:3.1+1) ... 1710s Selecting previously unselected package ruby-diff-lcs. 1710s Preparing to unpack .../102-ruby-diff-lcs_1.5.1-1_all.deb ... 1710s Unpacking ruby-diff-lcs (1.5.1-1) ... 1710s Selecting previously unselected package ruby-rspec-support. 1710s Preparing to unpack .../103-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 1710s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 1710s Selecting previously unselected package ruby-rspec-core. 1710s Preparing to unpack .../104-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 1710s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 1710s Selecting previously unselected package ruby-rspec-expectations. 1710s Preparing to unpack .../105-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 1710s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 1710s Selecting previously unselected package ruby-rspec-mocks. 1710s Preparing to unpack .../106-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 1710s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 1710s Selecting previously unselected package ruby-rspec. 1710s Preparing to unpack .../107-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 1710s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 1710s Selecting previously unselected package autopkgtest-satdep. 1710s Preparing to unpack .../108-4-autopkgtest-satdep.deb ... 1710s Unpacking autopkgtest-satdep (0) ... 1710s Setting up libjakarta-annotation-api-java (2.1.1-1) ... 1710s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 1710s Setting up liblcms2-2:amd64 (2.14-2) ... 1710s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 1710s Setting up java-common (0.75+exp1) ... 1710s Setting up libasm-java (9.6~us1-0ubuntu1) ... 1710s Setting up linux-libc-dev:amd64 (6.8.0-11.11) ... 1710s Setting up rubygems-integration (1.18) ... 1710s Setting up libheadius-options-java (1.7-1) ... 1710s Setting up libgomp1:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 1710s Setting up libjzlib-java (1.1.3-3) ... 1710s Setting up libbackport9-java (1.10-2) ... 1710s Setting up libasound2-data (1.2.10-3build1) ... 1710s Setting up libjitescript-java (0.4.3-1) ... 1710s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 1710s Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 1710s Setting up rpcsvc-proto (1.4.2-0ubuntu6) ... 1710s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 1710s Setting up ruby-net-telnet (0.2.0-1) ... 1710s Setting up libquadmath0:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up fonts-dejavu-mono (2.37-8) ... 1710s Setting up libmpc3:amd64 (1.3.1-1) ... 1710s Setting up libatomic1:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up fonts-dejavu-core (2.37-8) ... 1710s Setting up libpcsclite1:amd64 (2.0.0-1) ... 1710s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 1710s Setting up libhamcrest-java (2.2-2) ... 1710s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 1710s Setting up libjoda-time-java (2.10.14-1) ... 1710s Setting up libjcodings-java (1.0.58-1) ... 1710s Setting up ruby-webrick (1.8.1-1) ... 1710s Setting up libubsan1:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libhwasan0:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libcrypt-dev:amd64 (1:4.4.36-4) ... 1710s Setting up libasan8:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libasound2:amd64 (1.2.10-3build1) ... 1710s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 1710s Setting up libinvokebinder-java (1.13-1) ... 1710s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 1710s Setting up libtsan2:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up ca-certificates-java (20240118) ... 1710s No JRE found. Skipping Java certificates setup. 1710s Setting up libisl23:amd64 (0.26-3) ... 1710s Setting up libc-dev-bin (2.39-0ubuntu6) ... 1710s Setting up ruby-xmlrpc (0.3.2-2) ... 1710s Setting up libhawtjni-runtime-java (1.18-1) ... 1710s Setting up libdirgra-java (0.4-2) ... 1710s Setting up libcc1-0:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up liblsan0:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libitm1:amd64 (14-20240303-1ubuntu1) ... 1710s Setting up libjnr-constants-java (0.10.4-2) ... 1710s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 1710s Setting up libjffi-java (1.3.13+ds-1) ... 1710s Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 1710s Setting up libjruby-joni-java (2.2.1-1) ... 1710s Setting up cpp-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1710s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 1711s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 1711s Setting up libjansi-native-java (1.8-2) ... 1711s Setting up libgcc-13-dev:amd64 (13.2.0-17ubuntu2) ... 1711s Setting up libjansi1-java (1.18-3ubuntu1) ... 1711s Setting up libc6-dev:amd64 (2.39-0ubuntu6) ... 1711s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 1711s Setting up libjline2-java (2.14.6-5) ... 1711s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 1711s Setting up libstdc++-13-dev:amd64 (13.2.0-17ubuntu2) ... 1711s Setting up libjnr-ffi-java (2.2.15-2) ... 1711s Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1711s Setting up cpp-13 (13.2.0-17ubuntu2) ... 1711s Setting up gcc-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1711s Setting up libjnr-enxio-java (0.32.16-1) ... 1711s Setting up gcc-13 (13.2.0-17ubuntu2) ... 1711s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 1711s Setting up libjnr-netdb-java (1.1.6-1.1) ... 1711s Setting up cpp (4:13.2.0-7ubuntu1) ... 1711s Setting up libjnr-posix-java (3.1.18-1) ... 1711s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 1711s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 1711s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 1711s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 1711s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 1711s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 1711s Setting up g++-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 1711s Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1711s Setting up gcc (4:13.2.0-7ubuntu1) ... 1711s Setting up g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 1711s Setting up libjnr-unixsocket-java (0.38.21-2) ... 1711s Setting up g++-13 (13.2.0-17ubuntu2) ... 1711s Setting up g++ (4:13.2.0-7ubuntu1) ... 1711s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 1711s Setting up build-essential (12.10ubuntu1) ... 1711s Setting up libruby3.1:amd64 (3.1.2-7ubuntu4) ... 1711s Setting up libruby:amd64 (1:3.1+1) ... 1711s Setting up ruby-rubygems (3.4.20-1) ... 1711s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 1711s Setting up ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 1711s Setting up ruby-sdbm:amd64 (1.0.0-5build3) ... 1711s Setting up ruby (1:3.1+1) ... 1711s Setting up rake (13.0.6-3) ... 1711s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 1711s Setting up ruby-diff-lcs (1.5.1-1) ... 1711s Setting up libruby3.2:amd64 (3.2.3-1) ... 1711s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 1711s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 1711s Setting up ruby3.2 (3.2.3-1) ... 1711s Setting up ruby3.2-dev:amd64 (3.2.3-1) ... 1711s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 1711s Setting up ruby-all-dev:amd64 (1:3.1+1) ... 1711s Processing triggers for libc-bin (2.39-0ubuntu6) ... 1711s Processing triggers for man-db (2.12.0-3) ... 1712s Processing triggers for ca-certificates-java (20240118) ... 1712s Adding debian:ACCVRAIZ1.pem 1712s Adding debian:AC_RAIZ_FNMT-RCM.pem 1712s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 1712s Adding debian:ANF_Secure_Server_Root_CA.pem 1712s Adding debian:Actalis_Authentication_Root_CA.pem 1712s Adding debian:AffirmTrust_Commercial.pem 1712s Adding debian:AffirmTrust_Networking.pem 1712s Adding debian:AffirmTrust_Premium.pem 1712s Adding debian:AffirmTrust_Premium_ECC.pem 1712s Adding debian:Amazon_Root_CA_1.pem 1712s Adding debian:Amazon_Root_CA_2.pem 1712s Adding debian:Amazon_Root_CA_3.pem 1712s Adding debian:Amazon_Root_CA_4.pem 1712s Adding debian:Atos_TrustedRoot_2011.pem 1712s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 1712s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 1712s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 1712s Adding debian:BJCA_Global_Root_CA1.pem 1712s Adding debian:BJCA_Global_Root_CA2.pem 1712s Adding debian:Baltimore_CyberTrust_Root.pem 1712s Adding debian:Buypass_Class_2_Root_CA.pem 1712s Adding debian:Buypass_Class_3_Root_CA.pem 1712s Adding debian:CA_Disig_Root_R2.pem 1712s Adding debian:CFCA_EV_ROOT.pem 1712s Adding debian:COMODO_Certification_Authority.pem 1712s Adding debian:COMODO_ECC_Certification_Authority.pem 1712s Adding debian:COMODO_RSA_Certification_Authority.pem 1712s Adding debian:Certainly_Root_E1.pem 1712s Adding debian:Certainly_Root_R1.pem 1712s Adding debian:Certigna.pem 1712s Adding debian:Certigna_Root_CA.pem 1712s Adding debian:Certum_EC-384_CA.pem 1712s Adding debian:Certum_Trusted_Network_CA.pem 1712s Adding debian:Certum_Trusted_Network_CA_2.pem 1712s Adding debian:Certum_Trusted_Root_CA.pem 1712s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 1712s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 1712s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 1712s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 1712s Adding debian:Comodo_AAA_Services_root.pem 1712s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 1712s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 1712s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 1712s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 1712s Adding debian:DigiCert_Assured_ID_Root_CA.pem 1712s Adding debian:DigiCert_Assured_ID_Root_G2.pem 1712s Adding debian:DigiCert_Assured_ID_Root_G3.pem 1712s Adding debian:DigiCert_Global_Root_CA.pem 1712s Adding debian:DigiCert_Global_Root_G2.pem 1712s Adding debian:DigiCert_Global_Root_G3.pem 1712s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 1712s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 1712s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 1712s Adding debian:DigiCert_Trusted_Root_G4.pem 1712s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 1712s Adding debian:Entrust_Root_Certification_Authority.pem 1712s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 1712s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 1712s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 1712s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 1712s Adding debian:GLOBALTRUST_2020.pem 1712s Adding debian:GTS_Root_R1.pem 1712s Adding debian:GTS_Root_R2.pem 1712s Adding debian:GTS_Root_R3.pem 1712s Adding debian:GTS_Root_R4.pem 1712s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 1712s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 1712s Adding debian:GlobalSign_Root_CA.pem 1712s Adding debian:GlobalSign_Root_CA_-_R3.pem 1712s Adding debian:GlobalSign_Root_CA_-_R6.pem 1712s Adding debian:GlobalSign_Root_E46.pem 1712s Adding debian:GlobalSign_Root_R46.pem 1712s Adding debian:Go_Daddy_Class_2_CA.pem 1712s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 1712s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 1712s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 1712s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 1712s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 1712s Adding debian:HiPKI_Root_CA_-_G1.pem 1712s Adding debian:Hongkong_Post_Root_CA_3.pem 1712s Adding debian:ISRG_Root_X1.pem 1712s Adding debian:ISRG_Root_X2.pem 1712s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 1712s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 1712s Adding debian:Izenpe.com.pem 1712s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 1712s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 1712s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 1712s Adding debian:NAVER_Global_Root_Certification_Authority.pem 1712s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 1712s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 1712s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 1712s Adding debian:QuoVadis_Root_CA_1_G3.pem 1712s Adding debian:QuoVadis_Root_CA_2.pem 1712s Adding debian:QuoVadis_Root_CA_2_G3.pem 1712s Adding debian:QuoVadis_Root_CA_3.pem 1712s Adding debian:QuoVadis_Root_CA_3_G3.pem 1712s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 1712s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 1712s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 1712s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 1712s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 1712s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 1712s Adding debian:SZAFIR_ROOT_CA2.pem 1712s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 1712s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 1712s Adding debian:SecureSign_RootCA11.pem 1712s Adding debian:SecureTrust_CA.pem 1712s Adding debian:Secure_Global_CA.pem 1712s Adding debian:Security_Communication_ECC_RootCA1.pem 1712s Adding debian:Security_Communication_RootCA2.pem 1712s Adding debian:Security_Communication_RootCA3.pem 1712s Adding debian:Security_Communication_Root_CA.pem 1712s Adding debian:Starfield_Class_2_CA.pem 1712s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 1712s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 1712s Adding debian:SwissSign_Gold_CA_-_G2.pem 1712s Adding debian:SwissSign_Silver_CA_-_G2.pem 1712s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 1712s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 1712s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 1712s Adding debian:TWCA_Global_Root_CA.pem 1712s Adding debian:TWCA_Root_Certification_Authority.pem 1712s Adding debian:TeliaSonera_Root_CA_v1.pem 1712s Adding debian:Telia_Root_CA_v2.pem 1712s Adding debian:TrustAsia_Global_Root_CA_G3.pem 1712s Adding debian:TrustAsia_Global_Root_CA_G4.pem 1712s Adding debian:Trustwave_Global_Certification_Authority.pem 1712s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 1712s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 1712s Adding debian:TunTrust_Root_CA.pem 1712s Adding debian:UCA_Extended_Validation_Root.pem 1712s Adding debian:UCA_Global_G2_Root.pem 1712s Adding debian:USERTrust_ECC_Certification_Authority.pem 1712s Adding debian:USERTrust_RSA_Certification_Authority.pem 1712s Adding debian:XRamp_Global_CA_Root.pem 1712s Adding debian:certSIGN_ROOT_CA.pem 1712s Adding debian:certSIGN_Root_CA_G2.pem 1712s Adding debian:e-Szigno_Root_CA_2017.pem 1712s Adding debian:ePKI_Root_Certification_Authority.pem 1712s Adding debian:emSign_ECC_Root_CA_-_C3.pem 1712s Adding debian:emSign_ECC_Root_CA_-_G3.pem 1712s Adding debian:emSign_Root_CA_-_C1.pem 1712s Adding debian:emSign_Root_CA_-_G1.pem 1712s Adding debian:vTrus_ECC_Root_CA.pem 1712s Adding debian:vTrus_Root_CA.pem 1712s done. 1712s Setting up ant (1.10.14-1) ... 1712s Setting up junit4 (4.13.2-4) ... 1712s Setting up openjdk-21-jdk-headless:amd64 (21.0.2+13-2) ... 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 1712s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 1713s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 1713s Setting up default-jre-headless (2:1.21-75+exp1) ... 1713s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 1713s Setting up default-jdk-headless (2:1.21-75+exp1) ... 1713s Setting up autopkgtest-satdep (0) ... 1716s (Reading database ... 84194 files and directories currently installed.) 1716s Removing autopkgtest-satdep (0) ... 1727s autopkgtest [08:07:36]: test jruby: [----------------------- 1727s installing system gems into jruby: 1727s * diff-lcs-1.5.1 1727s * minitest-5.15.0 1727s * power_assert-2.0.1 1727s * rake-13.0.6 1727s * rexml-3.2.5 1727s * rspec-3.13.0 1727s * rspec-core-3.13.0 1727s * rspec-expectations-3.13.0 1727s * rspec-mocks-3.13.0 1727s * rspec-support-3.13.1 1727s * test-unit-3.5.3 1728s Note: test/org/jruby/test/AlternativelyLoaded.java uses or overrides a deprecated API. 1728s Note: Recompile with -Xlint:deprecation for details. 1728s Note: Some input files use unchecked or unsafe operations. 1728s Note: Recompile with -Xlint:unchecked for details. 1734s mkdir -p test/target/test-classes 1734s mkdir -p test/target/test-classes-isolated/java_integration/fixtures/isolated 1734s mkdir -p test/target/test-interfaces-isolated/java_integration/fixtures/isolated 1734s /usr/lib/jvm/java-21-openjdk-amd64/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 1736s Note: Some input files use unchecked or unsafe operations. 1736s Note: Recompile with -Xlint:unchecked for details. 1736s mv -f test/target/test-classes/java_integration/fixtures/isolated/classes test/target/test-classes-isolated/java_integration/fixtures/isolated 1736s mv -f test/target/test-classes/java_integration/fixtures/isolated/interfaces test/target/test-interfaces-isolated/java_integration/fixtures/isolated 1739s /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 1739s /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 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:123: warning: `&' interpreted as argument prefix 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:394: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:396: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:398: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:399: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:400: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:401: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:402: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:403: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:404: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:405: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:406: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:407: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:408: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:409: warning: assigned but unused variable - results 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:525: warning: assigned but unused variable - p2 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_block.rb:523: warning: assigned but unused variable - p 1739s /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 1739s /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 1739s /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 1739s /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 1739s /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 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_date.rb:951: warning: possibly useless use of == in void context 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_date.rb:960: warning: possibly useless use of <=> in void context 1739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_date.rb:985: warning: assigned but unused variable - seconds_to_advance 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_defined.rb:194: warning: assigned but unused variable - foo 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_defined.rb:197: warning: assigned but unused variable - foo2 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_env.rb:57: warning: assigned but unused variable - tmp 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_enumerator.rb:126: warning: assigned but unused variable - ex 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_file.rb:965: warning: assigned but unused variable - abs_path_linked 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_frame_self.rb:24: warning: assigned but unused variable - classnames 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:645: warning: possibly useless use of :: in void context 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:963: warning: assigned but unused variable - e 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1015: warning: assigned but unused variable - e 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1495: warning: possibly useless use of :: in void context 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:98: warning: method redefined; discarding old to_int 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:98: warning: method redefined; discarding old to_f 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_io.rb:179: warning: assigned but unused variable - io 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_io.rb:183: warning: assigned but unused variable - io 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:105: warning: assigned but unused variable - e 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:121: warning: assigned but unused variable - e 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:128: warning: assigned but unused variable - e 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_parsing.rb:6: warning: assigned but unused variable - n 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:733: warning: assigned but unused variable - tries 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:732: warning: assigned but unused variable - delay 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:754: warning: assigned but unused variable - s 1740s /tmp/autopkgtest.mg4W0U/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 1740s /tmp/autopkgtest.mg4W0U/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 1740s /tmp/autopkgtest.mg4W0U/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 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_thread.rb:34: warning: assigned but unused variable - v 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:327: warning: assigned but unused variable - unzipped 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:482: warning: assigned but unused variable - marker 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:496: warning: assigned but unused variable - data 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:597: warning: assigned but unused variable - s 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:606: warning: assigned but unused variable - s 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:617: warning: assigned but unused variable - s 1740s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_kernel.rb:235: warning: assigned but unused variable - b 1742s Loaded suite /usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/rake_test_loader 1742s Started 1742s ........................warning: thread "Ruby-0-Thread-3: /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:678" terminated with exception (report_on_exception is true): 1742s IOError: stream closed in another thread 1742s accept at org/jruby/ext/socket/RubyTCPServer.java:153 1742s test_server_close_interrupts_pending_accepts at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:679 1742s ....................warning: thread "Ruby-0-Thread-7: /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:307" terminated with exception (report_on_exception is true): 1742s IOError: stream closed in another thread 1742s accept at org/jruby/ext/socket/RubyTCPServer.java:153 1742s test_tcp_socket_errors at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_socket.rb:307 1749s ................................... 1749s ................/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_backtraces.rb:19: warning: constant ::NativeException is deprecated 1749s ./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_backtraces.rb:53: warning: constant ::NativeException is deprecated 1749s .............................................................. 1752s ..............null:1: warning: possibly useless use of + in void context 1752s ................................................................. 1764s ............................................................................... 1774s ............................................................................... 1781s ............................................................................... 1782s ..................................................P 1782s =============================================================================== 1782s Pending: test_java_constructor_with_prefered_match(TestHigherJavasupport): [ji] did not select (float,float,float) ctor 1782s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:1938:in `test_java_constructor_with_prefered_match' 1782s 1935: # warning: ambiguous Java methods found, using java.awt.Color(int,int,int) 1782s 1936: # TODO should not warn 1782s 1937: #assert ! output.index('ambiguous'), output 1782s => 1938: pend('[ji] did not select (float,float,float) ctor') if color.getRed != 255 1782s 1939: assert_equal 255, color.getRed # assert we called (float,float,float) 1782s 1940: end 1782s 1941: 1782s org/jruby/RubyKernel.java:1414:in `catch' 1782s org/jruby/RubyKernel.java:1409:in `catch' 1782s org/jruby/RubyKernel.java:1414:in `catch' 1782s org/jruby/RubyKernel.java:1409:in `catch' 1782s =============================================================================== 1782s ...../tmp/autopkgtest.mg4W0U/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) 1782s ......................................O 1782s =============================================================================== 1782s Omission: omitted. [test_reflected_field(TestHigherJavasupport)] 1782s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_higher_javasupport.rb:955:in `test_reflected_field' 1782s =============================================================================== 1786s ............................................................................... 1786s ...../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:53: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 1786s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:59: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 1786s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:61: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 1786s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_jruby_core_ext.rb:64: warning: Class#subclasses(opts) is deprecated, please use the supported Class#subclasses() version 1796s ................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:126: warning: constant ::NativeException is deprecated 1796s ...../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:325: warning: constant Java::JavaObject is deprecated 1796s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:326: warning: constant Java::JavaObject is deprecated 1796s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:329: warning: constant Java::JavaObject is deprecated 1796s ./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:333: warning: constant Java::JavaObject is deprecated 1796s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:344: warning: constant Java::JavaObject is deprecated 1796s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_java_extension.rb:345: warning: constant Java::JavaObject is deprecated 1796s .................................. 1807s .....................................one 1813s ............./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_load.rb:237: warning: method redefined; discarding old require 1813s deps:4: warning: previous definition of require was here 1820s ................./usr/share/jruby/lib/ruby/stdlib/ostruct.rb:466: warning: OpenStruct#public_send accesses caller method's state and should not be aliased 1820s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:466: warning: OpenStruct#method accesses caller method's state and should not be aliased 1820s ./usr/share/jruby/lib/ruby/stdlib/json/version.rb:4: warning: already initialized constant JSON::VERSION 1820s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:5: warning: already initialized constant JSON::VERSION_ARRAY 1820s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:6: warning: already initialized constant JSON::VERSION_MAJOR 1820s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:7: warning: already initialized constant JSON::VERSION_MINOR 1820s /usr/share/jruby/lib/ruby/stdlib/json/version.rb:8: warning: already initialized constant JSON::VERSION_BUILD 1820s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:110: warning: already initialized constant OpenStruct::VERSION 1820s /usr/share/jruby/lib/ruby/stdlib/ostruct.rb:371: warning: already initialized constant OpenStruct::InspectKey 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:6: warning: already initialized constant JSON::NOT_SET 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:114: warning: already initialized constant JSON::DEFAULT_CREATE_ID 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:117: warning: already initialized constant JSON::CREATE_ID_TLS_KEY 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:133: warning: already initialized constant JSON::NaN 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:135: warning: already initialized constant JSON::Infinity 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:137: warning: already initialized constant JSON::MinusInfinity 1820s /usr/share/jruby/lib/ruby/stdlib/json/common.rb:162: warning: already initialized constant JSON::UnparserError 1828s .["0"] 1828s .../usr/share/jruby/lib/ruby/stdlib/subspawn/posix/pty.rb:46: warning: assigned but unused variable - name 1828s .....NOTE: Gem::Specification#has_rdoc= is deprecated with no replacement. It will be removed in Rubygems 4 1828s Gem::Specification#has_rdoc= called from /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_marshal_gemspec.rb:110. 1829s .. 1829s .........................OpenSSL::X509::Request#version= has no effect on certification request 1835s ...................................................... 1835s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/gh4091-sample.rb:4: warning: possibly useless use of + in void context 1835s .../usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85: warning: loading in progress, circular require considered harmful - /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb require at org/jruby/RubyKernel.java:1175 1835s require at /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85 1835s
at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 1835s each at org/jruby/RubyArray.java:1983 1835s
at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 1835s require at org/jruby/RubyKernel.java:1175 1835s require at /usr/share/jruby/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:85 1835s
at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 1835s each at org/jruby/RubyArray.java:1983 1835s
at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require_once_jruby_3234/all.rb:1 1835s load at org/jruby/RubyKernel.java:1211 1835s test_feature_has_full_name at /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_require.rb:24 1835s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:871 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:566 1835s create_fixtures_runner at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276 1835s create_fixtures_runner at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276 1835s run_fixture at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:257 1835s run_setup at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:292 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:564 1835s catch at org/jruby/RubyKernel.java:1414 1835s catch at org/jruby/RubyKernel.java:1409 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:563 1835s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53 1835s run_test at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53 1835s run_suite at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:67 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:45 1835s with_listener at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:102 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:41 1835s catch at org/jruby/RubyKernel.java:1414 1835s catch at org/jruby/RubyKernel.java:1409 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:39 1835s start_mediator at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:40 1835s start at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:25 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnerutilities.rb:24 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:458 1835s change_work_directory at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:514 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:457 1835s run at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:66 1835s
at /usr/lib/ruby/gems/3.1.0/gems/test-unit-3.5.3/lib/test/unit.rb:518 1835s 1837s ...................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 1837s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 1837s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_string.rb:136: warning: historical binary regexp match /.../n against UTF-8 string 1837s ..........."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" 1850s ...****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************......................... 1850s ... /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_thread_backtrace.rb:8:in `block in test_simple_backtrace' 1851s ............................................................/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:52: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 1851s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:70: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 1851s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:71: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 1851s ../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/jruby/test_zlib.rb:109: warning: Zlib::GzipWriter#write is outdated interface which accepts just one argument 1851s .............. 1854s ................................................................ 1854s Finished in 111.334224 seconds. 1854s ------------------------------------------------------------------------------- 1854s 1107 tests, 75465 assertions, 0 failures, 0 errors, 1 pendings, 1 omissions, 0 notifications 1854s 99.9096% passed 1854s ------------------------------------------------------------------------------- 1854s 9.94 tests/s, 677.82 assertions/s 1854s autopkgtest [08:09:43]: test jruby: -----------------------] 1854s autopkgtest [08:09:43]: test jruby: - - - - - - - - - - results - - - - - - - - - - 1854s jruby PASS 1855s autopkgtest [08:09:44]: test spec-compiler: preparing testbed 2357s autopkgtest [08:18:05]: testbed dpkg architecture: amd64 2357s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 2357s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 2357s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 2357s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 2357s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 2357s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 2357s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 2357s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 2357s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 2357s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 2357s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 2357s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 2357s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 2357s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 2357s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 2357s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 2357s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 2357s autopkgtest [08:18:05]: testbed apt version: 2.7.12 2357s autopkgtest [08:18:05]: @@@@@@@@@@@@@@@@@@@@ test bed setup 2360s Fetched 11.7 MB in 1s (7880 kB/s) 2360s Reading package lists... 2362s Reading package lists... 2363s Building dependency tree... 2363s Reading state information... 2363s Calculating upgrade... 2363s The following packages will be upgraded: 2363s psmisc 2363s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2363s Need to get 179 kB of archives. 2363s After this operation, 28.7 kB disk space will be freed. 2363s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 2364s Fetched 179 kB in 0s (5208 kB/s) 2364s (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 ... 71864 files and directories currently installed.) 2364s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 2364s Unpacking psmisc (23.7-1) over (23.6-2) ... 2364s Setting up psmisc (23.7-1) ... 2364s Processing triggers for man-db (2.12.0-3) ... 2365s Reading package lists... 2365s Building dependency tree... 2365s Reading state information... 2366s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2366s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 2366s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 2366s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 2366s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 2368s Reading package lists... 2368s Reading package lists... 2368s Building dependency tree... 2368s Reading state information... 2368s Calculating upgrade... 2369s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2369s Reading package lists... 2369s Building dependency tree... 2369s Reading state information... 2369s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2374s Reading package lists... 2374s Building dependency tree... 2374s Reading state information... 2375s Starting pkgProblemResolver with broken count: 0 2375s Starting 2 pkgProblemResolver with broken count: 0 2375s Done 2375s The following additional packages will be installed: 2375s ant ca-certificates-java default-jre-headless fontconfig-config 2375s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 2375s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 2375s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 2375s libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 2375s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 2375s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 2375s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 2375s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 2375s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 2375s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 2375s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 2375s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 2375s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 2375s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 2375s rubygems-integration 2375s Suggested packages: 2375s ant-doc default-jdk | java-compiler | java-sdk default-jre 2375s libasound2-plugins alsa-utils cups-common gmp-doc libgmp10-doc libmpfr-dev 2375s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 2375s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 2375s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 2375s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri 2375s ruby-dev bundler 2375s Recommended packages: 2375s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf zip libjs-jquery 2375s ruby3.1-doc ruby3.2-doc 2375s The following NEW packages will be installed: 2375s ant autopkgtest-satdep ca-certificates-java default-jre-headless 2375s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 2375s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 2375s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 2375s libfontconfig1 libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 2375s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 2375s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 2375s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 2375s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 2375s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 2375s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 2375s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 2375s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 2375s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 2375s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 2375s rubygems-integration 2375s 0 upgraded, 72 newly installed, 0 to remove and 0 not upgraded. 2375s Need to get 104 MB/104 MB of archives. 2375s After this operation, 334 MB of additional disk space will be used. 2375s Get:1 /tmp/autopkgtest.mg4W0U/5-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [756 B] 2375s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 2375s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 2375s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 2375s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 2375s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 2375s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 2375s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 2375s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 2375s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 2375s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 2376s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 2376s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 2376s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 2376s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 2376s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 2376s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 2376s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 2376s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 2376s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 2376s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 2376s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 ant all 1.10.14-1 [2147 kB] 2376s Get:23 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 2376s Get:24 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 2376s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 2376s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 2376s Get:27 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 2376s Get:28 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 2376s Get:29 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 2376s Get:30 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 2376s Get:31 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 2376s Get:32 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 2376s Get:33 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 2376s Get:34 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 2376s Get:35 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 2376s Get:36 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 2376s Get:37 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 2376s Get:38 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 2376s Get:39 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 2376s Get:40 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 2376s Get:41 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 2376s Get:42 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 2376s Get:43 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 2376s Get:44 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 2376s Get:45 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 2376s Get:46 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 2376s Get:47 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 2376s Get:48 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 2377s Get:49 http://ftpmaster.internal/ubuntu noble/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2ubuntu4 [9956 B] 2377s Get:50 http://ftpmaster.internal/ubuntu noble/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2ubuntu4 [342 kB] 2377s Get:51 http://ftpmaster.internal/ubuntu noble/main amd64 rubygems-integration all 1.18 [5336 B] 2377s Get:52 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1 amd64 3.1.2-7ubuntu4 [48.9 kB] 2377s Get:53 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-rubygems all 3.4.20-1 [238 kB] 2377s Get:54 http://ftpmaster.internal/ubuntu noble/main amd64 ruby amd64 1:3.1+1 [3466 B] 2377s Get:55 http://ftpmaster.internal/ubuntu noble/main amd64 rake all 13.0.6-3 [61.6 kB] 2377s Get:56 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 2377s Get:57 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-webrick all 1.8.1-1 [52.3 kB] 2377s Get:58 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 2377s Get:59 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.2 amd64 3.2.3-1 [5339 kB] 2377s Get:60 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-sdbm amd64 1.0.0-5build3 [18.6 kB] 2377s Get:61 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.1 amd64 3.1.2-7ubuntu4 [5164 kB] 2377s Get:62 http://ftpmaster.internal/ubuntu noble/main amd64 libruby amd64 1:3.1+1 [4640 B] 2377s Get:63 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1-dev amd64 3.1.2-7ubuntu4 [394 kB] 2377s Get:64 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2 amd64 3.2.3-1 [50.7 kB] 2377s Get:65 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2-dev amd64 3.2.3-1 [399 kB] 2377s Get:66 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-all-dev amd64 1:3.1+1 [5732 B] 2377s Get:67 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 2377s Get:68 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 2377s Get:69 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 2377s Get:70 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 2377s Get:71 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 2377s Get:72 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 2377s Fetched 104 MB in 1s (79.3 MB/s) 2377s Selecting previously unselected package ca-certificates-java. 2377s (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 ... 71861 files and directories currently installed.) 2377s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 2377s Unpacking ca-certificates-java (20240118) ... 2377s Selecting previously unselected package java-common. 2377s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 2377s Unpacking java-common (0.75+exp1) ... 2377s Selecting previously unselected package libavahi-common-data:amd64. 2377s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 2377s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 2377s Selecting previously unselected package libavahi-common3:amd64. 2377s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 2377s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 2377s Selecting previously unselected package libavahi-client3:amd64. 2377s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 2377s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 2377s Selecting previously unselected package libcups2:amd64. 2377s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_amd64.deb ... 2377s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 2377s Selecting previously unselected package liblcms2-2:amd64. 2377s Preparing to unpack .../06-liblcms2-2_2.14-2_amd64.deb ... 2377s Unpacking liblcms2-2:amd64 (2.14-2) ... 2377s Selecting previously unselected package libjpeg-turbo8:amd64. 2377s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 2377s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 2377s Selecting previously unselected package libjpeg8:amd64. 2377s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_amd64.deb ... 2377s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 2377s Selecting previously unselected package fonts-dejavu-mono. 2377s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 2377s Unpacking fonts-dejavu-mono (2.37-8) ... 2377s Selecting previously unselected package fonts-dejavu-core. 2377s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 2377s Unpacking fonts-dejavu-core (2.37-8) ... 2377s Selecting previously unselected package fontconfig-config. 2377s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 2378s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 2378s Selecting previously unselected package libfontconfig1:amd64. 2378s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 2378s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 2378s Selecting previously unselected package libasound2-data. 2378s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 2378s Unpacking libasound2-data (1.2.10-3build1) ... 2378s Selecting previously unselected package libasound2:amd64. 2378s Preparing to unpack .../14-libasound2_1.2.10-3build1_amd64.deb ... 2378s Unpacking libasound2:amd64 (1.2.10-3build1) ... 2378s Selecting previously unselected package libgraphite2-3:amd64. 2378s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_amd64.deb ... 2378s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 2378s Selecting previously unselected package libharfbuzz0b:amd64. 2378s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_amd64.deb ... 2378s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 2378s Selecting previously unselected package libpcsclite1:amd64. 2378s Preparing to unpack .../17-libpcsclite1_2.0.0-1_amd64.deb ... 2378s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 2378s Selecting previously unselected package openjdk-21-jre-headless:amd64. 2378s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 2378s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 2382s Selecting previously unselected package default-jre-headless. 2382s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 2382s Unpacking default-jre-headless (2:1.21-75+exp1) ... 2382s Selecting previously unselected package ant. 2382s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 2382s Unpacking ant (1.10.14-1) ... 2382s Selecting previously unselected package libasm-java. 2382s Preparing to unpack .../21-libasm-java_9.6~us1-0ubuntu1_all.deb ... 2382s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 2382s Selecting previously unselected package libbackport9-java. 2382s Preparing to unpack .../22-libbackport9-java_1.10-2_all.deb ... 2382s Unpacking libbackport9-java (1.10-2) ... 2382s Selecting previously unselected package libdirgra-java. 2382s Preparing to unpack .../23-libdirgra-java_0.4-2_all.deb ... 2382s Unpacking libdirgra-java (0.4-2) ... 2382s Selecting previously unselected package libfixposix4t64:amd64. 2382s Preparing to unpack .../24-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 2382s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 2382s Selecting previously unselected package libheadius-options-java. 2382s Preparing to unpack .../25-libheadius-options-java_1.7-1_all.deb ... 2382s Unpacking libheadius-options-java (1.7-1) ... 2382s Selecting previously unselected package libinvokebinder-java. 2382s Preparing to unpack .../26-libinvokebinder-java_1.13-1_all.deb ... 2382s Unpacking libinvokebinder-java (1.13-1) ... 2382s Selecting previously unselected package libhawtjni-runtime-java. 2382s Preparing to unpack .../27-libhawtjni-runtime-java_1.18-1_all.deb ... 2382s Unpacking libhawtjni-runtime-java (1.18-1) ... 2382s Selecting previously unselected package libjansi-native-java. 2382s Preparing to unpack .../28-libjansi-native-java_1.8-2_all.deb ... 2382s Unpacking libjansi-native-java (1.8-2) ... 2382s Selecting previously unselected package libjansi1-java. 2382s Preparing to unpack .../29-libjansi1-java_1.18-3ubuntu1_all.deb ... 2382s Unpacking libjansi1-java (1.18-3ubuntu1) ... 2382s Selecting previously unselected package libjcodings-java. 2382s Preparing to unpack .../30-libjcodings-java_1.0.58-1_all.deb ... 2382s Unpacking libjcodings-java (1.0.58-1) ... 2382s Selecting previously unselected package libjffi-jni:amd64. 2382s Preparing to unpack .../31-libjffi-jni_1.3.13+ds-1_amd64.deb ... 2382s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 2382s Selecting previously unselected package libjffi-java. 2382s Preparing to unpack .../32-libjffi-java_1.3.13+ds-1_all.deb ... 2382s Unpacking libjffi-java (1.3.13+ds-1) ... 2382s Selecting previously unselected package libjitescript-java. 2382s Preparing to unpack .../33-libjitescript-java_0.4.3-1_all.deb ... 2382s Unpacking libjitescript-java (0.4.3-1) ... 2382s Selecting previously unselected package libjline2-java. 2382s Preparing to unpack .../34-libjline2-java_2.14.6-5_all.deb ... 2382s Unpacking libjline2-java (2.14.6-5) ... 2382s Selecting previously unselected package libjnr-constants-java. 2382s Preparing to unpack .../35-libjnr-constants-java_0.10.4-2_all.deb ... 2382s Unpacking libjnr-constants-java (0.10.4-2) ... 2382s Selecting previously unselected package libjnr-x86asm-java. 2382s Preparing to unpack .../36-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 2382s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 2382s Selecting previously unselected package libjnr-ffi-java. 2382s Preparing to unpack .../37-libjnr-ffi-java_2.2.15-2_all.deb ... 2382s Unpacking libjnr-ffi-java (2.2.15-2) ... 2382s Selecting previously unselected package libjnr-enxio-java. 2382s Preparing to unpack .../38-libjnr-enxio-java_0.32.16-1_all.deb ... 2382s Unpacking libjnr-enxio-java (0.32.16-1) ... 2382s Selecting previously unselected package libjnr-netdb-java. 2382s Preparing to unpack .../39-libjnr-netdb-java_1.1.6-1.1_all.deb ... 2382s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 2382s Selecting previously unselected package libjnr-posix-java. 2382s Preparing to unpack .../40-libjnr-posix-java_3.1.18-1_all.deb ... 2382s Unpacking libjnr-posix-java (3.1.18-1) ... 2382s Selecting previously unselected package libjnr-unixsocket-java. 2382s Preparing to unpack .../41-libjnr-unixsocket-java_0.38.21-2_all.deb ... 2382s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 2382s Selecting previously unselected package libjoda-time-java. 2382s Preparing to unpack .../42-libjoda-time-java_2.10.14-1_all.deb ... 2382s Unpacking libjoda-time-java (2.10.14-1) ... 2382s Selecting previously unselected package libjruby-joni-java. 2382s Preparing to unpack .../43-libjruby-joni-java_2.2.1-1_all.deb ... 2382s Unpacking libjruby-joni-java (2.2.1-1) ... 2382s Selecting previously unselected package libjzlib-java. 2382s Preparing to unpack .../44-libjzlib-java_1.1.3-3_all.deb ... 2382s Unpacking libjzlib-java (1.1.3-3) ... 2382s Selecting previously unselected package libsnakeyaml-engine-java. 2382s Preparing to unpack .../45-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 2382s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 2382s Selecting previously unselected package jruby. 2382s Preparing to unpack .../46-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 2382s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 2382s Selecting previously unselected package libgmpxx4ldbl:amd64. 2382s Preparing to unpack .../47-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 2382s Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2382s Selecting previously unselected package libgmp-dev:amd64. 2382s Preparing to unpack .../48-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 2382s Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2382s Selecting previously unselected package rubygems-integration. 2382s Preparing to unpack .../49-rubygems-integration_1.18_all.deb ... 2382s Unpacking rubygems-integration (1.18) ... 2382s Selecting previously unselected package ruby3.1. 2382s Preparing to unpack .../50-ruby3.1_3.1.2-7ubuntu4_amd64.deb ... 2382s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 2382s Selecting previously unselected package ruby-rubygems. 2382s Preparing to unpack .../51-ruby-rubygems_3.4.20-1_all.deb ... 2382s Unpacking ruby-rubygems (3.4.20-1) ... 2382s Selecting previously unselected package ruby. 2382s Preparing to unpack .../52-ruby_1%3a3.1+1_amd64.deb ... 2382s Unpacking ruby (1:3.1+1) ... 2382s Selecting previously unselected package rake. 2382s Preparing to unpack .../53-rake_13.0.6-3_all.deb ... 2382s Unpacking rake (13.0.6-3) ... 2382s Selecting previously unselected package ruby-net-telnet. 2382s Preparing to unpack .../54-ruby-net-telnet_0.2.0-1_all.deb ... 2382s Unpacking ruby-net-telnet (0.2.0-1) ... 2382s Selecting previously unselected package ruby-webrick. 2382s Preparing to unpack .../55-ruby-webrick_1.8.1-1_all.deb ... 2382s Unpacking ruby-webrick (1.8.1-1) ... 2382s Selecting previously unselected package ruby-xmlrpc. 2382s Preparing to unpack .../56-ruby-xmlrpc_0.3.2-2_all.deb ... 2382s Unpacking ruby-xmlrpc (0.3.2-2) ... 2382s Selecting previously unselected package libruby3.2:amd64. 2382s Preparing to unpack .../57-libruby3.2_3.2.3-1_amd64.deb ... 2382s Unpacking libruby3.2:amd64 (3.2.3-1) ... 2382s Selecting previously unselected package ruby-sdbm:amd64. 2382s Preparing to unpack .../58-ruby-sdbm_1.0.0-5build3_amd64.deb ... 2382s Unpacking ruby-sdbm:amd64 (1.0.0-5build3) ... 2382s Selecting previously unselected package libruby3.1:amd64. 2382s Preparing to unpack .../59-libruby3.1_3.1.2-7ubuntu4_amd64.deb ... 2382s Unpacking libruby3.1:amd64 (3.1.2-7ubuntu4) ... 2382s Selecting previously unselected package libruby:amd64. 2382s Preparing to unpack .../60-libruby_1%3a3.1+1_amd64.deb ... 2382s Unpacking libruby:amd64 (1:3.1+1) ... 2382s Selecting previously unselected package ruby3.1-dev:amd64. 2382s Preparing to unpack .../61-ruby3.1-dev_3.1.2-7ubuntu4_amd64.deb ... 2382s Unpacking ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 2382s Selecting previously unselected package ruby3.2. 2382s Preparing to unpack .../62-ruby3.2_3.2.3-1_amd64.deb ... 2382s Unpacking ruby3.2 (3.2.3-1) ... 2382s Selecting previously unselected package ruby3.2-dev:amd64. 2382s Preparing to unpack .../63-ruby3.2-dev_3.2.3-1_amd64.deb ... 2382s Unpacking ruby3.2-dev:amd64 (3.2.3-1) ... 2382s Selecting previously unselected package ruby-all-dev:amd64. 2382s Preparing to unpack .../64-ruby-all-dev_1%3a3.1+1_amd64.deb ... 2382s Unpacking ruby-all-dev:amd64 (1:3.1+1) ... 2382s Selecting previously unselected package ruby-diff-lcs. 2382s Preparing to unpack .../65-ruby-diff-lcs_1.5.1-1_all.deb ... 2382s Unpacking ruby-diff-lcs (1.5.1-1) ... 2382s Selecting previously unselected package ruby-rspec-support. 2382s Preparing to unpack .../66-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 2382s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 2382s Selecting previously unselected package ruby-rspec-core. 2382s Preparing to unpack .../67-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 2382s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 2382s Selecting previously unselected package ruby-rspec-expectations. 2382s Preparing to unpack .../68-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 2382s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 2382s Selecting previously unselected package ruby-rspec-mocks. 2382s Preparing to unpack .../69-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 2382s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 2382s Selecting previously unselected package ruby-rspec. 2382s Preparing to unpack .../70-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 2382s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 2382s Selecting previously unselected package autopkgtest-satdep. 2382s Preparing to unpack .../71-5-autopkgtest-satdep.deb ... 2382s Unpacking autopkgtest-satdep (0) ... 2382s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 2382s Setting up liblcms2-2:amd64 (2.14-2) ... 2382s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 2382s Setting up java-common (0.75+exp1) ... 2382s Setting up libasm-java (9.6~us1-0ubuntu1) ... 2382s Setting up rubygems-integration (1.18) ... 2382s Setting up libheadius-options-java (1.7-1) ... 2382s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 2382s Setting up libjzlib-java (1.1.3-3) ... 2382s Setting up libbackport9-java (1.10-2) ... 2382s Setting up libasound2-data (1.2.10-3build1) ... 2382s Setting up libjitescript-java (0.4.3-1) ... 2382s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 2382s Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2382s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 2382s Setting up ruby-net-telnet (0.2.0-1) ... 2382s Setting up fonts-dejavu-mono (2.37-8) ... 2382s Setting up fonts-dejavu-core (2.37-8) ... 2382s Setting up libpcsclite1:amd64 (2.0.0-1) ... 2382s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 2382s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 2382s Setting up libjoda-time-java (2.10.14-1) ... 2382s Setting up libjcodings-java (1.0.58-1) ... 2382s Setting up ruby-webrick (1.8.1-1) ... 2382s Setting up libasound2:amd64 (1.2.10-3build1) ... 2382s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 2382s Setting up libinvokebinder-java (1.13-1) ... 2382s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 2382s Setting up ca-certificates-java (20240118) ... 2382s No JRE found. Skipping Java certificates setup. 2382s Setting up ruby-xmlrpc (0.3.2-2) ... 2382s Setting up libhawtjni-runtime-java (1.18-1) ... 2382s Setting up libdirgra-java (0.4-2) ... 2382s Setting up libjnr-constants-java (0.10.4-2) ... 2382s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 2382s Setting up libjffi-java (1.3.13+ds-1) ... 2382s Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2382s Setting up libjruby-joni-java (2.2.1-1) ... 2382s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 2382s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 2382s Setting up libjansi-native-java (1.8-2) ... 2382s Setting up libjansi1-java (1.18-3ubuntu1) ... 2382s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 2382s Setting up libjline2-java (2.14.6-5) ... 2382s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 2382s Setting up libjnr-ffi-java (2.2.15-2) ... 2382s Setting up libjnr-enxio-java (0.32.16-1) ... 2382s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 2382s Setting up libjnr-netdb-java (1.1.6-1.1) ... 2382s Setting up libjnr-posix-java (3.1.18-1) ... 2382s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 2382s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 2382s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 2382s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 2382s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 2382s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 2382s Setting up libjnr-unixsocket-java (0.38.21-2) ... 2382s Setting up ruby-rubygems (3.4.20-1) ... 2382s Setting up rake (13.0.6-3) ... 2382s Setting up libruby:amd64 (1:3.1+1) ... 2382s Setting up libruby3.2:amd64 (3.2.3-1) ... 2382s Setting up ruby3.2 (3.2.3-1) ... 2382s Setting up ruby3.2-dev:amd64 (3.2.3-1) ... 2382s Setting up ruby-sdbm:amd64 (1.0.0-5build3) ... 2382s Setting up libruby3.1:amd64 (3.1.2-7ubuntu4) ... 2382s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 2382s Setting up ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 2382s Setting up ruby-all-dev:amd64 (1:3.1+1) ... 2382s Setting up ruby (1:3.1+1) ... 2382s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 2382s Setting up ruby-diff-lcs (1.5.1-1) ... 2382s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 2382s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 2382s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 2382s Processing triggers for libc-bin (2.39-0ubuntu6) ... 2382s Processing triggers for man-db (2.12.0-3) ... 2383s Processing triggers for ca-certificates-java (20240118) ... 2383s Adding debian:ACCVRAIZ1.pem 2383s Adding debian:AC_RAIZ_FNMT-RCM.pem 2383s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 2383s Adding debian:ANF_Secure_Server_Root_CA.pem 2383s Adding debian:Actalis_Authentication_Root_CA.pem 2383s Adding debian:AffirmTrust_Commercial.pem 2383s Adding debian:AffirmTrust_Networking.pem 2383s Adding debian:AffirmTrust_Premium.pem 2383s Adding debian:AffirmTrust_Premium_ECC.pem 2383s Adding debian:Amazon_Root_CA_1.pem 2383s Adding debian:Amazon_Root_CA_2.pem 2383s Adding debian:Amazon_Root_CA_3.pem 2383s Adding debian:Amazon_Root_CA_4.pem 2383s Adding debian:Atos_TrustedRoot_2011.pem 2383s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 2383s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 2383s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 2383s Adding debian:BJCA_Global_Root_CA1.pem 2383s Adding debian:BJCA_Global_Root_CA2.pem 2383s Adding debian:Baltimore_CyberTrust_Root.pem 2383s Adding debian:Buypass_Class_2_Root_CA.pem 2383s Adding debian:Buypass_Class_3_Root_CA.pem 2383s Adding debian:CA_Disig_Root_R2.pem 2383s Adding debian:CFCA_EV_ROOT.pem 2383s Adding debian:COMODO_Certification_Authority.pem 2383s Adding debian:COMODO_ECC_Certification_Authority.pem 2383s Adding debian:COMODO_RSA_Certification_Authority.pem 2383s Adding debian:Certainly_Root_E1.pem 2383s Adding debian:Certainly_Root_R1.pem 2383s Adding debian:Certigna.pem 2383s Adding debian:Certigna_Root_CA.pem 2383s Adding debian:Certum_EC-384_CA.pem 2383s Adding debian:Certum_Trusted_Network_CA.pem 2383s Adding debian:Certum_Trusted_Network_CA_2.pem 2383s Adding debian:Certum_Trusted_Root_CA.pem 2383s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 2383s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 2383s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 2383s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 2383s Adding debian:Comodo_AAA_Services_root.pem 2383s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 2383s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 2383s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 2383s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 2383s Adding debian:DigiCert_Assured_ID_Root_CA.pem 2383s Adding debian:DigiCert_Assured_ID_Root_G2.pem 2383s Adding debian:DigiCert_Assured_ID_Root_G3.pem 2383s Adding debian:DigiCert_Global_Root_CA.pem 2383s Adding debian:DigiCert_Global_Root_G2.pem 2383s Adding debian:DigiCert_Global_Root_G3.pem 2383s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 2383s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 2383s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 2383s Adding debian:DigiCert_Trusted_Root_G4.pem 2383s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 2383s Adding debian:Entrust_Root_Certification_Authority.pem 2383s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 2383s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 2383s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 2383s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 2383s Adding debian:GLOBALTRUST_2020.pem 2383s Adding debian:GTS_Root_R1.pem 2383s Adding debian:GTS_Root_R2.pem 2383s Adding debian:GTS_Root_R3.pem 2383s Adding debian:GTS_Root_R4.pem 2383s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 2383s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 2383s Adding debian:GlobalSign_Root_CA.pem 2383s Adding debian:GlobalSign_Root_CA_-_R3.pem 2383s Adding debian:GlobalSign_Root_CA_-_R6.pem 2383s Adding debian:GlobalSign_Root_E46.pem 2383s Adding debian:GlobalSign_Root_R46.pem 2383s Adding debian:Go_Daddy_Class_2_CA.pem 2383s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 2383s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 2383s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 2383s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 2383s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 2383s Adding debian:HiPKI_Root_CA_-_G1.pem 2383s Adding debian:Hongkong_Post_Root_CA_3.pem 2383s Adding debian:ISRG_Root_X1.pem 2383s Adding debian:ISRG_Root_X2.pem 2383s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 2383s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 2383s Adding debian:Izenpe.com.pem 2383s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 2383s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 2383s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 2383s Adding debian:NAVER_Global_Root_Certification_Authority.pem 2383s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 2383s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 2383s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 2383s Adding debian:QuoVadis_Root_CA_1_G3.pem 2383s Adding debian:QuoVadis_Root_CA_2.pem 2383s Adding debian:QuoVadis_Root_CA_2_G3.pem 2383s Adding debian:QuoVadis_Root_CA_3.pem 2383s Adding debian:QuoVadis_Root_CA_3_G3.pem 2383s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 2383s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 2383s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 2383s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 2383s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 2383s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 2383s Adding debian:SZAFIR_ROOT_CA2.pem 2383s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 2383s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 2383s Adding debian:SecureSign_RootCA11.pem 2383s Adding debian:SecureTrust_CA.pem 2383s Adding debian:Secure_Global_CA.pem 2383s Adding debian:Security_Communication_ECC_RootCA1.pem 2383s Adding debian:Security_Communication_RootCA2.pem 2383s Adding debian:Security_Communication_RootCA3.pem 2383s Adding debian:Security_Communication_Root_CA.pem 2383s Adding debian:Starfield_Class_2_CA.pem 2383s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 2383s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 2383s Adding debian:SwissSign_Gold_CA_-_G2.pem 2383s Adding debian:SwissSign_Silver_CA_-_G2.pem 2383s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 2383s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 2383s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 2383s Adding debian:TWCA_Global_Root_CA.pem 2383s Adding debian:TWCA_Root_Certification_Authority.pem 2383s Adding debian:TeliaSonera_Root_CA_v1.pem 2383s Adding debian:Telia_Root_CA_v2.pem 2383s Adding debian:TrustAsia_Global_Root_CA_G3.pem 2383s Adding debian:TrustAsia_Global_Root_CA_G4.pem 2383s Adding debian:Trustwave_Global_Certification_Authority.pem 2383s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 2383s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 2383s Adding debian:TunTrust_Root_CA.pem 2383s Adding debian:UCA_Extended_Validation_Root.pem 2383s Adding debian:UCA_Global_G2_Root.pem 2383s Adding debian:USERTrust_ECC_Certification_Authority.pem 2383s Adding debian:USERTrust_RSA_Certification_Authority.pem 2383s Adding debian:XRamp_Global_CA_Root.pem 2383s Adding debian:certSIGN_ROOT_CA.pem 2383s Adding debian:certSIGN_Root_CA_G2.pem 2383s Adding debian:e-Szigno_Root_CA_2017.pem 2383s Adding debian:ePKI_Root_Certification_Authority.pem 2383s Adding debian:emSign_ECC_Root_CA_-_C3.pem 2383s Adding debian:emSign_ECC_Root_CA_-_G3.pem 2383s Adding debian:emSign_Root_CA_-_C1.pem 2383s Adding debian:emSign_Root_CA_-_G1.pem 2383s Adding debian:vTrus_ECC_Root_CA.pem 2383s Adding debian:vTrus_Root_CA.pem 2383s done. 2383s Setting up default-jre-headless (2:1.21-75+exp1) ... 2383s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 2383s Setting up ant (1.10.14-1) ... 2383s Setting up autopkgtest-satdep (0) ... 2387s (Reading database ... 81125 files and directories currently installed.) 2387s Removing autopkgtest-satdep (0) ... 2399s autopkgtest [08:18:48]: test spec-compiler: [----------------------- 2400s installing system gems into jruby: 2400s * diff-lcs-1.5.1 2400s * minitest-5.15.0 2400s * power_assert-2.0.1 2400s * rake-13.0.6 2400s * rexml-3.2.5 2400s * rspec-3.13.0 2400s * rspec-core-3.13.0 2400s * rspec-expectations-3.13.0 2400s * rspec-mocks-3.13.0 2400s * rspec-support-3.13.1 2400s * test-unit-3.5.3 2405s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-support-3.13.1/lib:/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/compiler/\*\*/\*_spec.rb 2410s ......................................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 2410s ./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 2410s ........*...*......................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 2410s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 2411s ................................................................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 2411s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 2411s .........*...*......................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 2411s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 2411s ..................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 2411s ./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 2412s ............................................................./tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 2412s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 2413s .........*...*......................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 2413s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 2413s ..................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 2413s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 2414s ............................................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:723: warning: unused literal ignored 2414s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:724: warning: unused literal ignored 2414s .........*...*......................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1125: warning: literal in condition 2414s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1123: warning: literal in condition 2414s ...................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1363: warning: already initialized constant StructTest1 2414s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1364: warning: already initialized constant StructTest2 2415s ....... 2415s 2415s Pending: (Failures listed here are expected and do not affect your suite's status) 2415s 2415s 1) JRuby's interpreter compiles very long code bodies 2415s # JRUBY-2246 2415s # ./spec/compiler/general_spec.rb:775 2415s 2415s 2) JRuby's interpreter can compile large literal arrays and hashes 2415s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 2415s # ./spec/compiler/general_spec.rb:832 2415s 2415s 3) JRuby's persistence compiles very long code bodies 2415s # JRUBY-2246 2415s # ./spec/compiler/general_spec.rb:775 2415s 2415s 4) JRuby's persistence can compile large literal arrays and hashes 2415s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 2415s # ./spec/compiler/general_spec.rb:832 2415s 2415s 5) JRuby's jit compiles very long code bodies 2415s # JRUBY-2246 2415s # ./spec/compiler/general_spec.rb:775 2415s 2415s 6) JRuby's jit can compile large literal arrays and hashes 2415s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 2415s # ./spec/compiler/general_spec.rb:832 2415s 2415s 7) JRuby's aot compiles very long code bodies 2415s # JRUBY-2246 2415s # ./spec/compiler/general_spec.rb:775 2415s 2415s 8) JRuby's aot can compile large literal arrays and hashes 2415s # JRUBY-4757 and JRUBY-2621: can't compile large array/hash 2415s # ./spec/compiler/general_spec.rb:832 2415s 2415s Deprecation Warnings: 2415s 2415s 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` 2415s 2415s 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.mg4W0U/autopkgtest_tmp/spec/compiler/general_spec.rb:1359:in `block in
'. 2415s 2415s 2415s 2 deprecation warnings total 2415s 2415s If you need more of the backtrace for any of these deprecations to 2415s identify where to make the necessary changes, you can configure 2415s `config.raise_errors_for_deprecations!`, and it will turn the 2415s deprecation warnings into errors, giving you the full backtrace. 2415s 2415s Finished in 5.4 seconds (files took 1.19 seconds to load) 2415s 482 examples, 0 failures, 8 pending 2415s 2415s autopkgtest [08:19:04]: test spec-compiler: -----------------------] 2415s autopkgtest [08:19:04]: test spec-compiler: - - - - - - - - - - results - - - - - - - - - - 2415s spec-compiler PASS 2415s autopkgtest [08:19:04]: test spec-ffi: preparing testbed 2417s Reading package lists... 2417s Building dependency tree... 2417s Reading state information... 2417s Starting pkgProblemResolver with broken count: 0 2417s Starting 2 pkgProblemResolver with broken count: 0 2417s Done 2418s The following additional packages will be installed: 2418s build-essential cpp cpp-13 cpp-13-x86-64-linux-gnu cpp-x86-64-linux-gnu g++ 2418s g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu gcc gcc-13 2418s gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu libasan8 libatomic1 2418s libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libgcc-13-dev libgomp1 2418s libhwasan0 libisl23 libitm1 liblsan0 libmpc3 libquadmath0 libstdc++-13-dev 2418s libtsan2 libubsan1 linux-libc-dev rpcsvc-proto 2418s Suggested packages: 2418s cpp-doc gcc-13-locales cpp-13-doc g++-multilib g++-13-multilib gcc-13-doc 2418s gcc-multilib manpages-dev autoconf automake libtool flex bison gdb gcc-doc 2418s gcc-13-multilib gdb-x86-64-linux-gnu glibc-doc libstdc++-13-doc 2418s Recommended packages: 2418s manpages manpages-dev libc-devtools 2418s The following NEW packages will be installed: 2418s autopkgtest-satdep build-essential cpp cpp-13 cpp-13-x86-64-linux-gnu 2418s cpp-x86-64-linux-gnu g++ g++-13 g++-13-x86-64-linux-gnu g++-x86-64-linux-gnu 2418s gcc gcc-13 gcc-13-x86-64-linux-gnu gcc-x86-64-linux-gnu libasan8 libatomic1 2418s libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libgcc-13-dev libgomp1 2418s libhwasan0 libisl23 libitm1 liblsan0 libmpc3 libquadmath0 libstdc++-13-dev 2418s libtsan2 libubsan1 linux-libc-dev rpcsvc-proto 2418s 0 upgraded, 33 newly installed, 0 to remove and 0 not upgraded. 2418s Need to get 66.1 MB/66.1 MB of archives. 2418s After this operation, 244 MB of additional disk space will be used. 2418s Get:1 /tmp/autopkgtest.mg4W0U/6-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [768 B] 2418s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 libc-dev-bin amd64 2.39-0ubuntu6 [20.4 kB] 2418s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 linux-libc-dev amd64 6.8.0-11.11 [1595 kB] 2418s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libcrypt-dev amd64 1:4.4.36-4 [128 kB] 2418s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 rpcsvc-proto amd64 1.4.2-0ubuntu6 [68.5 kB] 2418s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libc6-dev amd64 2.39-0ubuntu6 [2126 kB] 2418s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libisl23 amd64 0.26-3 [741 kB] 2418s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 libmpc3 amd64 1.3.1-1 [54.1 kB] 2418s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [11.2 MB] 2418s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-13 amd64 13.2.0-17ubuntu2 [1030 B] 2418s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 cpp-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [5326 B] 2418s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 cpp amd64 4:13.2.0-7ubuntu1 [22.4 kB] 2418s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 libcc1-0 amd64 14-20240303-1ubuntu1 [47.7 kB] 2418s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libgomp1 amd64 14-20240303-1ubuntu1 [147 kB] 2418s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libitm1 amd64 14-20240303-1ubuntu1 [29.1 kB] 2418s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libatomic1 amd64 14-20240303-1ubuntu1 [10.4 kB] 2418s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libasan8 amd64 14-20240303-1ubuntu1 [3026 kB] 2418s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 liblsan0 amd64 14-20240303-1ubuntu1 [1310 kB] 2418s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libtsan2 amd64 14-20240303-1ubuntu1 [2732 kB] 2418s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 libubsan1 amd64 14-20240303-1ubuntu1 [1172 kB] 2418s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 libhwasan0 amd64 14-20240303-1ubuntu1 [1629 kB] 2418s Get:22 http://ftpmaster.internal/ubuntu noble/main amd64 libquadmath0 amd64 14-20240303-1ubuntu1 [155 kB] 2418s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 libgcc-13-dev amd64 13.2.0-17ubuntu2 [2687 kB] 2418s Get:24 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [21.9 MB] 2418s Get:25 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-13 amd64 13.2.0-17ubuntu2 [477 kB] 2418s Get:26 http://ftpmaster.internal/ubuntu noble/main amd64 gcc-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [1212 B] 2418s Get:27 http://ftpmaster.internal/ubuntu noble/main amd64 gcc amd64 4:13.2.0-7ubuntu1 [5018 B] 2418s Get:28 http://ftpmaster.internal/ubuntu noble/main amd64 libstdc++-13-dev amd64 13.2.0-17ubuntu2 [2340 kB] 2418s Get:29 http://ftpmaster.internal/ubuntu noble/main amd64 g++-13-x86-64-linux-gnu amd64 13.2.0-17ubuntu2 [12.5 MB] 2418s Get:30 http://ftpmaster.internal/ubuntu noble/main amd64 g++-13 amd64 13.2.0-17ubuntu2 [14.5 kB] 2418s Get:31 http://ftpmaster.internal/ubuntu noble/main amd64 g++-x86-64-linux-gnu amd64 4:13.2.0-7ubuntu1 [964 B] 2418s Get:32 http://ftpmaster.internal/ubuntu noble/main amd64 g++ amd64 4:13.2.0-7ubuntu1 [1100 B] 2418s Get:33 http://ftpmaster.internal/ubuntu noble/main amd64 build-essential amd64 12.10ubuntu1 [4928 B] 2419s Fetched 66.1 MB in 1s (124 MB/s) 2419s Selecting previously unselected package libc-dev-bin. 2419s (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 ... 81125 files and directories currently installed.) 2419s Preparing to unpack .../00-libc-dev-bin_2.39-0ubuntu6_amd64.deb ... 2419s Unpacking libc-dev-bin (2.39-0ubuntu6) ... 2419s Selecting previously unselected package linux-libc-dev:amd64. 2419s Preparing to unpack .../01-linux-libc-dev_6.8.0-11.11_amd64.deb ... 2419s Unpacking linux-libc-dev:amd64 (6.8.0-11.11) ... 2419s Selecting previously unselected package libcrypt-dev:amd64. 2419s Preparing to unpack .../02-libcrypt-dev_1%3a4.4.36-4_amd64.deb ... 2419s Unpacking libcrypt-dev:amd64 (1:4.4.36-4) ... 2419s Selecting previously unselected package rpcsvc-proto. 2419s Preparing to unpack .../03-rpcsvc-proto_1.4.2-0ubuntu6_amd64.deb ... 2419s Unpacking rpcsvc-proto (1.4.2-0ubuntu6) ... 2419s Selecting previously unselected package libc6-dev:amd64. 2419s Preparing to unpack .../04-libc6-dev_2.39-0ubuntu6_amd64.deb ... 2419s Unpacking libc6-dev:amd64 (2.39-0ubuntu6) ... 2419s Selecting previously unselected package libisl23:amd64. 2419s Preparing to unpack .../05-libisl23_0.26-3_amd64.deb ... 2419s Unpacking libisl23:amd64 (0.26-3) ... 2419s Selecting previously unselected package libmpc3:amd64. 2419s Preparing to unpack .../06-libmpc3_1.3.1-1_amd64.deb ... 2419s Unpacking libmpc3:amd64 (1.3.1-1) ... 2419s Selecting previously unselected package cpp-13-x86-64-linux-gnu. 2419s Preparing to unpack .../07-cpp-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 2419s Unpacking cpp-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2419s Selecting previously unselected package cpp-13. 2419s Preparing to unpack .../08-cpp-13_13.2.0-17ubuntu2_amd64.deb ... 2419s Unpacking cpp-13 (13.2.0-17ubuntu2) ... 2419s Selecting previously unselected package cpp-x86-64-linux-gnu. 2419s Preparing to unpack .../09-cpp-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 2419s Unpacking cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2419s Selecting previously unselected package cpp. 2419s Preparing to unpack .../10-cpp_4%3a13.2.0-7ubuntu1_amd64.deb ... 2419s Unpacking cpp (4:13.2.0-7ubuntu1) ... 2419s Selecting previously unselected package libcc1-0:amd64. 2419s Preparing to unpack .../11-libcc1-0_14-20240303-1ubuntu1_amd64.deb ... 2419s Unpacking libcc1-0:amd64 (14-20240303-1ubuntu1) ... 2419s Selecting previously unselected package libgomp1:amd64. 2419s Preparing to unpack .../12-libgomp1_14-20240303-1ubuntu1_amd64.deb ... 2419s Unpacking libgomp1:amd64 (14-20240303-1ubuntu1) ... 2419s Selecting previously unselected package libitm1:amd64. 2419s Preparing to unpack .../13-libitm1_14-20240303-1ubuntu1_amd64.deb ... 2419s Unpacking libitm1:amd64 (14-20240303-1ubuntu1) ... 2419s Selecting previously unselected package libatomic1:amd64. 2419s Preparing to unpack .../14-libatomic1_14-20240303-1ubuntu1_amd64.deb ... 2419s Unpacking libatomic1:amd64 (14-20240303-1ubuntu1) ... 2419s Selecting previously unselected package libasan8:amd64. 2420s Preparing to unpack .../15-libasan8_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking libasan8:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package liblsan0:amd64. 2420s Preparing to unpack .../16-liblsan0_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking liblsan0:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package libtsan2:amd64. 2420s Preparing to unpack .../17-libtsan2_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking libtsan2:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package libubsan1:amd64. 2420s Preparing to unpack .../18-libubsan1_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking libubsan1:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package libhwasan0:amd64. 2420s Preparing to unpack .../19-libhwasan0_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking libhwasan0:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package libquadmath0:amd64. 2420s Preparing to unpack .../20-libquadmath0_14-20240303-1ubuntu1_amd64.deb ... 2420s Unpacking libquadmath0:amd64 (14-20240303-1ubuntu1) ... 2420s Selecting previously unselected package libgcc-13-dev:amd64. 2420s Preparing to unpack .../21-libgcc-13-dev_13.2.0-17ubuntu2_amd64.deb ... 2420s Unpacking libgcc-13-dev:amd64 (13.2.0-17ubuntu2) ... 2420s Selecting previously unselected package gcc-13-x86-64-linux-gnu. 2420s Preparing to unpack .../22-gcc-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 2420s Unpacking gcc-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2420s Selecting previously unselected package gcc-13. 2420s Preparing to unpack .../23-gcc-13_13.2.0-17ubuntu2_amd64.deb ... 2420s Unpacking gcc-13 (13.2.0-17ubuntu2) ... 2420s Selecting previously unselected package gcc-x86-64-linux-gnu. 2420s Preparing to unpack .../24-gcc-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 2420s Unpacking gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2420s Selecting previously unselected package gcc. 2420s Preparing to unpack .../25-gcc_4%3a13.2.0-7ubuntu1_amd64.deb ... 2420s Unpacking gcc (4:13.2.0-7ubuntu1) ... 2420s Selecting previously unselected package libstdc++-13-dev:amd64. 2420s Preparing to unpack .../26-libstdc++-13-dev_13.2.0-17ubuntu2_amd64.deb ... 2420s Unpacking libstdc++-13-dev:amd64 (13.2.0-17ubuntu2) ... 2421s Selecting previously unselected package g++-13-x86-64-linux-gnu. 2421s Preparing to unpack .../27-g++-13-x86-64-linux-gnu_13.2.0-17ubuntu2_amd64.deb ... 2421s Unpacking g++-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2421s Selecting previously unselected package g++-13. 2421s Preparing to unpack .../28-g++-13_13.2.0-17ubuntu2_amd64.deb ... 2421s Unpacking g++-13 (13.2.0-17ubuntu2) ... 2421s Selecting previously unselected package g++-x86-64-linux-gnu. 2421s Preparing to unpack .../29-g++-x86-64-linux-gnu_4%3a13.2.0-7ubuntu1_amd64.deb ... 2421s Unpacking g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2421s Selecting previously unselected package g++. 2421s Preparing to unpack .../30-g++_4%3a13.2.0-7ubuntu1_amd64.deb ... 2421s Unpacking g++ (4:13.2.0-7ubuntu1) ... 2421s Selecting previously unselected package build-essential. 2421s Preparing to unpack .../31-build-essential_12.10ubuntu1_amd64.deb ... 2421s Unpacking build-essential (12.10ubuntu1) ... 2421s Selecting previously unselected package autopkgtest-satdep. 2421s Preparing to unpack .../32-6-autopkgtest-satdep.deb ... 2421s Unpacking autopkgtest-satdep (0) ... 2421s Setting up linux-libc-dev:amd64 (6.8.0-11.11) ... 2421s Setting up libgomp1:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up rpcsvc-proto (1.4.2-0ubuntu6) ... 2421s Setting up libquadmath0:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libmpc3:amd64 (1.3.1-1) ... 2421s Setting up libatomic1:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libubsan1:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libhwasan0:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libcrypt-dev:amd64 (1:4.4.36-4) ... 2421s Setting up libasan8:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libtsan2:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libisl23:amd64 (0.26-3) ... 2421s Setting up libc-dev-bin (2.39-0ubuntu6) ... 2421s Setting up libcc1-0:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up liblsan0:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up libitm1:amd64 (14-20240303-1ubuntu1) ... 2421s Setting up cpp-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2421s Setting up libgcc-13-dev:amd64 (13.2.0-17ubuntu2) ... 2421s Setting up libc6-dev:amd64 (2.39-0ubuntu6) ... 2421s Setting up libstdc++-13-dev:amd64 (13.2.0-17ubuntu2) ... 2421s Setting up cpp-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2421s Setting up cpp-13 (13.2.0-17ubuntu2) ... 2421s Setting up gcc-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2421s Setting up gcc-13 (13.2.0-17ubuntu2) ... 2421s Setting up cpp (4:13.2.0-7ubuntu1) ... 2421s Setting up g++-13-x86-64-linux-gnu (13.2.0-17ubuntu2) ... 2421s Setting up gcc-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2421s Setting up gcc (4:13.2.0-7ubuntu1) ... 2421s Setting up g++-x86-64-linux-gnu (4:13.2.0-7ubuntu1) ... 2421s Setting up g++-13 (13.2.0-17ubuntu2) ... 2421s Setting up g++ (4:13.2.0-7ubuntu1) ... 2421s update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode 2421s Setting up build-essential (12.10ubuntu1) ... 2421s Setting up autopkgtest-satdep (0) ... 2421s Processing triggers for man-db (2.12.0-3) ... 2422s Processing triggers for libc-bin (2.39-0ubuntu6) ... 2423s (Reading database ... 84003 files and directories currently installed.) 2423s Removing autopkgtest-satdep (0) ... 2424s autopkgtest [08:19:13]: test spec-ffi: [----------------------- 2424s installing system gems into jruby: 2424s * diff-lcs-1.5.1 2424s * minitest-5.15.0 2424s * power_assert-2.0.1 2424s * rake-13.0.6 2424s * rexml-3.2.5 2424s * rspec-3.13.0 2424s * rspec-core-3.13.0 2424s * rspec-expectations-3.13.0 2424s * rspec-mocks-3.13.0 2424s * rspec-support-3.13.1 2424s * test-unit-3.5.3 2430s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-support-3.13.1/lib:/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/ffi/\*\*/\*_spec.rb 2433s "gmake CPU=x86_64 OS=linux" 2433s cc -m64 -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 2433s cc -m64 -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 2433s cc -m64 -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 2433s cc -m64 -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 2433s cc -m64 -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 2434s cc -m64 -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 2434s cc -m64 -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 2434s cc -m64 -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 2434s cc -m64 -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 2434s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2437s cc -m64 -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 2442s Run options: exclude {:broken=>true} 2446s ..*..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................*.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. 2446s 2446s Pending: (Failures listed here are expected and do not affect your suite's status) 2446s 2446s 1) async callback sets the name of the thread that runs the callback 2446s # not yet supported on JRuby 2446s # ./spec/ffi/async_callback_spec.rb:43 2446s 2446s 2) FFI::Function when called with a block creates a thread for dispatching callbacks and sets its name 2446s # this is MRI-specific 2446s # ./spec/ffi/function_spec.rb:25 2446s 2446s Finished in 4.05 seconds (files took 9.19 seconds to load) 2446s 4932 examples, 0 failures, 2 pending 2446s 2446s autopkgtest [08:19:35]: test spec-ffi: -----------------------] 2446s autopkgtest [08:19:35]: test spec-ffi: - - - - - - - - - - results - - - - - - - - - - 2446s spec-ffi PASS 2447s autopkgtest [08:19:36]: test spec-ji: preparing testbed 2908s autopkgtest [08:27:17]: testbed dpkg architecture: amd64 2908s autopkgtest [08:27:17]: testbed apt version: 2.7.12 2908s autopkgtest [08:27:17]: @@@@@@@@@@@@@@@@@@@@ test bed setup 2908s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 2909s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 2909s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 2909s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 2909s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 2909s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 2909s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 2909s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 2909s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 2909s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 2909s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 2909s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 2909s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 2909s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 2909s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 2909s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 2909s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 2912s Fetched 11.7 MB in 1s (7879 kB/s) 2912s Reading package lists... 2914s Reading package lists... 2914s Building dependency tree... 2914s Reading state information... 2914s Calculating upgrade... 2914s The following packages will be upgraded: 2914s psmisc 2914s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2914s Need to get 179 kB of archives. 2914s After this operation, 28.7 kB disk space will be freed. 2914s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 2915s Fetched 179 kB in 0s (10.3 MB/s) 2915s (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 ... 71864 files and directories currently installed.) 2915s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 2915s Unpacking psmisc (23.7-1) over (23.6-2) ... 2915s Setting up psmisc (23.7-1) ... 2915s Processing triggers for man-db (2.12.0-3) ... 2916s Reading package lists... 2916s Building dependency tree... 2916s Reading state information... 2917s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2917s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 2917s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 2917s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 2917s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 2918s Reading package lists... 2918s Reading package lists... 2919s Building dependency tree... 2919s Reading state information... 2919s Calculating upgrade... 2919s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2919s Reading package lists... 2919s Building dependency tree... 2919s Reading state information... 2920s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 2924s Reading package lists... 2925s Building dependency tree... 2925s Reading state information... 2925s Starting pkgProblemResolver with broken count: 0 2925s Starting 2 pkgProblemResolver with broken count: 0 2925s Done 2926s The following additional packages will be installed: 2926s ant ca-certificates-java default-jdk-headless default-jre-headless 2926s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 2926s junit4 libasm-java libasound2 libasound2-data libavahi-client3 2926s libavahi-common-data libavahi-common3 libbackport9-java libcups2 2926s libdirgra-java libfixposix4t64 libfontconfig1 libgmp-dev libgmpxx4ldbl 2926s libgraphite2-3 libhamcrest-java libharfbuzz0b libhawtjni-runtime-java 2926s libheadius-options-java libinvokebinder-java libjakarta-annotation-api-java 2926s libjansi-native-java libjansi1-java libjarjar-java libjcodings-java 2926s libjffi-java libjffi-jni libjitescript-java libjline2-java 2926s libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java 2926s libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java 2926s libjoda-time-java libjpeg-turbo8 libjpeg8 libjruby-joni-java libjzlib-java 2926s liblcms2-2 libpcsclite1 libruby libruby3.1 libruby3.2 2926s libsnakeyaml-engine-java openjdk-21-jdk-headless openjdk-21-jre-headless 2926s rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec 2926s ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support 2926s ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 2926s ruby3.2-dev rubygems-integration zip 2926s Suggested packages: 2926s ant-doc default-jre libasound2-plugins alsa-utils cups-common gmp-doc 2926s libgmp10-doc libmpfr-dev libheadius-options-java-doc 2926s libinvokebinder-java-doc libjnr-ffi-java-doc libjnr-netdb-java-doc 2926s libjnr-posix-java-doc libjoda-convert-java liblcms2-utils pcscd 2926s openjdk-21-demo openjdk-21-source libnss-mdns fonts-dejavu-extra 2926s fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei 2926s | fonts-wqy-zenhei fonts-indic ri ruby-dev bundler 2926s Recommended packages: 2926s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf libjs-jquery 2926s ruby3.1-doc ruby3.2-doc unzip 2926s The following NEW packages will be installed: 2926s ant autopkgtest-satdep ca-certificates-java default-jdk-headless 2926s default-jre-headless fontconfig-config fonts-dejavu-core fonts-dejavu-mono 2926s java-common jruby junit4 libasm-java libasound2 libasound2-data 2926s libavahi-client3 libavahi-common-data libavahi-common3 libbackport9-java 2926s libcups2 libdirgra-java libfixposix4t64 libfontconfig1 libgmp-dev 2926s libgmpxx4ldbl libgraphite2-3 libhamcrest-java libharfbuzz0b 2926s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 2926s libjakarta-annotation-api-java libjansi-native-java libjansi1-java 2926s libjarjar-java libjcodings-java libjffi-java libjffi-jni libjitescript-java 2926s libjline2-java libjnr-constants-java libjnr-enxio-java libjnr-ffi-java 2926s libjnr-netdb-java libjnr-posix-java libjnr-unixsocket-java 2926s libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 libjpeg8 2926s libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby libruby3.1 2926s libruby3.2 libsnakeyaml-engine-java openjdk-21-jdk-headless 2926s openjdk-21-jre-headless rake ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet 2926s ruby-rspec ruby-rspec-core ruby-rspec-expectations ruby-rspec-mocks 2926s ruby-rspec-support ruby-rubygems ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 2926s ruby3.1-dev ruby3.2 ruby3.2-dev rubygems-integration zip 2926s 0 upgraded, 79 newly installed, 0 to remove and 0 not upgraded. 2926s Need to get 187 MB/187 MB of archives. 2926s After this operation, 431 MB of additional disk space will be used. 2926s Get:1 /tmp/autopkgtest.mg4W0U/7-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [812 B] 2926s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 2926s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 2926s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 2926s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 2926s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 2926s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 2926s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 2926s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 2926s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 2926s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 2926s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 2926s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 2926s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 2926s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 2926s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 2926s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 2926s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 2926s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 2926s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 2927s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 2927s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 ant all 1.10.14-1 [2147 kB] 2927s Get:23 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jdk-headless amd64 21.0.2+13-2 [82.5 MB] 2928s Get:24 http://ftpmaster.internal/ubuntu noble/main amd64 default-jdk-headless amd64 2:1.21-75+exp1 [960 B] 2928s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 2928s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 2928s Get:27 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 2928s Get:28 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 2928s Get:29 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 2928s Get:30 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 2928s Get:31 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 2928s Get:32 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 2928s Get:33 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 2928s Get:34 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 2928s Get:35 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 2928s Get:36 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 2928s Get:37 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 2928s Get:38 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 2928s Get:39 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 2928s Get:40 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 2928s Get:41 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 2928s Get:42 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 2928s Get:43 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 2928s Get:44 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 2928s Get:45 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 2928s Get:46 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 2928s Get:47 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 2928s Get:48 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 2928s Get:49 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 2928s Get:50 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 2928s Get:51 http://ftpmaster.internal/ubuntu noble/universe amd64 libhamcrest-java all 2.2-2 [117 kB] 2928s Get:52 http://ftpmaster.internal/ubuntu noble/universe amd64 junit4 all 4.13.2-4 [347 kB] 2928s Get:53 http://ftpmaster.internal/ubuntu noble/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2ubuntu4 [9956 B] 2928s Get:54 http://ftpmaster.internal/ubuntu noble/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2ubuntu4 [342 kB] 2928s Get:55 http://ftpmaster.internal/ubuntu noble/universe amd64 libjakarta-annotation-api-java all 2.1.1-1 [30.1 kB] 2928s Get:56 http://ftpmaster.internal/ubuntu noble/universe amd64 libjarjar-java all 1.4+svn142-12 [201 kB] 2928s Get:57 http://ftpmaster.internal/ubuntu noble/main amd64 rubygems-integration all 1.18 [5336 B] 2928s Get:58 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1 amd64 3.1.2-7ubuntu4 [48.9 kB] 2928s Get:59 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-rubygems all 3.4.20-1 [238 kB] 2928s Get:60 http://ftpmaster.internal/ubuntu noble/main amd64 ruby amd64 1:3.1+1 [3466 B] 2928s Get:61 http://ftpmaster.internal/ubuntu noble/main amd64 rake all 13.0.6-3 [61.6 kB] 2928s Get:62 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 2928s Get:63 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-webrick all 1.8.1-1 [52.3 kB] 2928s Get:64 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 2928s Get:65 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.2 amd64 3.2.3-1 [5339 kB] 2928s Get:66 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-sdbm amd64 1.0.0-5build3 [18.6 kB] 2928s Get:67 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.1 amd64 3.1.2-7ubuntu4 [5164 kB] 2928s Get:68 http://ftpmaster.internal/ubuntu noble/main amd64 libruby amd64 1:3.1+1 [4640 B] 2928s Get:69 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1-dev amd64 3.1.2-7ubuntu4 [394 kB] 2928s Get:70 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2 amd64 3.2.3-1 [50.7 kB] 2928s Get:71 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2-dev amd64 3.2.3-1 [399 kB] 2928s Get:72 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-all-dev amd64 1:3.1+1 [5732 B] 2928s Get:73 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 2928s Get:74 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 2928s Get:75 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 2928s Get:76 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 2928s Get:77 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 2928s Get:78 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 2928s Get:79 http://ftpmaster.internal/ubuntu noble/main amd64 zip amd64 3.0-13 [176 kB] 2929s Fetched 187 MB in 3s (74.4 MB/s) 2929s Selecting previously unselected package ca-certificates-java. 2929s (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 ... 71861 files and directories currently installed.) 2929s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 2929s Unpacking ca-certificates-java (20240118) ... 2929s Selecting previously unselected package java-common. 2929s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 2929s Unpacking java-common (0.75+exp1) ... 2929s Selecting previously unselected package libavahi-common-data:amd64. 2929s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 2929s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 2929s Selecting previously unselected package libavahi-common3:amd64. 2929s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 2929s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 2929s Selecting previously unselected package libavahi-client3:amd64. 2929s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 2929s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 2929s Selecting previously unselected package libcups2:amd64. 2929s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_amd64.deb ... 2929s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 2929s Selecting previously unselected package liblcms2-2:amd64. 2929s Preparing to unpack .../06-liblcms2-2_2.14-2_amd64.deb ... 2929s Unpacking liblcms2-2:amd64 (2.14-2) ... 2929s Selecting previously unselected package libjpeg-turbo8:amd64. 2929s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 2929s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 2929s Selecting previously unselected package libjpeg8:amd64. 2929s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_amd64.deb ... 2929s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 2929s Selecting previously unselected package fonts-dejavu-mono. 2929s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 2929s Unpacking fonts-dejavu-mono (2.37-8) ... 2929s Selecting previously unselected package fonts-dejavu-core. 2929s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 2929s Unpacking fonts-dejavu-core (2.37-8) ... 2929s Selecting previously unselected package fontconfig-config. 2929s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 2929s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 2929s Selecting previously unselected package libfontconfig1:amd64. 2929s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 2929s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 2929s Selecting previously unselected package libasound2-data. 2929s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 2929s Unpacking libasound2-data (1.2.10-3build1) ... 2929s Selecting previously unselected package libasound2:amd64. 2929s Preparing to unpack .../14-libasound2_1.2.10-3build1_amd64.deb ... 2929s Unpacking libasound2:amd64 (1.2.10-3build1) ... 2929s Selecting previously unselected package libgraphite2-3:amd64. 2929s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_amd64.deb ... 2929s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 2929s Selecting previously unselected package libharfbuzz0b:amd64. 2929s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_amd64.deb ... 2929s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 2929s Selecting previously unselected package libpcsclite1:amd64. 2929s Preparing to unpack .../17-libpcsclite1_2.0.0-1_amd64.deb ... 2929s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 2929s Selecting previously unselected package openjdk-21-jre-headless:amd64. 2929s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 2929s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 2930s Selecting previously unselected package default-jre-headless. 2930s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 2930s Unpacking default-jre-headless (2:1.21-75+exp1) ... 2930s Selecting previously unselected package ant. 2930s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 2930s Unpacking ant (1.10.14-1) ... 2930s Selecting previously unselected package openjdk-21-jdk-headless:amd64. 2930s Preparing to unpack .../21-openjdk-21-jdk-headless_21.0.2+13-2_amd64.deb ... 2930s Unpacking openjdk-21-jdk-headless:amd64 (21.0.2+13-2) ... 2931s Selecting previously unselected package default-jdk-headless. 2931s Preparing to unpack .../22-default-jdk-headless_2%3a1.21-75+exp1_amd64.deb ... 2931s Unpacking default-jdk-headless (2:1.21-75+exp1) ... 2931s Selecting previously unselected package libasm-java. 2931s Preparing to unpack .../23-libasm-java_9.6~us1-0ubuntu1_all.deb ... 2931s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 2931s Selecting previously unselected package libbackport9-java. 2931s Preparing to unpack .../24-libbackport9-java_1.10-2_all.deb ... 2931s Unpacking libbackport9-java (1.10-2) ... 2931s Selecting previously unselected package libdirgra-java. 2931s Preparing to unpack .../25-libdirgra-java_0.4-2_all.deb ... 2931s Unpacking libdirgra-java (0.4-2) ... 2931s Selecting previously unselected package libfixposix4t64:amd64. 2931s Preparing to unpack .../26-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 2931s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 2931s Selecting previously unselected package libheadius-options-java. 2931s Preparing to unpack .../27-libheadius-options-java_1.7-1_all.deb ... 2931s Unpacking libheadius-options-java (1.7-1) ... 2931s Selecting previously unselected package libinvokebinder-java. 2931s Preparing to unpack .../28-libinvokebinder-java_1.13-1_all.deb ... 2931s Unpacking libinvokebinder-java (1.13-1) ... 2931s Selecting previously unselected package libhawtjni-runtime-java. 2931s Preparing to unpack .../29-libhawtjni-runtime-java_1.18-1_all.deb ... 2931s Unpacking libhawtjni-runtime-java (1.18-1) ... 2931s Selecting previously unselected package libjansi-native-java. 2931s Preparing to unpack .../30-libjansi-native-java_1.8-2_all.deb ... 2931s Unpacking libjansi-native-java (1.8-2) ... 2931s Selecting previously unselected package libjansi1-java. 2931s Preparing to unpack .../31-libjansi1-java_1.18-3ubuntu1_all.deb ... 2931s Unpacking libjansi1-java (1.18-3ubuntu1) ... 2931s Selecting previously unselected package libjcodings-java. 2931s Preparing to unpack .../32-libjcodings-java_1.0.58-1_all.deb ... 2931s Unpacking libjcodings-java (1.0.58-1) ... 2931s Selecting previously unselected package libjffi-jni:amd64. 2931s Preparing to unpack .../33-libjffi-jni_1.3.13+ds-1_amd64.deb ... 2931s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 2931s Selecting previously unselected package libjffi-java. 2931s Preparing to unpack .../34-libjffi-java_1.3.13+ds-1_all.deb ... 2931s Unpacking libjffi-java (1.3.13+ds-1) ... 2931s Selecting previously unselected package libjitescript-java. 2931s Preparing to unpack .../35-libjitescript-java_0.4.3-1_all.deb ... 2931s Unpacking libjitescript-java (0.4.3-1) ... 2931s Selecting previously unselected package libjline2-java. 2931s Preparing to unpack .../36-libjline2-java_2.14.6-5_all.deb ... 2931s Unpacking libjline2-java (2.14.6-5) ... 2931s Selecting previously unselected package libjnr-constants-java. 2931s Preparing to unpack .../37-libjnr-constants-java_0.10.4-2_all.deb ... 2931s Unpacking libjnr-constants-java (0.10.4-2) ... 2931s Selecting previously unselected package libjnr-x86asm-java. 2931s Preparing to unpack .../38-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 2931s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 2931s Selecting previously unselected package libjnr-ffi-java. 2931s Preparing to unpack .../39-libjnr-ffi-java_2.2.15-2_all.deb ... 2931s Unpacking libjnr-ffi-java (2.2.15-2) ... 2931s Selecting previously unselected package libjnr-enxio-java. 2931s Preparing to unpack .../40-libjnr-enxio-java_0.32.16-1_all.deb ... 2931s Unpacking libjnr-enxio-java (0.32.16-1) ... 2931s Selecting previously unselected package libjnr-netdb-java. 2931s Preparing to unpack .../41-libjnr-netdb-java_1.1.6-1.1_all.deb ... 2931s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 2931s Selecting previously unselected package libjnr-posix-java. 2931s Preparing to unpack .../42-libjnr-posix-java_3.1.18-1_all.deb ... 2931s Unpacking libjnr-posix-java (3.1.18-1) ... 2931s Selecting previously unselected package libjnr-unixsocket-java. 2931s Preparing to unpack .../43-libjnr-unixsocket-java_0.38.21-2_all.deb ... 2931s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 2931s Selecting previously unselected package libjoda-time-java. 2931s Preparing to unpack .../44-libjoda-time-java_2.10.14-1_all.deb ... 2931s Unpacking libjoda-time-java (2.10.14-1) ... 2931s Selecting previously unselected package libjruby-joni-java. 2931s Preparing to unpack .../45-libjruby-joni-java_2.2.1-1_all.deb ... 2931s Unpacking libjruby-joni-java (2.2.1-1) ... 2931s Selecting previously unselected package libjzlib-java. 2931s Preparing to unpack .../46-libjzlib-java_1.1.3-3_all.deb ... 2931s Unpacking libjzlib-java (1.1.3-3) ... 2931s Selecting previously unselected package libsnakeyaml-engine-java. 2931s Preparing to unpack .../47-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 2931s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 2931s Selecting previously unselected package jruby. 2931s Preparing to unpack .../48-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 2931s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 2932s Selecting previously unselected package libhamcrest-java. 2932s Preparing to unpack .../49-libhamcrest-java_2.2-2_all.deb ... 2932s Unpacking libhamcrest-java (2.2-2) ... 2932s Selecting previously unselected package junit4. 2932s Preparing to unpack .../50-junit4_4.13.2-4_all.deb ... 2932s Unpacking junit4 (4.13.2-4) ... 2932s Selecting previously unselected package libgmpxx4ldbl:amd64. 2932s Preparing to unpack .../51-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 2932s Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2932s Selecting previously unselected package libgmp-dev:amd64. 2932s Preparing to unpack .../52-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 2932s Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2932s Selecting previously unselected package libjakarta-annotation-api-java. 2932s Preparing to unpack .../53-libjakarta-annotation-api-java_2.1.1-1_all.deb ... 2932s Unpacking libjakarta-annotation-api-java (2.1.1-1) ... 2932s Selecting previously unselected package libjarjar-java. 2932s Preparing to unpack .../54-libjarjar-java_1.4+svn142-12_all.deb ... 2932s Unpacking libjarjar-java (1.4+svn142-12) ... 2932s Selecting previously unselected package rubygems-integration. 2932s Preparing to unpack .../55-rubygems-integration_1.18_all.deb ... 2932s Unpacking rubygems-integration (1.18) ... 2932s Selecting previously unselected package ruby3.1. 2932s Preparing to unpack .../56-ruby3.1_3.1.2-7ubuntu4_amd64.deb ... 2932s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 2932s Selecting previously unselected package ruby-rubygems. 2932s Preparing to unpack .../57-ruby-rubygems_3.4.20-1_all.deb ... 2932s Unpacking ruby-rubygems (3.4.20-1) ... 2932s Selecting previously unselected package ruby. 2932s Preparing to unpack .../58-ruby_1%3a3.1+1_amd64.deb ... 2932s Unpacking ruby (1:3.1+1) ... 2932s Selecting previously unselected package rake. 2932s Preparing to unpack .../59-rake_13.0.6-3_all.deb ... 2932s Unpacking rake (13.0.6-3) ... 2932s Selecting previously unselected package ruby-net-telnet. 2932s Preparing to unpack .../60-ruby-net-telnet_0.2.0-1_all.deb ... 2932s Unpacking ruby-net-telnet (0.2.0-1) ... 2932s Selecting previously unselected package ruby-webrick. 2932s Preparing to unpack .../61-ruby-webrick_1.8.1-1_all.deb ... 2932s Unpacking ruby-webrick (1.8.1-1) ... 2932s Selecting previously unselected package ruby-xmlrpc. 2932s Preparing to unpack .../62-ruby-xmlrpc_0.3.2-2_all.deb ... 2932s Unpacking ruby-xmlrpc (0.3.2-2) ... 2932s Selecting previously unselected package libruby3.2:amd64. 2932s Preparing to unpack .../63-libruby3.2_3.2.3-1_amd64.deb ... 2932s Unpacking libruby3.2:amd64 (3.2.3-1) ... 2933s Selecting previously unselected package ruby-sdbm:amd64. 2933s Preparing to unpack .../64-ruby-sdbm_1.0.0-5build3_amd64.deb ... 2933s Unpacking ruby-sdbm:amd64 (1.0.0-5build3) ... 2933s Selecting previously unselected package libruby3.1:amd64. 2933s Preparing to unpack .../65-libruby3.1_3.1.2-7ubuntu4_amd64.deb ... 2933s Unpacking libruby3.1:amd64 (3.1.2-7ubuntu4) ... 2933s Selecting previously unselected package libruby:amd64. 2933s Preparing to unpack .../66-libruby_1%3a3.1+1_amd64.deb ... 2933s Unpacking libruby:amd64 (1:3.1+1) ... 2933s Selecting previously unselected package ruby3.1-dev:amd64. 2933s Preparing to unpack .../67-ruby3.1-dev_3.1.2-7ubuntu4_amd64.deb ... 2933s Unpacking ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 2933s Selecting previously unselected package ruby3.2. 2933s Preparing to unpack .../68-ruby3.2_3.2.3-1_amd64.deb ... 2933s Unpacking ruby3.2 (3.2.3-1) ... 2933s Selecting previously unselected package ruby3.2-dev:amd64. 2933s Preparing to unpack .../69-ruby3.2-dev_3.2.3-1_amd64.deb ... 2933s Unpacking ruby3.2-dev:amd64 (3.2.3-1) ... 2933s Selecting previously unselected package ruby-all-dev:amd64. 2933s Preparing to unpack .../70-ruby-all-dev_1%3a3.1+1_amd64.deb ... 2933s Unpacking ruby-all-dev:amd64 (1:3.1+1) ... 2933s Selecting previously unselected package ruby-diff-lcs. 2933s Preparing to unpack .../71-ruby-diff-lcs_1.5.1-1_all.deb ... 2933s Unpacking ruby-diff-lcs (1.5.1-1) ... 2933s Selecting previously unselected package ruby-rspec-support. 2933s Preparing to unpack .../72-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 2933s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 2933s Selecting previously unselected package ruby-rspec-core. 2933s Preparing to unpack .../73-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 2933s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 2933s Selecting previously unselected package ruby-rspec-expectations. 2933s Preparing to unpack .../74-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 2933s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 2933s Selecting previously unselected package ruby-rspec-mocks. 2933s Preparing to unpack .../75-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 2933s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 2933s Selecting previously unselected package ruby-rspec. 2933s Preparing to unpack .../76-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 2933s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 2933s Selecting previously unselected package zip. 2933s Preparing to unpack .../77-zip_3.0-13_amd64.deb ... 2933s Unpacking zip (3.0-13) ... 2934s Selecting previously unselected package autopkgtest-satdep. 2934s Preparing to unpack .../78-7-autopkgtest-satdep.deb ... 2934s Unpacking autopkgtest-satdep (0) ... 2934s Setting up libjakarta-annotation-api-java (2.1.1-1) ... 2934s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 2934s Setting up liblcms2-2:amd64 (2.14-2) ... 2934s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 2934s Setting up java-common (0.75+exp1) ... 2934s Setting up libasm-java (9.6~us1-0ubuntu1) ... 2934s Setting up rubygems-integration (1.18) ... 2934s Setting up libheadius-options-java (1.7-1) ... 2934s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 2934s Setting up libjzlib-java (1.1.3-3) ... 2934s Setting up libbackport9-java (1.10-2) ... 2934s Setting up libasound2-data (1.2.10-3build1) ... 2934s Setting up libjitescript-java (0.4.3-1) ... 2934s Setting up zip (3.0-13) ... 2934s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 2934s Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2934s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 2934s Setting up ruby-net-telnet (0.2.0-1) ... 2934s Setting up fonts-dejavu-mono (2.37-8) ... 2934s Setting up fonts-dejavu-core (2.37-8) ... 2934s Setting up libpcsclite1:amd64 (2.0.0-1) ... 2934s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 2934s Setting up libhamcrest-java (2.2-2) ... 2934s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 2934s Setting up libjoda-time-java (2.10.14-1) ... 2934s Setting up libjcodings-java (1.0.58-1) ... 2934s Setting up ruby-webrick (1.8.1-1) ... 2934s Setting up libjarjar-java (1.4+svn142-12) ... 2934s Setting up libasound2:amd64 (1.2.10-3build1) ... 2934s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 2934s Setting up libinvokebinder-java (1.13-1) ... 2934s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 2934s Setting up ca-certificates-java (20240118) ... 2934s No JRE found. Skipping Java certificates setup. 2934s Setting up ruby-xmlrpc (0.3.2-2) ... 2934s Setting up libhawtjni-runtime-java (1.18-1) ... 2934s Setting up libdirgra-java (0.4-2) ... 2934s Setting up libjnr-constants-java (0.10.4-2) ... 2934s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 2934s Setting up libjffi-java (1.3.13+ds-1) ... 2934s Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 2934s Setting up libjruby-joni-java (2.2.1-1) ... 2934s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 2934s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 2934s Setting up libjansi-native-java (1.8-2) ... 2934s Setting up libjansi1-java (1.18-3ubuntu1) ... 2934s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 2934s Setting up libjline2-java (2.14.6-5) ... 2934s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 2934s Setting up libjnr-ffi-java (2.2.15-2) ... 2934s Setting up libjnr-enxio-java (0.32.16-1) ... 2934s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 2934s Setting up libjnr-netdb-java (1.1.6-1.1) ... 2934s Setting up libjnr-posix-java (3.1.18-1) ... 2934s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 2934s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 2934s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 2934s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 2934s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 2934s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 2934s Setting up libjnr-unixsocket-java (0.38.21-2) ... 2934s Setting up rake (13.0.6-3) ... 2934s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 2934s Setting up libruby:amd64 (1:3.1+1) ... 2934s Setting up libruby3.2:amd64 (3.2.3-1) ... 2934s Setting up ruby (1:3.1+1) ... 2934s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 2934s Setting up ruby3.2 (3.2.3-1) ... 2934s Setting up ruby3.2-dev:amd64 (3.2.3-1) ... 2934s Setting up ruby-sdbm:amd64 (1.0.0-5build3) ... 2934s Setting up ruby-diff-lcs (1.5.1-1) ... 2934s Setting up libruby3.1:amd64 (3.1.2-7ubuntu4) ... 2934s Setting up ruby-rubygems (3.4.20-1) ... 2934s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 2934s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 2934s Setting up ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 2934s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 2934s Setting up ruby-all-dev:amd64 (1:3.1+1) ... 2934s Processing triggers for libc-bin (2.39-0ubuntu6) ... 2934s Processing triggers for man-db (2.12.0-3) ... 2935s Processing triggers for ca-certificates-java (20240118) ... 2935s Adding debian:ACCVRAIZ1.pem 2935s Adding debian:AC_RAIZ_FNMT-RCM.pem 2935s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 2935s Adding debian:ANF_Secure_Server_Root_CA.pem 2935s Adding debian:Actalis_Authentication_Root_CA.pem 2935s Adding debian:AffirmTrust_Commercial.pem 2935s Adding debian:AffirmTrust_Networking.pem 2935s Adding debian:AffirmTrust_Premium.pem 2935s Adding debian:AffirmTrust_Premium_ECC.pem 2935s Adding debian:Amazon_Root_CA_1.pem 2935s Adding debian:Amazon_Root_CA_2.pem 2935s Adding debian:Amazon_Root_CA_3.pem 2935s Adding debian:Amazon_Root_CA_4.pem 2935s Adding debian:Atos_TrustedRoot_2011.pem 2935s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 2935s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 2935s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 2935s Adding debian:BJCA_Global_Root_CA1.pem 2935s Adding debian:BJCA_Global_Root_CA2.pem 2935s Adding debian:Baltimore_CyberTrust_Root.pem 2935s Adding debian:Buypass_Class_2_Root_CA.pem 2935s Adding debian:Buypass_Class_3_Root_CA.pem 2935s Adding debian:CA_Disig_Root_R2.pem 2935s Adding debian:CFCA_EV_ROOT.pem 2935s Adding debian:COMODO_Certification_Authority.pem 2935s Adding debian:COMODO_ECC_Certification_Authority.pem 2935s Adding debian:COMODO_RSA_Certification_Authority.pem 2935s Adding debian:Certainly_Root_E1.pem 2935s Adding debian:Certainly_Root_R1.pem 2935s Adding debian:Certigna.pem 2935s Adding debian:Certigna_Root_CA.pem 2935s Adding debian:Certum_EC-384_CA.pem 2935s Adding debian:Certum_Trusted_Network_CA.pem 2935s Adding debian:Certum_Trusted_Network_CA_2.pem 2935s Adding debian:Certum_Trusted_Root_CA.pem 2935s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 2935s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 2935s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 2935s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 2935s Adding debian:Comodo_AAA_Services_root.pem 2935s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 2935s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 2935s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 2935s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 2935s Adding debian:DigiCert_Assured_ID_Root_CA.pem 2935s Adding debian:DigiCert_Assured_ID_Root_G2.pem 2935s Adding debian:DigiCert_Assured_ID_Root_G3.pem 2935s Adding debian:DigiCert_Global_Root_CA.pem 2935s Adding debian:DigiCert_Global_Root_G2.pem 2935s Adding debian:DigiCert_Global_Root_G3.pem 2935s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 2935s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 2935s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 2935s Adding debian:DigiCert_Trusted_Root_G4.pem 2935s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 2935s Adding debian:Entrust_Root_Certification_Authority.pem 2935s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 2935s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 2935s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 2935s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 2935s Adding debian:GLOBALTRUST_2020.pem 2935s Adding debian:GTS_Root_R1.pem 2935s Adding debian:GTS_Root_R2.pem 2935s Adding debian:GTS_Root_R3.pem 2935s Adding debian:GTS_Root_R4.pem 2935s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 2935s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 2935s Adding debian:GlobalSign_Root_CA.pem 2935s Adding debian:GlobalSign_Root_CA_-_R3.pem 2935s Adding debian:GlobalSign_Root_CA_-_R6.pem 2935s Adding debian:GlobalSign_Root_E46.pem 2935s Adding debian:GlobalSign_Root_R46.pem 2935s Adding debian:Go_Daddy_Class_2_CA.pem 2935s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 2935s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 2935s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 2935s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 2935s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 2935s Adding debian:HiPKI_Root_CA_-_G1.pem 2935s Adding debian:Hongkong_Post_Root_CA_3.pem 2935s Adding debian:ISRG_Root_X1.pem 2935s Adding debian:ISRG_Root_X2.pem 2935s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 2935s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 2935s Adding debian:Izenpe.com.pem 2935s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 2935s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 2935s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 2935s Adding debian:NAVER_Global_Root_Certification_Authority.pem 2935s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 2935s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 2935s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 2935s Adding debian:QuoVadis_Root_CA_1_G3.pem 2935s Adding debian:QuoVadis_Root_CA_2.pem 2935s Adding debian:QuoVadis_Root_CA_2_G3.pem 2935s Adding debian:QuoVadis_Root_CA_3.pem 2935s Adding debian:QuoVadis_Root_CA_3_G3.pem 2935s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 2935s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 2935s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 2935s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 2935s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 2935s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 2935s Adding debian:SZAFIR_ROOT_CA2.pem 2935s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 2935s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 2935s Adding debian:SecureSign_RootCA11.pem 2935s Adding debian:SecureTrust_CA.pem 2935s Adding debian:Secure_Global_CA.pem 2935s Adding debian:Security_Communication_ECC_RootCA1.pem 2935s Adding debian:Security_Communication_RootCA2.pem 2935s Adding debian:Security_Communication_RootCA3.pem 2935s Adding debian:Security_Communication_Root_CA.pem 2935s Adding debian:Starfield_Class_2_CA.pem 2935s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 2935s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 2935s Adding debian:SwissSign_Gold_CA_-_G2.pem 2935s Adding debian:SwissSign_Silver_CA_-_G2.pem 2935s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 2935s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 2935s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 2935s Adding debian:TWCA_Global_Root_CA.pem 2935s Adding debian:TWCA_Root_Certification_Authority.pem 2935s Adding debian:TeliaSonera_Root_CA_v1.pem 2935s Adding debian:Telia_Root_CA_v2.pem 2935s Adding debian:TrustAsia_Global_Root_CA_G3.pem 2935s Adding debian:TrustAsia_Global_Root_CA_G4.pem 2935s Adding debian:Trustwave_Global_Certification_Authority.pem 2935s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 2935s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 2935s Adding debian:TunTrust_Root_CA.pem 2935s Adding debian:UCA_Extended_Validation_Root.pem 2935s Adding debian:UCA_Global_G2_Root.pem 2935s Adding debian:USERTrust_ECC_Certification_Authority.pem 2935s Adding debian:USERTrust_RSA_Certification_Authority.pem 2935s Adding debian:XRamp_Global_CA_Root.pem 2935s Adding debian:certSIGN_ROOT_CA.pem 2935s Adding debian:certSIGN_Root_CA_G2.pem 2935s Adding debian:e-Szigno_Root_CA_2017.pem 2935s Adding debian:ePKI_Root_Certification_Authority.pem 2935s Adding debian:emSign_ECC_Root_CA_-_C3.pem 2935s Adding debian:emSign_ECC_Root_CA_-_G3.pem 2935s Adding debian:emSign_Root_CA_-_C1.pem 2935s Adding debian:emSign_Root_CA_-_G1.pem 2935s Adding debian:vTrus_ECC_Root_CA.pem 2935s Adding debian:vTrus_Root_CA.pem 2936s done. 2936s Setting up ant (1.10.14-1) ... 2936s Setting up junit4 (4.13.2-4) ... 2936s Setting up openjdk-21-jdk-headless:amd64 (21.0.2+13-2) ... 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jar to provide /usr/bin/jar (jar) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jarsigner to provide /usr/bin/jarsigner (jarsigner) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc to provide /usr/bin/javadoc (javadoc) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/javap to provide /usr/bin/javap (javap) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jcmd to provide /usr/bin/jcmd (jcmd) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdb to provide /usr/bin/jdb (jdb) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeprscan to provide /usr/bin/jdeprscan (jdeprscan) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jdeps to provide /usr/bin/jdeps (jdeps) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jfr to provide /usr/bin/jfr (jfr) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jimage to provide /usr/bin/jimage (jimage) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jinfo to provide /usr/bin/jinfo (jinfo) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jlink to provide /usr/bin/jlink (jlink) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmap to provide /usr/bin/jmap (jmap) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jmod to provide /usr/bin/jmod (jmod) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jps to provide /usr/bin/jps (jps) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jrunscript to provide /usr/bin/jrunscript (jrunscript) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jshell to provide /usr/bin/jshell (jshell) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstack to provide /usr/bin/jstack (jstack) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstat to provide /usr/bin/jstat (jstat) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jstatd to provide /usr/bin/jstatd (jstatd) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jwebserver to provide /usr/bin/jwebserver (jwebserver) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/serialver to provide /usr/bin/serialver (serialver) in auto mode 2936s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jhsdb to provide /usr/bin/jhsdb (jhsdb) in auto mode 2936s Setting up default-jre-headless (2:1.21-75+exp1) ... 2936s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 2936s Setting up default-jdk-headless (2:1.21-75+exp1) ... 2936s Setting up autopkgtest-satdep (0) ... 2940s (Reading database ... 81344 files and directories currently installed.) 2940s Removing autopkgtest-satdep (0) ... 2951s autopkgtest [08:28:00]: test spec-ji: [----------------------- 2951s installing system gems into jruby: 2951s * diff-lcs-1.5.1 2951s * minitest-5.15.0 2951s * power_assert-2.0.1 2951s * rake-13.0.6 2951s * rexml-3.2.5 2951s * rspec-3.13.0 2951s * rspec-core-3.13.0 2951s * rspec-expectations-3.13.0 2952s * rspec-mocks-3.13.0 2952s * rspec-support-3.13.1 2952s * test-unit-3.5.3 2952s Note: test/DefaultPackageClass.java uses unchecked or unsafe operations. 2952s Note: Recompile with -Xlint:unchecked for details. 2958s mkdir -p test/target/test-classes 2958s mkdir -p test/target/test-classes-isolated/java_integration/fixtures/isolated 2958s mkdir -p test/target/test-interfaces-isolated/java_integration/fixtures/isolated 2958s /usr/lib/jvm/java-21-openjdk-amd64/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 2960s Note: Some input files use unchecked or unsafe operations. 2960s Note: Recompile with -Xlint:unchecked for details. 2960s mv -f test/target/test-classes/java_integration/fixtures/isolated/classes test/target/test-classes-isolated/java_integration/fixtures/isolated 2960s mv -f test/target/test-classes/java_integration/fixtures/isolated/interfaces test/target/test-interfaces-isolated/java_integration/fixtures/isolated 2960s /usr/share/jruby/bin/jruby -I/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rake-13.0.6/lib -J-cp test/target/annotation-api.jar -I/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-support-3.13.1/lib:/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/java_integration/\*\*/\*_spec.rb --options spec/java_integration/spec.quiet.opts 2967s /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2138: warning: regular expression has ']' without escape 2967s /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2138: warning: regular expression has ']' without escape 2970s .................................................................*.....................................=== called: # 2970s ..........warning: thread "Ruby-0-Thread-1: /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/java_integration/exceptions/thread_spec.rb:5" terminated with exception (report_on_exception is true): 2970s java.lang.NullPointerException 2970s at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) 2970s at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) 2970s at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) 2970s at org.jruby.dist/org.jruby.javasupport.JavaConstructor.newInstanceDirect(JavaConstructor.java:149) 2970s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:72) 2970s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:156) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:461) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:210) 2970s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$InitializeMethod.call(ConcreteJavaProxy.java:89) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 2970s at org.jruby.dist/org.jruby.RubyClass.newInstance(RubyClass.java:915) 2970s at org.jruby.dist/org.jruby.RubyClass$INVOKER$i$newInstance.call(RubyClass$INVOKER$i$newInstance.gen) 2970s at org.jruby.dist/org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:333) 2970s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$NewMethod.call(ConcreteJavaProxy.java:183) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:456) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:195) 2970s at org.jruby.dist/org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346) 2970s at org.jruby.dist/org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66) 2970s at org.jruby.dist/org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:118) 2970s at org.jruby.dist/org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136) 2970s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:66) 2970s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:58) 2970s at org.jruby.dist/org.jruby.runtime.Block.call(Block.java:144) 2970s at org.jruby.dist/org.jruby.RubyProc.call(RubyProc.java:352) 2970s at org.jruby.dist/org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:111) 2970s at java.base/java.lang.Thread.run(Thread.java:1583) 2970s .warning: thread "Ruby-0-Thread-2: /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/java_integration/exceptions/thread_spec.rb:15" terminated with exception (report_on_exception is true): 2970s java.lang.NullPointerException 2970s at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) 2970s at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) 2970s at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) 2970s at org.jruby.dist/org.jruby.javasupport.JavaConstructor.newInstanceDirect(JavaConstructor.java:149) 2970s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:72) 2970s at org.jruby.dist/org.jruby.java.invokers.ConstructorInvoker.call(ConstructorInvoker.java:156) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 2970s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$InitializeMethod.call(ConcreteJavaProxy.java:89) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:208) 2970s at org.jruby.dist/org.jruby.RubyClass.newInstance(RubyClass.java:915) 2970s at org.jruby.dist/org.jruby.RubyClass$INVOKER$i$newInstance.call(RubyClass$INVOKER$i$newInstance.gen) 2970s at org.jruby.dist/org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:333) 2970s at org.jruby.dist/org.jruby.java.proxies.ConcreteJavaProxy$NewMethod.call(ConcreteJavaProxy.java:183) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:456) 2970s at org.jruby.dist/org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:195) 2970s at org.jruby.dist/org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:346) 2970s at org.jruby.dist/org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:66) 2970s at org.jruby.dist/org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:118) 2970s at org.jruby.dist/org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:136) 2970s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:66) 2970s at org.jruby.dist/org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:58) 2970s at org.jruby.dist/org.jruby.runtime.Block.call(Block.java:144) 2970s at org.jruby.dist/org.jruby.RubyProc.call(RubyProc.java:352) 2970s at org.jruby.dist/org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:111) 2970s at java.base/java.lang.Thread.run(Thread.java:1583) 2972s .................*............................................................................................../tmp/autopkgtest.mg4W0U/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) 2972s /tmp/autopkgtest.mg4W0U/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) 2974s .............................................................................................................................*........................................................................................................................................**........................*.*....................................................................................................../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/java_integration/types/array_spec.rb:1040: warning: regular expression has ']' without escape 2974s ......../tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/java_integration/types/array_spec.rb:1142: warning: regular expression has ']' without escape 2976s .............................................................................................................................................................................................................*..*..................*...........................................2024-03-27 08:28:25 +0000 2978s 2024-03-27 08:28:27 +0000 2979s ........................... 2981s 2981s Pending: (Failures listed here are expected and do not affect your suite's status) 2981s 2981s 1) Rake::Ant.ant prefers $ANT_HOME to $PATH 2981s # $ANT_HOME is not set 2981s # ./spec/java_integration/ant/ant_spec.rb:138 2981s 2981s 2) Collection Ruby extensions #include? (specific) 2981s # due Java numeric conversion can not add to_java(:xxx) to collection 2981s Failure/Error: expect( set.include? 1.to_java ).to be true 2981s 2981s expected true 2981s got false 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in Support' 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:40:in `handle_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to' 2981s # ./spec/java_integration/extensions/collection_spec.rb:223:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 3) Java static method names should not overwrite critical core Ruby methods 2981s # need a better way to separate class and instance methods in the java code 2981s # ./spec/java_integration/methods/naming_spec.rb:65 2981s 2981s 4) JRuby class reification supports reification of java classes with interfaces 2981s # GH#6479 + reification not yet hooked up 2981s Failure/Error: expect(gotten).to eql([:success]) 2981s 2981s expected: [:success] 2981s got: [:failSO, :fail1, "fail3"] 2981s 2981s (compared using eql?) 2981s 2981s Diff: 2981s @@ -1 +1 @@ 2981s -[:success] 2981s +[:failSO, :fail1, "fail3"] 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in Support' 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to' 2981s # ./spec/java_integration/reify/become_java_spec.rb:206:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/confi 2981s Deprecation Warnings: 2981s 2981s guration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 5) JRuby class reification supports reification of ruby classes with interfaces 2981s # GH#6479 + reification not yet hooked up 2981s Failure/Error: expect(gotten).to eql([:success]) 2981s 2981s expected: [:success] 2981s got: [:failSO, :fail1, "fail3"] 2981s 2981s (compared using eql?) 2981s 2981s Diff: 2981s @@ -1 +1 @@ 2981s -[:success] 2981s +[:failSO, :fail1, "fail3"] 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in Support' 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:38:in `handle_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to' 2981s # ./spec/java_integration/reify/become_java_spec.rb:247:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 6) A Scala singleton shadowed by a Scala class defines class methods from the singleton 2981s # No reason given 2981s Failure/Error: expect(ScalaSingleton.hello).to eq("Hello") 2981s 2981s NoMethodError: 2981s undefined method `hello' for Java::Java_integrationFixtures::ScalaSingleton:Class 2981s # ./spec/java_integration/scala/singleton_spec.rb:9:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `block in run' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 7) A Scala singleton shadowed by a Scala trait defines class methods from the singleton 2981s # No reason given 2981s Failure/Error: expect(ScalaSingletonTrait.hello).to eq("Hello") 2981s 2981s NoMethodError: 2981s undefined method `hello' for Java::Java_integrationFixtures::ScalaSingletonTrait:Module 2981s # ./spec/java_integration/scala/singleton_spec.rb:19:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `block in run' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 8) A Ruby subclass of a Java concrete class can not invoke package-visible methods of the superclass 2981s # these should raise NoMethodError 2981s # ./spec/java_integration/types/extension_spec.rb:39 2981s 2981s 9) A Ruby subclass of a Java concrete class can not invoke private methods of the superclass 2981s # this should raise NoMethodError 2981s Failure/Error: expect {subtype.new.go}.to raise_error(NoMethodError) 2981s expected NoMethodError but nothing was raised 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in Support' 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:40:in `handle_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:139:in `to' 2981s # ./spec/java_integration/types/extension_spec.rb:78:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 2981s 10) a java.util.Map instance compares with a Hash 2981s # TODO need more handling to compare Map-s with Hash-es (as expected) 2981s Failure/Error: expect( m2 > m1 ).to be true 2981s 2981s expected true 2981s got false 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:110:in `block in Support' 2981s # /usr/share/rubygems-integration/all/gems/rspec-support-3.13.1/lib/rspec/support.rb:119:in `notify_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/fail_with.rb:35:in `fail_with' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:40:in `handle_failure' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:56:in `block in handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:27:in `with_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/handler.rb:48:in `handle_matcher' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:65:in `to' 2981s # /usr/share/rubygems-integration/all/gems/rspec-expectations-3.13.0/lib/rspec/expectations/expectation_target.rb:101:in `to' 2981s # ./spec/java_integration/types/map_spec.rb:44:in `block in
' 2981s # org/jruby/RubyBasicObject.java:2620:in `instance_exec' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:263:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `block in run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:624:in `run_around_example_hooks_for' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/hooks.rb:486:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:468:in `with_around_example_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:259:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:651:in `run_examples' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # org/jruby/RubyArray.java:2805:in `map' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke' 2981s # /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec:4:in `
' 2981s 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.mg4W0U/autopkgtest_tmp/spec/java_integration/methods/equals_spec.rb:15:in `block in
'. 2981s 2981s 2981s If you need more of the backtrace for any of these deprecations to 2981s identify where to make the necessary changes, you can configure 2981s `config.raise_errors_for_deprecations!`, and it will turn the 2981s deprecation warnings into errors, giving you the full backtrace. 2981s 2981s 1 deprecation warning total 2981s 2981s Finished in 11.52 seconds (files took 4.85 seconds to load) 2981s 925 examples, 0 failures, 10 pending 2981s 2981s autopkgtest [08:28:30]: test spec-ji: -----------------------] 2981s autopkgtest [08:28:30]: test spec-ji: - - - - - - - - - - results - - - - - - - - - - 2981s spec-ji PASS 2982s autopkgtest [08:28:31]: test spec-jruby: preparing testbed 3515s autopkgtest [08:37:24]: testbed dpkg architecture: amd64 3515s autopkgtest [08:37:24]: testbed apt version: 2.7.12 3515s autopkgtest [08:37:24]: @@@@@@@@@@@@@@@@@@@@ test bed setup 3515s Get:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease [117 kB] 3515s Get:2 http://ftpmaster.internal/ubuntu noble-proposed/universe Sources [3964 kB] 3515s Get:3 http://ftpmaster.internal/ubuntu noble-proposed/restricted Sources [8504 B] 3515s Get:4 http://ftpmaster.internal/ubuntu noble-proposed/main Sources [497 kB] 3515s Get:5 http://ftpmaster.internal/ubuntu noble-proposed/multiverse Sources [55.4 kB] 3515s Get:6 http://ftpmaster.internal/ubuntu noble-proposed/main i386 Packages [486 kB] 3515s Get:7 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 Packages [738 kB] 3515s Get:8 http://ftpmaster.internal/ubuntu noble-proposed/main amd64 c-n-f Metadata [3508 B] 3515s Get:9 http://ftpmaster.internal/ubuntu noble-proposed/restricted i386 Packages [6700 B] 3515s Get:10 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 Packages [42.5 kB] 3515s Get:11 http://ftpmaster.internal/ubuntu noble-proposed/restricted amd64 c-n-f Metadata [116 B] 3515s Get:12 http://ftpmaster.internal/ubuntu noble-proposed/universe i386 Packages [1258 kB] 3515s Get:13 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 Packages [4372 kB] 3515s Get:14 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 c-n-f Metadata [9396 B] 3515s Get:15 http://ftpmaster.internal/ubuntu noble-proposed/multiverse i386 Packages [28.6 kB] 3515s Get:16 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 Packages [97.3 kB] 3515s Get:17 http://ftpmaster.internal/ubuntu noble-proposed/multiverse amd64 c-n-f Metadata [196 B] 3519s Fetched 11.7 MB in 2s (7366 kB/s) 3519s Reading package lists... 3521s Reading package lists... 3521s Building dependency tree... 3521s Reading state information... 3521s Calculating upgrade... 3522s The following packages will be upgraded: 3522s psmisc 3522s 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 3522s Need to get 179 kB of archives. 3522s After this operation, 28.7 kB disk space will be freed. 3522s Get:1 http://ftpmaster.internal/ubuntu noble/main amd64 psmisc amd64 23.7-1 [179 kB] 3522s Fetched 179 kB in 0s (7226 kB/s) 3522s (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 ... 71864 files and directories currently installed.) 3522s Preparing to unpack .../psmisc_23.7-1_amd64.deb ... 3522s Unpacking psmisc (23.7-1) over (23.6-2) ... 3523s Setting up psmisc (23.7-1) ... 3523s Processing triggers for man-db (2.12.0-3) ... 3524s Reading package lists... 3524s Building dependency tree... 3524s Reading state information... 3525s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 3525s Hit:1 http://ftpmaster.internal/ubuntu noble-proposed InRelease 3525s Hit:2 http://ftpmaster.internal/ubuntu noble InRelease 3525s Hit:3 http://ftpmaster.internal/ubuntu noble-updates InRelease 3525s Hit:4 http://ftpmaster.internal/ubuntu noble-security InRelease 3527s Reading package lists... 3527s Reading package lists... 3527s Building dependency tree... 3527s Reading state information... 3527s Calculating upgrade... 3527s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 3528s Reading package lists... 3528s Building dependency tree... 3528s Reading state information... 3528s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 3531s Reading package lists... 3531s Building dependency tree... 3531s Reading state information... 3532s Starting pkgProblemResolver with broken count: 0 3532s Starting 2 pkgProblemResolver with broken count: 0 3532s Done 3532s The following additional packages will be installed: 3532s ant ca-certificates-java default-jre-headless fontconfig-config 3532s fonts-dejavu-core fonts-dejavu-mono java-common jruby libasm-java libasound2 3532s libasound2-data libavahi-client3 libavahi-common-data libavahi-common3 3532s libbackport9-java libcups2 libdirgra-java libfixposix4t64 libfontconfig1 3532s libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 3532s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 3532s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 3532s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 3532s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 3532s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 3532s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 3532s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 3532s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 3532s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 3532s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 3532s rubygems-integration 3532s Suggested packages: 3532s ant-doc default-jdk | java-compiler | java-sdk default-jre 3532s libasound2-plugins alsa-utils cups-common gmp-doc libgmp10-doc libmpfr-dev 3532s libheadius-options-java-doc libinvokebinder-java-doc libjnr-ffi-java-doc 3532s libjnr-netdb-java-doc libjnr-posix-java-doc libjoda-convert-java 3532s liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic 3532s fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei fonts-indic ri 3532s ruby-dev bundler 3532s Recommended packages: 3532s ant-optional fonts-lato alsa-ucm-conf alsa-topology-conf zip libjs-jquery 3532s ruby3.1-doc ruby3.2-doc 3532s The following NEW packages will be installed: 3532s ant autopkgtest-satdep ca-certificates-java default-jre-headless 3532s fontconfig-config fonts-dejavu-core fonts-dejavu-mono java-common jruby 3532s libasm-java libasound2 libasound2-data libavahi-client3 libavahi-common-data 3532s libavahi-common3 libbackport9-java libcups2 libdirgra-java libfixposix4t64 3532s libfontconfig1 libgmp-dev libgmpxx4ldbl libgraphite2-3 libharfbuzz0b 3532s libhawtjni-runtime-java libheadius-options-java libinvokebinder-java 3532s libjansi-native-java libjansi1-java libjcodings-java libjffi-java 3532s libjffi-jni libjitescript-java libjline2-java libjnr-constants-java 3532s libjnr-enxio-java libjnr-ffi-java libjnr-netdb-java libjnr-posix-java 3532s libjnr-unixsocket-java libjnr-x86asm-java libjoda-time-java libjpeg-turbo8 3532s libjpeg8 libjruby-joni-java libjzlib-java liblcms2-2 libpcsclite1 libruby 3532s libruby3.1 libruby3.2 libsnakeyaml-engine-java openjdk-21-jre-headless rake 3532s ruby ruby-all-dev ruby-diff-lcs ruby-net-telnet ruby-rspec ruby-rspec-core 3532s ruby-rspec-expectations ruby-rspec-mocks ruby-rspec-support ruby-rubygems 3532s ruby-sdbm ruby-webrick ruby-xmlrpc ruby3.1 ruby3.1-dev ruby3.2 ruby3.2-dev 3532s rubygems-integration 3532s 0 upgraded, 72 newly installed, 0 to remove and 0 not upgraded. 3532s Need to get 104 MB/104 MB of archives. 3532s After this operation, 334 MB of additional disk space will be used. 3532s Get:1 /tmp/autopkgtest.mg4W0U/8-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [756 B] 3533s Get:2 http://ftpmaster.internal/ubuntu noble/main amd64 ca-certificates-java all 20240118 [11.6 kB] 3533s Get:3 http://ftpmaster.internal/ubuntu noble/main amd64 java-common all 0.75+exp1 [6798 B] 3533s Get:4 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common-data amd64 0.8-13ubuntu2 [29.5 kB] 3533s Get:5 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-common3 amd64 0.8-13ubuntu2 [23.5 kB] 3533s Get:6 http://ftpmaster.internal/ubuntu noble/main amd64 libavahi-client3 amd64 0.8-13ubuntu2 [27.4 kB] 3533s Get:7 http://ftpmaster.internal/ubuntu noble/main amd64 libcups2 amd64 2.4.6-0ubuntu3 [269 kB] 3533s Get:8 http://ftpmaster.internal/ubuntu noble/main amd64 liblcms2-2 amd64 2.14-2 [161 kB] 3533s Get:9 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg-turbo8 amd64 2.1.5-2ubuntu1 [147 kB] 3533s Get:10 http://ftpmaster.internal/ubuntu noble/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 3533s Get:11 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-mono all 2.37-8 [502 kB] 3533s Get:12 http://ftpmaster.internal/ubuntu noble/main amd64 fonts-dejavu-core all 2.37-8 [835 kB] 3533s Get:13 http://ftpmaster.internal/ubuntu noble/main amd64 fontconfig-config amd64 2.15.0-1ubuntu1 [36.9 kB] 3533s Get:14 http://ftpmaster.internal/ubuntu noble/main amd64 libfontconfig1 amd64 2.15.0-1ubuntu1 [139 kB] 3533s Get:15 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2-data all 1.2.10-3build1 [20.7 kB] 3533s Get:16 http://ftpmaster.internal/ubuntu noble/main amd64 libasound2 amd64 1.2.10-3build1 [396 kB] 3533s Get:17 http://ftpmaster.internal/ubuntu noble/main amd64 libgraphite2-3 amd64 1.3.14-2 [83.1 kB] 3533s Get:18 http://ftpmaster.internal/ubuntu noble/main amd64 libharfbuzz0b amd64 8.3.0-2 [469 kB] 3533s Get:19 http://ftpmaster.internal/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.0-1 [20.6 kB] 3533s Get:20 http://ftpmaster.internal/ubuntu noble/main amd64 openjdk-21-jre-headless amd64 21.0.2+13-2 [46.6 MB] 3534s Get:21 http://ftpmaster.internal/ubuntu noble/main amd64 default-jre-headless amd64 2:1.21-75+exp1 [3094 B] 3534s Get:22 http://ftpmaster.internal/ubuntu noble/universe amd64 ant all 1.10.14-1 [2147 kB] 3534s Get:23 http://ftpmaster.internal/ubuntu noble/universe amd64 libasm-java all 9.6~us1-0ubuntu1 [386 kB] 3534s Get:24 http://ftpmaster.internal/ubuntu noble/universe amd64 libbackport9-java all 1.10-2 [13.2 kB] 3534s Get:25 http://ftpmaster.internal/ubuntu noble/universe amd64 libdirgra-java all 0.4-2 [21.6 kB] 3534s Get:26 http://ftpmaster.internal/ubuntu noble/universe amd64 libfixposix4t64 amd64 1:0.5.1-1+nmu1.1 [17.1 kB] 3534s Get:27 http://ftpmaster.internal/ubuntu noble/universe amd64 libheadius-options-java all 1.7-1 [18.2 kB] 3534s Get:28 http://ftpmaster.internal/ubuntu noble/universe amd64 libinvokebinder-java all 1.13-1 [51.7 kB] 3534s Get:29 http://ftpmaster.internal/ubuntu noble/universe amd64 libhawtjni-runtime-java all 1.18-1 [28.9 kB] 3534s Get:30 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi-native-java all 1.8-2 [24.1 kB] 3534s Get:31 http://ftpmaster.internal/ubuntu noble/universe amd64 libjansi1-java all 1.18-3ubuntu1 [56.0 kB] 3534s Get:32 http://ftpmaster.internal/ubuntu noble/universe amd64 libjcodings-java all 1.0.58-1 [1474 kB] 3534s Get:33 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-jni amd64 1.3.13+ds-1 [27.3 kB] 3534s Get:34 http://ftpmaster.internal/ubuntu noble/universe amd64 libjffi-java all 1.3.13+ds-1 [112 kB] 3534s Get:35 http://ftpmaster.internal/ubuntu noble/universe amd64 libjitescript-java all 0.4.3-1 [24.4 kB] 3534s Get:36 http://ftpmaster.internal/ubuntu noble/universe amd64 libjline2-java all 2.14.6-5 [150 kB] 3534s Get:37 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-constants-java all 0.10.4-2 [1397 kB] 3534s Get:38 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-x86asm-java all 1.0.2-5.1 [207 kB] 3534s Get:39 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-ffi-java all 2.2.15-2 [627 kB] 3534s Get:40 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-enxio-java all 0.32.16-1 [33.7 kB] 3534s Get:41 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-netdb-java all 1.1.6-1.1 [58.8 kB] 3534s Get:42 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-posix-java all 3.1.18-1 [267 kB] 3534s Get:43 http://ftpmaster.internal/ubuntu noble/universe amd64 libjnr-unixsocket-java all 0.38.21-2 [46.9 kB] 3534s Get:44 http://ftpmaster.internal/ubuntu noble/universe amd64 libjoda-time-java all 2.10.14-1 [535 kB] 3534s Get:45 http://ftpmaster.internal/ubuntu noble/universe amd64 libjruby-joni-java all 2.2.1-1 [222 kB] 3534s Get:46 http://ftpmaster.internal/ubuntu noble/universe amd64 libjzlib-java all 1.1.3-3 [76.8 kB] 3534s Get:47 http://ftpmaster.internal/ubuntu noble/universe amd64 libsnakeyaml-engine-java all 2.7+ds-3 [258 kB] 3534s Get:48 http://ftpmaster.internal/ubuntu noble-proposed/universe amd64 jruby all 9.4.6.0+ds-1ubuntu3 [33.3 MB] 3535s Get:49 http://ftpmaster.internal/ubuntu noble/main amd64 libgmpxx4ldbl amd64 2:6.3.0+dfsg-2ubuntu4 [9956 B] 3535s Get:50 http://ftpmaster.internal/ubuntu noble/main amd64 libgmp-dev amd64 2:6.3.0+dfsg-2ubuntu4 [342 kB] 3535s Get:51 http://ftpmaster.internal/ubuntu noble/main amd64 rubygems-integration all 1.18 [5336 B] 3535s Get:52 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1 amd64 3.1.2-7ubuntu4 [48.9 kB] 3535s Get:53 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-rubygems all 3.4.20-1 [238 kB] 3535s Get:54 http://ftpmaster.internal/ubuntu noble/main amd64 ruby amd64 1:3.1+1 [3466 B] 3535s Get:55 http://ftpmaster.internal/ubuntu noble/main amd64 rake all 13.0.6-3 [61.6 kB] 3535s Get:56 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-net-telnet all 0.2.0-1 [13.3 kB] 3535s Get:57 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-webrick all 1.8.1-1 [52.3 kB] 3535s Get:58 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-xmlrpc all 0.3.2-2 [24.8 kB] 3535s Get:59 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.2 amd64 3.2.3-1 [5339 kB] 3535s Get:60 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-sdbm amd64 1.0.0-5build3 [18.6 kB] 3535s Get:61 http://ftpmaster.internal/ubuntu noble/main amd64 libruby3.1 amd64 3.1.2-7ubuntu4 [5164 kB] 3535s Get:62 http://ftpmaster.internal/ubuntu noble/main amd64 libruby amd64 1:3.1+1 [4640 B] 3535s Get:63 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.1-dev amd64 3.1.2-7ubuntu4 [394 kB] 3535s Get:64 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2 amd64 3.2.3-1 [50.7 kB] 3535s Get:65 http://ftpmaster.internal/ubuntu noble/main amd64 ruby3.2-dev amd64 3.2.3-1 [399 kB] 3535s Get:66 http://ftpmaster.internal/ubuntu noble/main amd64 ruby-all-dev amd64 1:3.1+1 [5732 B] 3535s Get:67 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-diff-lcs all 1.5.1-1 [22.8 kB] 3535s Get:68 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-support all 3.13.0c0e0m0s1-2 [29.2 kB] 3535s Get:69 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-core all 3.13.0c0e0m0s1-2 [164 kB] 3535s Get:70 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [89.8 kB] 3535s Get:71 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.0 kB] 3535s Get:72 http://ftpmaster.internal/ubuntu noble/universe amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [3500 B] 3535s Fetched 104 MB in 2s (42.0 MB/s) 3535s Selecting previously unselected package ca-certificates-java. 3536s (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 ... 71861 files and directories currently installed.) 3536s Preparing to unpack .../00-ca-certificates-java_20240118_all.deb ... 3536s Unpacking ca-certificates-java (20240118) ... 3536s Selecting previously unselected package java-common. 3536s Preparing to unpack .../01-java-common_0.75+exp1_all.deb ... 3536s Unpacking java-common (0.75+exp1) ... 3536s Selecting previously unselected package libavahi-common-data:amd64. 3536s Preparing to unpack .../02-libavahi-common-data_0.8-13ubuntu2_amd64.deb ... 3536s Unpacking libavahi-common-data:amd64 (0.8-13ubuntu2) ... 3536s Selecting previously unselected package libavahi-common3:amd64. 3536s Preparing to unpack .../03-libavahi-common3_0.8-13ubuntu2_amd64.deb ... 3536s Unpacking libavahi-common3:amd64 (0.8-13ubuntu2) ... 3536s Selecting previously unselected package libavahi-client3:amd64. 3536s Preparing to unpack .../04-libavahi-client3_0.8-13ubuntu2_amd64.deb ... 3536s Unpacking libavahi-client3:amd64 (0.8-13ubuntu2) ... 3536s Selecting previously unselected package libcups2:amd64. 3536s Preparing to unpack .../05-libcups2_2.4.6-0ubuntu3_amd64.deb ... 3536s Unpacking libcups2:amd64 (2.4.6-0ubuntu3) ... 3536s Selecting previously unselected package liblcms2-2:amd64. 3536s Preparing to unpack .../06-liblcms2-2_2.14-2_amd64.deb ... 3536s Unpacking liblcms2-2:amd64 (2.14-2) ... 3536s Selecting previously unselected package libjpeg-turbo8:amd64. 3536s Preparing to unpack .../07-libjpeg-turbo8_2.1.5-2ubuntu1_amd64.deb ... 3536s Unpacking libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 3536s Selecting previously unselected package libjpeg8:amd64. 3536s Preparing to unpack .../08-libjpeg8_8c-2ubuntu11_amd64.deb ... 3536s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 3536s Selecting previously unselected package fonts-dejavu-mono. 3536s Preparing to unpack .../09-fonts-dejavu-mono_2.37-8_all.deb ... 3536s Unpacking fonts-dejavu-mono (2.37-8) ... 3536s Selecting previously unselected package fonts-dejavu-core. 3536s Preparing to unpack .../10-fonts-dejavu-core_2.37-8_all.deb ... 3536s Unpacking fonts-dejavu-core (2.37-8) ... 3536s Selecting previously unselected package fontconfig-config. 3536s Preparing to unpack .../11-fontconfig-config_2.15.0-1ubuntu1_amd64.deb ... 3536s Unpacking fontconfig-config (2.15.0-1ubuntu1) ... 3536s Selecting previously unselected package libfontconfig1:amd64. 3536s Preparing to unpack .../12-libfontconfig1_2.15.0-1ubuntu1_amd64.deb ... 3536s Unpacking libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 3536s Selecting previously unselected package libasound2-data. 3536s Preparing to unpack .../13-libasound2-data_1.2.10-3build1_all.deb ... 3536s Unpacking libasound2-data (1.2.10-3build1) ... 3536s Selecting previously unselected package libasound2:amd64. 3536s Preparing to unpack .../14-libasound2_1.2.10-3build1_amd64.deb ... 3536s Unpacking libasound2:amd64 (1.2.10-3build1) ... 3536s Selecting previously unselected package libgraphite2-3:amd64. 3536s Preparing to unpack .../15-libgraphite2-3_1.3.14-2_amd64.deb ... 3536s Unpacking libgraphite2-3:amd64 (1.3.14-2) ... 3536s Selecting previously unselected package libharfbuzz0b:amd64. 3536s Preparing to unpack .../16-libharfbuzz0b_8.3.0-2_amd64.deb ... 3536s Unpacking libharfbuzz0b:amd64 (8.3.0-2) ... 3536s Selecting previously unselected package libpcsclite1:amd64. 3536s Preparing to unpack .../17-libpcsclite1_2.0.0-1_amd64.deb ... 3536s Unpacking libpcsclite1:amd64 (2.0.0-1) ... 3536s Selecting previously unselected package openjdk-21-jre-headless:amd64. 3536s Preparing to unpack .../18-openjdk-21-jre-headless_21.0.2+13-2_amd64.deb ... 3536s Unpacking openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 3537s Selecting previously unselected package default-jre-headless. 3537s Preparing to unpack .../19-default-jre-headless_2%3a1.21-75+exp1_amd64.deb ... 3537s Unpacking default-jre-headless (2:1.21-75+exp1) ... 3537s Selecting previously unselected package ant. 3538s Preparing to unpack .../20-ant_1.10.14-1_all.deb ... 3538s Unpacking ant (1.10.14-1) ... 3538s Selecting previously unselected package libasm-java. 3538s Preparing to unpack .../21-libasm-java_9.6~us1-0ubuntu1_all.deb ... 3538s Unpacking libasm-java (9.6~us1-0ubuntu1) ... 3538s Selecting previously unselected package libbackport9-java. 3538s Preparing to unpack .../22-libbackport9-java_1.10-2_all.deb ... 3538s Unpacking libbackport9-java (1.10-2) ... 3538s Selecting previously unselected package libdirgra-java. 3538s Preparing to unpack .../23-libdirgra-java_0.4-2_all.deb ... 3538s Unpacking libdirgra-java (0.4-2) ... 3538s Selecting previously unselected package libfixposix4t64:amd64. 3538s Preparing to unpack .../24-libfixposix4t64_1%3a0.5.1-1+nmu1.1_amd64.deb ... 3538s Unpacking libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 3538s Selecting previously unselected package libheadius-options-java. 3538s Preparing to unpack .../25-libheadius-options-java_1.7-1_all.deb ... 3538s Unpacking libheadius-options-java (1.7-1) ... 3538s Selecting previously unselected package libinvokebinder-java. 3538s Preparing to unpack .../26-libinvokebinder-java_1.13-1_all.deb ... 3538s Unpacking libinvokebinder-java (1.13-1) ... 3538s Selecting previously unselected package libhawtjni-runtime-java. 3538s Preparing to unpack .../27-libhawtjni-runtime-java_1.18-1_all.deb ... 3538s Unpacking libhawtjni-runtime-java (1.18-1) ... 3538s Selecting previously unselected package libjansi-native-java. 3538s Preparing to unpack .../28-libjansi-native-java_1.8-2_all.deb ... 3538s Unpacking libjansi-native-java (1.8-2) ... 3538s Selecting previously unselected package libjansi1-java. 3538s Preparing to unpack .../29-libjansi1-java_1.18-3ubuntu1_all.deb ... 3538s Unpacking libjansi1-java (1.18-3ubuntu1) ... 3538s Selecting previously unselected package libjcodings-java. 3538s Preparing to unpack .../30-libjcodings-java_1.0.58-1_all.deb ... 3538s Unpacking libjcodings-java (1.0.58-1) ... 3538s Selecting previously unselected package libjffi-jni:amd64. 3538s Preparing to unpack .../31-libjffi-jni_1.3.13+ds-1_amd64.deb ... 3538s Unpacking libjffi-jni:amd64 (1.3.13+ds-1) ... 3538s Selecting previously unselected package libjffi-java. 3538s Preparing to unpack .../32-libjffi-java_1.3.13+ds-1_all.deb ... 3538s Unpacking libjffi-java (1.3.13+ds-1) ... 3538s Selecting previously unselected package libjitescript-java. 3538s Preparing to unpack .../33-libjitescript-java_0.4.3-1_all.deb ... 3538s Unpacking libjitescript-java (0.4.3-1) ... 3538s Selecting previously unselected package libjline2-java. 3538s Preparing to unpack .../34-libjline2-java_2.14.6-5_all.deb ... 3538s Unpacking libjline2-java (2.14.6-5) ... 3538s Selecting previously unselected package libjnr-constants-java. 3538s Preparing to unpack .../35-libjnr-constants-java_0.10.4-2_all.deb ... 3538s Unpacking libjnr-constants-java (0.10.4-2) ... 3538s Selecting previously unselected package libjnr-x86asm-java. 3538s Preparing to unpack .../36-libjnr-x86asm-java_1.0.2-5.1_all.deb ... 3538s Unpacking libjnr-x86asm-java (1.0.2-5.1) ... 3538s Selecting previously unselected package libjnr-ffi-java. 3538s Preparing to unpack .../37-libjnr-ffi-java_2.2.15-2_all.deb ... 3538s Unpacking libjnr-ffi-java (2.2.15-2) ... 3538s Selecting previously unselected package libjnr-enxio-java. 3538s Preparing to unpack .../38-libjnr-enxio-java_0.32.16-1_all.deb ... 3538s Unpacking libjnr-enxio-java (0.32.16-1) ... 3538s Selecting previously unselected package libjnr-netdb-java. 3538s Preparing to unpack .../39-libjnr-netdb-java_1.1.6-1.1_all.deb ... 3538s Unpacking libjnr-netdb-java (1.1.6-1.1) ... 3538s Selecting previously unselected package libjnr-posix-java. 3538s Preparing to unpack .../40-libjnr-posix-java_3.1.18-1_all.deb ... 3538s Unpacking libjnr-posix-java (3.1.18-1) ... 3538s Selecting previously unselected package libjnr-unixsocket-java. 3538s Preparing to unpack .../41-libjnr-unixsocket-java_0.38.21-2_all.deb ... 3538s Unpacking libjnr-unixsocket-java (0.38.21-2) ... 3538s Selecting previously unselected package libjoda-time-java. 3538s Preparing to unpack .../42-libjoda-time-java_2.10.14-1_all.deb ... 3538s Unpacking libjoda-time-java (2.10.14-1) ... 3538s Selecting previously unselected package libjruby-joni-java. 3538s Preparing to unpack .../43-libjruby-joni-java_2.2.1-1_all.deb ... 3538s Unpacking libjruby-joni-java (2.2.1-1) ... 3538s Selecting previously unselected package libjzlib-java. 3538s Preparing to unpack .../44-libjzlib-java_1.1.3-3_all.deb ... 3538s Unpacking libjzlib-java (1.1.3-3) ... 3538s Selecting previously unselected package libsnakeyaml-engine-java. 3538s Preparing to unpack .../45-libsnakeyaml-engine-java_2.7+ds-3_all.deb ... 3538s Unpacking libsnakeyaml-engine-java (2.7+ds-3) ... 3538s Selecting previously unselected package jruby. 3538s Preparing to unpack .../46-jruby_9.4.6.0+ds-1ubuntu3_all.deb ... 3538s Unpacking jruby (9.4.6.0+ds-1ubuntu3) ... 3539s Selecting previously unselected package libgmpxx4ldbl:amd64. 3539s Preparing to unpack .../47-libgmpxx4ldbl_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 3539s Unpacking libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 3539s Selecting previously unselected package libgmp-dev:amd64. 3539s Preparing to unpack .../48-libgmp-dev_2%3a6.3.0+dfsg-2ubuntu4_amd64.deb ... 3539s Unpacking libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 3539s Selecting previously unselected package rubygems-integration. 3539s Preparing to unpack .../49-rubygems-integration_1.18_all.deb ... 3539s Unpacking rubygems-integration (1.18) ... 3539s Selecting previously unselected package ruby3.1. 3539s Preparing to unpack .../50-ruby3.1_3.1.2-7ubuntu4_amd64.deb ... 3539s Unpacking ruby3.1 (3.1.2-7ubuntu4) ... 3539s Selecting previously unselected package ruby-rubygems. 3539s Preparing to unpack .../51-ruby-rubygems_3.4.20-1_all.deb ... 3539s Unpacking ruby-rubygems (3.4.20-1) ... 3539s Selecting previously unselected package ruby. 3539s Preparing to unpack .../52-ruby_1%3a3.1+1_amd64.deb ... 3539s Unpacking ruby (1:3.1+1) ... 3539s Selecting previously unselected package rake. 3539s Preparing to unpack .../53-rake_13.0.6-3_all.deb ... 3539s Unpacking rake (13.0.6-3) ... 3539s Selecting previously unselected package ruby-net-telnet. 3539s Preparing to unpack .../54-ruby-net-telnet_0.2.0-1_all.deb ... 3539s Unpacking ruby-net-telnet (0.2.0-1) ... 3539s Selecting previously unselected package ruby-webrick. 3539s Preparing to unpack .../55-ruby-webrick_1.8.1-1_all.deb ... 3539s Unpacking ruby-webrick (1.8.1-1) ... 3539s Selecting previously unselected package ruby-xmlrpc. 3539s Preparing to unpack .../56-ruby-xmlrpc_0.3.2-2_all.deb ... 3539s Unpacking ruby-xmlrpc (0.3.2-2) ... 3539s Selecting previously unselected package libruby3.2:amd64. 3539s Preparing to unpack .../57-libruby3.2_3.2.3-1_amd64.deb ... 3539s Unpacking libruby3.2:amd64 (3.2.3-1) ... 3540s Selecting previously unselected package ruby-sdbm:amd64. 3540s Preparing to unpack .../58-ruby-sdbm_1.0.0-5build3_amd64.deb ... 3540s Unpacking ruby-sdbm:amd64 (1.0.0-5build3) ... 3540s Selecting previously unselected package libruby3.1:amd64. 3540s Preparing to unpack .../59-libruby3.1_3.1.2-7ubuntu4_amd64.deb ... 3540s Unpacking libruby3.1:amd64 (3.1.2-7ubuntu4) ... 3540s Selecting previously unselected package libruby:amd64. 3540s Preparing to unpack .../60-libruby_1%3a3.1+1_amd64.deb ... 3540s Unpacking libruby:amd64 (1:3.1+1) ... 3540s Selecting previously unselected package ruby3.1-dev:amd64. 3540s Preparing to unpack .../61-ruby3.1-dev_3.1.2-7ubuntu4_amd64.deb ... 3540s Unpacking ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 3540s Selecting previously unselected package ruby3.2. 3540s Preparing to unpack .../62-ruby3.2_3.2.3-1_amd64.deb ... 3540s Unpacking ruby3.2 (3.2.3-1) ... 3540s Selecting previously unselected package ruby3.2-dev:amd64. 3540s Preparing to unpack .../63-ruby3.2-dev_3.2.3-1_amd64.deb ... 3540s Unpacking ruby3.2-dev:amd64 (3.2.3-1) ... 3540s Selecting previously unselected package ruby-all-dev:amd64. 3540s Preparing to unpack .../64-ruby-all-dev_1%3a3.1+1_amd64.deb ... 3540s Unpacking ruby-all-dev:amd64 (1:3.1+1) ... 3540s Selecting previously unselected package ruby-diff-lcs. 3540s Preparing to unpack .../65-ruby-diff-lcs_1.5.1-1_all.deb ... 3540s Unpacking ruby-diff-lcs (1.5.1-1) ... 3540s Selecting previously unselected package ruby-rspec-support. 3540s Preparing to unpack .../66-ruby-rspec-support_3.13.0c0e0m0s1-2_all.deb ... 3540s Unpacking ruby-rspec-support (3.13.0c0e0m0s1-2) ... 3540s Selecting previously unselected package ruby-rspec-core. 3540s Preparing to unpack .../67-ruby-rspec-core_3.13.0c0e0m0s1-2_all.deb ... 3540s Unpacking ruby-rspec-core (3.13.0c0e0m0s1-2) ... 3540s Selecting previously unselected package ruby-rspec-expectations. 3540s Preparing to unpack .../68-ruby-rspec-expectations_3.13.0c0e0m0s1-2_all.deb ... 3540s Unpacking ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 3540s Selecting previously unselected package ruby-rspec-mocks. 3540s Preparing to unpack .../69-ruby-rspec-mocks_3.13.0c0e0m0s1-2_all.deb ... 3540s Unpacking ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 3540s Selecting previously unselected package ruby-rspec. 3540s Preparing to unpack .../70-ruby-rspec_3.13.0c0e0m0s1-2_all.deb ... 3540s Unpacking ruby-rspec (3.13.0c0e0m0s1-2) ... 3540s Selecting previously unselected package autopkgtest-satdep. 3540s Preparing to unpack .../71-8-autopkgtest-satdep.deb ... 3540s Unpacking autopkgtest-satdep (0) ... 3540s Setting up libgraphite2-3:amd64 (1.3.14-2) ... 3540s Setting up liblcms2-2:amd64 (2.14-2) ... 3540s Setting up libfixposix4t64:amd64 (1:0.5.1-1+nmu1.1) ... 3540s Setting up java-common (0.75+exp1) ... 3540s Setting up libasm-java (9.6~us1-0ubuntu1) ... 3540s Setting up rubygems-integration (1.18) ... 3540s Setting up libheadius-options-java (1.7-1) ... 3540s Setting up libjnr-x86asm-java (1.0.2-5.1) ... 3540s Setting up libjzlib-java (1.1.3-3) ... 3540s Setting up libbackport9-java (1.10-2) ... 3540s Setting up libasound2-data (1.2.10-3build1) ... 3540s Setting up libjitescript-java (0.4.3-1) ... 3540s Setting up libsnakeyaml-engine-java (2.7+ds-3) ... 3540s Setting up libgmpxx4ldbl:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 3540s Setting up libavahi-common-data:amd64 (0.8-13ubuntu2) ... 3540s Setting up ruby-net-telnet (0.2.0-1) ... 3540s Setting up fonts-dejavu-mono (2.37-8) ... 3540s Setting up fonts-dejavu-core (2.37-8) ... 3540s Setting up libpcsclite1:amd64 (2.0.0-1) ... 3540s Setting up libjpeg-turbo8:amd64 (2.1.5-2ubuntu1) ... 3540s Setting up ruby-rspec-support (3.13.0c0e0m0s1-2) ... 3540s Setting up libjoda-time-java (2.10.14-1) ... 3540s Setting up libjcodings-java (1.0.58-1) ... 3540s Setting up ruby-webrick (1.8.1-1) ... 3540s Setting up libasound2:amd64 (1.2.10-3build1) ... 3540s Setting up libharfbuzz0b:amd64 (8.3.0-2) ... 3540s Setting up libinvokebinder-java (1.13-1) ... 3540s Setting up libjffi-jni:amd64 (1.3.13+ds-1) ... 3540s Setting up ca-certificates-java (20240118) ... 3540s No JRE found. Skipping Java certificates setup. 3540s Setting up ruby-xmlrpc (0.3.2-2) ... 3540s Setting up libhawtjni-runtime-java (1.18-1) ... 3540s Setting up libdirgra-java (0.4-2) ... 3540s Setting up libjnr-constants-java (0.10.4-2) ... 3540s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 3540s Setting up libjffi-java (1.3.13+ds-1) ... 3540s Setting up libgmp-dev:amd64 (2:6.3.0+dfsg-2ubuntu4) ... 3540s Setting up libjruby-joni-java (2.2.1-1) ... 3540s Setting up fontconfig-config (2.15.0-1ubuntu1) ... 3541s Setting up libavahi-common3:amd64 (0.8-13ubuntu2) ... 3541s Setting up libjansi-native-java (1.8-2) ... 3541s Setting up libjansi1-java (1.18-3ubuntu1) ... 3541s Setting up libfontconfig1:amd64 (2.15.0-1ubuntu1) ... 3541s Setting up libjline2-java (2.14.6-5) ... 3541s Setting up libavahi-client3:amd64 (0.8-13ubuntu2) ... 3541s Setting up libjnr-ffi-java (2.2.15-2) ... 3541s Setting up libjnr-enxio-java (0.32.16-1) ... 3541s Setting up libcups2:amd64 (2.4.6-0ubuntu3) ... 3541s Setting up libjnr-netdb-java (1.1.6-1.1) ... 3541s Setting up libjnr-posix-java (3.1.18-1) ... 3541s Setting up openjdk-21-jre-headless:amd64 (21.0.2+13-2) ... 3541s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode 3541s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/jpackage to provide /usr/bin/jpackage (jpackage) in auto mode 3541s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode 3541s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode 3541s update-alternatives: using /usr/lib/jvm/java-21-openjdk-amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode 3541s Setting up libjnr-unixsocket-java (0.38.21-2) ... 3541s Setting up ruby-rubygems (3.4.20-1) ... 3541s Setting up rake (13.0.6-3) ... 3541s Setting up libruby:amd64 (1:3.1+1) ... 3541s Setting up libruby3.2:amd64 (3.2.3-1) ... 3541s Setting up ruby3.2 (3.2.3-1) ... 3541s Setting up ruby3.2-dev:amd64 (3.2.3-1) ... 3541s Setting up ruby-sdbm:amd64 (1.0.0-5build3) ... 3541s Setting up libruby3.1:amd64 (3.1.2-7ubuntu4) ... 3541s Setting up ruby3.1 (3.1.2-7ubuntu4) ... 3541s Setting up ruby3.1-dev:amd64 (3.1.2-7ubuntu4) ... 3541s Setting up ruby-all-dev:amd64 (1:3.1+1) ... 3541s Setting up ruby (1:3.1+1) ... 3541s Setting up ruby-rspec-core (3.13.0c0e0m0s1-2) ... 3541s Setting up ruby-diff-lcs (1.5.1-1) ... 3541s Setting up ruby-rspec-expectations (3.13.0c0e0m0s1-2) ... 3541s Setting up ruby-rspec-mocks (3.13.0c0e0m0s1-2) ... 3541s Setting up ruby-rspec (3.13.0c0e0m0s1-2) ... 3541s Processing triggers for libc-bin (2.39-0ubuntu6) ... 3541s Processing triggers for man-db (2.12.0-3) ... 3542s Processing triggers for ca-certificates-java (20240118) ... 3542s Adding debian:ACCVRAIZ1.pem 3542s Adding debian:AC_RAIZ_FNMT-RCM.pem 3542s Adding debian:AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.pem 3542s Adding debian:ANF_Secure_Server_Root_CA.pem 3542s Adding debian:Actalis_Authentication_Root_CA.pem 3542s Adding debian:AffirmTrust_Commercial.pem 3542s Adding debian:AffirmTrust_Networking.pem 3542s Adding debian:AffirmTrust_Premium.pem 3542s Adding debian:AffirmTrust_Premium_ECC.pem 3542s Adding debian:Amazon_Root_CA_1.pem 3542s Adding debian:Amazon_Root_CA_2.pem 3542s Adding debian:Amazon_Root_CA_3.pem 3542s Adding debian:Amazon_Root_CA_4.pem 3542s Adding debian:Atos_TrustedRoot_2011.pem 3542s Adding debian:Atos_TrustedRoot_Root_CA_ECC_TLS_2021.pem 3542s Adding debian:Atos_TrustedRoot_Root_CA_RSA_TLS_2021.pem 3542s Adding debian:Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.pem 3542s Adding debian:BJCA_Global_Root_CA1.pem 3542s Adding debian:BJCA_Global_Root_CA2.pem 3542s Adding debian:Baltimore_CyberTrust_Root.pem 3542s Adding debian:Buypass_Class_2_Root_CA.pem 3542s Adding debian:Buypass_Class_3_Root_CA.pem 3542s Adding debian:CA_Disig_Root_R2.pem 3542s Adding debian:CFCA_EV_ROOT.pem 3542s Adding debian:COMODO_Certification_Authority.pem 3542s Adding debian:COMODO_ECC_Certification_Authority.pem 3542s Adding debian:COMODO_RSA_Certification_Authority.pem 3542s Adding debian:Certainly_Root_E1.pem 3542s Adding debian:Certainly_Root_R1.pem 3542s Adding debian:Certigna.pem 3542s Adding debian:Certigna_Root_CA.pem 3542s Adding debian:Certum_EC-384_CA.pem 3542s Adding debian:Certum_Trusted_Network_CA.pem 3542s Adding debian:Certum_Trusted_Network_CA_2.pem 3542s Adding debian:Certum_Trusted_Root_CA.pem 3542s Adding debian:CommScope_Public_Trust_ECC_Root-01.pem 3542s Adding debian:CommScope_Public_Trust_ECC_Root-02.pem 3542s Adding debian:CommScope_Public_Trust_RSA_Root-01.pem 3542s Adding debian:CommScope_Public_Trust_RSA_Root-02.pem 3542s Adding debian:Comodo_AAA_Services_root.pem 3542s Adding debian:D-TRUST_BR_Root_CA_1_2020.pem 3542s Adding debian:D-TRUST_EV_Root_CA_1_2020.pem 3542s Adding debian:D-TRUST_Root_Class_3_CA_2_2009.pem 3542s Adding debian:D-TRUST_Root_Class_3_CA_2_EV_2009.pem 3542s Adding debian:DigiCert_Assured_ID_Root_CA.pem 3542s Adding debian:DigiCert_Assured_ID_Root_G2.pem 3542s Adding debian:DigiCert_Assured_ID_Root_G3.pem 3542s Adding debian:DigiCert_Global_Root_CA.pem 3542s Adding debian:DigiCert_Global_Root_G2.pem 3542s Adding debian:DigiCert_Global_Root_G3.pem 3542s Adding debian:DigiCert_High_Assurance_EV_Root_CA.pem 3542s Adding debian:DigiCert_TLS_ECC_P384_Root_G5.pem 3542s Adding debian:DigiCert_TLS_RSA4096_Root_G5.pem 3542s Adding debian:DigiCert_Trusted_Root_G4.pem 3542s Adding debian:Entrust.net_Premium_2048_Secure_Server_CA.pem 3542s Adding debian:Entrust_Root_Certification_Authority.pem 3542s Adding debian:Entrust_Root_Certification_Authority_-_EC1.pem 3542s Adding debian:Entrust_Root_Certification_Authority_-_G2.pem 3542s Adding debian:Entrust_Root_Certification_Authority_-_G4.pem 3542s Adding debian:GDCA_TrustAUTH_R5_ROOT.pem 3542s Adding debian:GLOBALTRUST_2020.pem 3542s Adding debian:GTS_Root_R1.pem 3542s Adding debian:GTS_Root_R2.pem 3542s Adding debian:GTS_Root_R3.pem 3542s Adding debian:GTS_Root_R4.pem 3542s Adding debian:GlobalSign_ECC_Root_CA_-_R4.pem 3542s Adding debian:GlobalSign_ECC_Root_CA_-_R5.pem 3542s Adding debian:GlobalSign_Root_CA.pem 3542s Adding debian:GlobalSign_Root_CA_-_R3.pem 3542s Adding debian:GlobalSign_Root_CA_-_R6.pem 3542s Adding debian:GlobalSign_Root_E46.pem 3542s Adding debian:GlobalSign_Root_R46.pem 3542s Adding debian:Go_Daddy_Class_2_CA.pem 3542s Adding debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem 3542s Adding debian:HARICA_TLS_ECC_Root_CA_2021.pem 3542s Adding debian:HARICA_TLS_RSA_Root_CA_2021.pem 3542s Adding debian:Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.pem 3542s Adding debian:Hellenic_Academic_and_Research_Institutions_RootCA_2015.pem 3542s Adding debian:HiPKI_Root_CA_-_G1.pem 3542s Adding debian:Hongkong_Post_Root_CA_3.pem 3542s Adding debian:ISRG_Root_X1.pem 3542s Adding debian:ISRG_Root_X2.pem 3542s Adding debian:IdenTrust_Commercial_Root_CA_1.pem 3542s Adding debian:IdenTrust_Public_Sector_Root_CA_1.pem 3542s Adding debian:Izenpe.com.pem 3542s Adding debian:Microsec_e-Szigno_Root_CA_2009.pem 3542s Adding debian:Microsoft_ECC_Root_Certificate_Authority_2017.pem 3542s Adding debian:Microsoft_RSA_Root_Certificate_Authority_2017.pem 3542s Adding debian:NAVER_Global_Root_Certification_Authority.pem 3542s Adding debian:NetLock_Arany_=Class_Gold=_Főtanúsítvány.pem 3542s Adding debian:OISTE_WISeKey_Global_Root_GB_CA.pem 3542s Adding debian:OISTE_WISeKey_Global_Root_GC_CA.pem 3542s Adding debian:QuoVadis_Root_CA_1_G3.pem 3542s Adding debian:QuoVadis_Root_CA_2.pem 3542s Adding debian:QuoVadis_Root_CA_2_G3.pem 3542s Adding debian:QuoVadis_Root_CA_3.pem 3542s Adding debian:QuoVadis_Root_CA_3_G3.pem 3542s Adding debian:SSL.com_EV_Root_Certification_Authority_ECC.pem 3542s Adding debian:SSL.com_EV_Root_Certification_Authority_RSA_R2.pem 3542s Adding debian:SSL.com_Root_Certification_Authority_ECC.pem 3542s Adding debian:SSL.com_Root_Certification_Authority_RSA.pem 3542s Adding debian:SSL.com_TLS_ECC_Root_CA_2022.pem 3542s Adding debian:SSL.com_TLS_RSA_Root_CA_2022.pem 3542s Adding debian:SZAFIR_ROOT_CA2.pem 3542s Adding debian:Sectigo_Public_Server_Authentication_Root_E46.pem 3542s Adding debian:Sectigo_Public_Server_Authentication_Root_R46.pem 3542s Adding debian:SecureSign_RootCA11.pem 3542s Adding debian:SecureTrust_CA.pem 3542s Adding debian:Secure_Global_CA.pem 3542s Adding debian:Security_Communication_ECC_RootCA1.pem 3542s Adding debian:Security_Communication_RootCA2.pem 3542s Adding debian:Security_Communication_RootCA3.pem 3542s Adding debian:Security_Communication_Root_CA.pem 3542s Adding debian:Starfield_Class_2_CA.pem 3542s Adding debian:Starfield_Root_Certificate_Authority_-_G2.pem 3542s Adding debian:Starfield_Services_Root_Certificate_Authority_-_G2.pem 3542s Adding debian:SwissSign_Gold_CA_-_G2.pem 3542s Adding debian:SwissSign_Silver_CA_-_G2.pem 3542s Adding debian:T-TeleSec_GlobalRoot_Class_2.pem 3542s Adding debian:T-TeleSec_GlobalRoot_Class_3.pem 3542s Adding debian:TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.pem 3542s Adding debian:TWCA_Global_Root_CA.pem 3542s Adding debian:TWCA_Root_Certification_Authority.pem 3542s Adding debian:TeliaSonera_Root_CA_v1.pem 3542s Adding debian:Telia_Root_CA_v2.pem 3542s Adding debian:TrustAsia_Global_Root_CA_G3.pem 3542s Adding debian:TrustAsia_Global_Root_CA_G4.pem 3542s Adding debian:Trustwave_Global_Certification_Authority.pem 3542s Adding debian:Trustwave_Global_ECC_P256_Certification_Authority.pem 3542s Adding debian:Trustwave_Global_ECC_P384_Certification_Authority.pem 3542s Adding debian:TunTrust_Root_CA.pem 3542s Adding debian:UCA_Extended_Validation_Root.pem 3542s Adding debian:UCA_Global_G2_Root.pem 3542s Adding debian:USERTrust_ECC_Certification_Authority.pem 3542s Adding debian:USERTrust_RSA_Certification_Authority.pem 3542s Adding debian:XRamp_Global_CA_Root.pem 3542s Adding debian:certSIGN_ROOT_CA.pem 3542s Adding debian:certSIGN_Root_CA_G2.pem 3542s Adding debian:e-Szigno_Root_CA_2017.pem 3542s Adding debian:ePKI_Root_Certification_Authority.pem 3542s Adding debian:emSign_ECC_Root_CA_-_C3.pem 3542s Adding debian:emSign_ECC_Root_CA_-_G3.pem 3542s Adding debian:emSign_Root_CA_-_C1.pem 3542s Adding debian:emSign_Root_CA_-_G1.pem 3542s Adding debian:vTrus_ECC_Root_CA.pem 3542s Adding debian:vTrus_Root_CA.pem 3543s done. 3543s Setting up default-jre-headless (2:1.21-75+exp1) ... 3543s Setting up jruby (9.4.6.0+ds-1ubuntu3) ... 3543s Setting up ant (1.10.14-1) ... 3543s Setting up autopkgtest-satdep (0) ... 3547s (Reading database ... 81125 files and directories currently installed.) 3547s Removing autopkgtest-satdep (0) ... 3558s autopkgtest [08:38:07]: test spec-jruby: [----------------------- 3558s installing system gems into jruby: 3558s * diff-lcs-1.5.1 3558s * minitest-5.15.0 3558s * power_assert-2.0.1 3558s * rake-13.0.6 3558s * rexml-3.2.5 3558s * rspec-3.13.0 3558s * rspec-core-3.13.0 3558s * rspec-expectations-3.13.0 3558s * rspec-mocks-3.13.0 3558s * rspec-support-3.13.1 3558s * test-unit-3.5.3 3564s /usr/share/jruby/bin/jruby -X-C -I/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-support-3.13.1/lib:/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/gem_temp/gems/rspec-core-3.13.0/lib /usr/share/rubygems-integration/all/gems/rspec-core-3.13.0/exe/rspec --pattern spec/jruby/\*\*/\*_spec.rb 3570s .........*.................................................. 3570s 3570s Pending: (Failures listed here are expected and do not affect your suite's status) 3570s 3570s 1) File#absolute_path should not do something special for non-root URI 3570s # Very inconsistent behavior (consistently through all versions of JRuby) 3570s Failure/Error: expect(File.absolute_path(path)).to eq path 3570s 3570s expected: "http://10.1.1.1:32/" 3570s got: "http:/" 3570s 3570s (compared using ==) 3570s # ./spec/jruby/core/file/absolute_path_spec.rb:12:in `block in
' 3570s # ./spec/jruby/core/file/absolute_path_spec.rb:11:in `block in
' 3570s 3570s Finished in 1.86 seconds (files took 0.97607 seconds to load) 3570s 60 examples, 0 failures, 1 pending 3570s 3571s autopkgtest [08:38:20]: test spec-jruby: -----------------------] 3571s autopkgtest [08:38:20]: test spec-jruby: - - - - - - - - - - results - - - - - - - - - - 3571s spec-jruby PASS 3571s autopkgtest [08:38:20]: test spec-ruby: preparing testbed 3572s Reading package lists... 3572s Building dependency tree... 3572s Reading state information... 3573s Starting pkgProblemResolver with broken count: 0 3573s Starting 2 pkgProblemResolver with broken count: 0 3573s Done 3573s The following NEW packages will be installed: 3573s autopkgtest-satdep 3573s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 3573s Need to get 0 B/756 B of archives. 3573s After this operation, 0 B of additional disk space will be used. 3573s Get:1 /tmp/autopkgtest.mg4W0U/9-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [756 B] 3574s Selecting previously unselected package autopkgtest-satdep. 3574s (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 ... 81125 files and directories currently installed.) 3574s Preparing to unpack .../9-autopkgtest-satdep.deb ... 3574s Unpacking autopkgtest-satdep (0) ... 3574s Setting up autopkgtest-satdep (0) ... 3576s (Reading database ... 81125 files and directories currently installed.) 3576s Removing autopkgtest-satdep (0) ... 3576s autopkgtest [08:38:25]: test spec-ruby: [----------------------- 3577s installing system gems into jruby: 3577s * diff-lcs-1.5.1 3577s * minitest-5.15.0 3577s * power_assert-2.0.1 3577s * rake-13.0.6 3577s * rexml-3.2.5 3577s * rspec-3.13.0 3577s * rspec-core-3.13.0 3577s * rspec-expectations-3.13.0 3577s * rspec-mocks-3.13.0 3577s * rspec-support-3.13.1 3577s * test-unit-3.5.3 3582s 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} 3582s rm -rf rubyspec_temp 3583s JAVA options: {:dir=>"/tmp/autopkgtest.mg4W0U/autopkgtest_tmp", :maxmemory=>"1024M", :resultproperty=>"spec.status.OFF", :fork=>"true", :failonerror=>"true", :classname=>"org.jruby.Main"} 3587s $ /tmp/autopkgtest.mg4W0U/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.mg4W0U/autopkgtest_tmp/spec/mspec/bin/mspec-ci -f s --timeout 120 -B spec/jruby.mspec :fast 3587s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/mspec/lib/mspec/commands/mspec.rb:112: warning: unsupported exec option: close_others 3590s 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 [x86_64-linux] 3590s 3590s The BEGIN keyword 3590s - runs in a shared scope 3590s - accesses variables outside the eval scope 3590s - must appear in a top-level context 3590s - uses top-level for self 3590s - runs first in a given code unit 3590s - runs multiple begins in FIFO order 3593s - returns the top-level script's filename for __FILE__ 3593s 3593s The END keyword 3597s - runs after all other code 3600s - runs in reverse order of registration 3602s - allows calling exit inside a handler 3605s - gives access to the last raised exception - global variables $! and $@ 3608s - both exceptions in a handler and in the main script are printed 3610s - decides the exit status if both at_exit and the main script raise SystemExit 3614s - runs all handlers even if some raise exceptions 3616s - runs handlers even if the main script fails to parse 3619s - calls the nested handler right after the outer one if a handler is nested into another handler 3622s - runs only once for multiple calls 3625s - warns when END is used in a method 3625s 3625s The END keyword END blocks and at_exit callbacks are mixed 3628s - runs them all in reverse order of registration 3628s 3628s The alias keyword 3628s - creates a new name for an existing method 3628s - works with a simple symbol on the left-hand side 3628s - works with a single quoted symbol on the left-hand side 3628s - works with a double quoted symbol on the left-hand side 3628s - works with an interpolated symbol on the left-hand side 3628s - works with an interpolated symbol with non-literal embedded expression on the left-hand side 3628s - works with a simple symbol on the right-hand side 3628s - works with a single quoted symbol on the right-hand side 3628s - works with a double quoted symbol on the right-hand side 3628s - works with an interpolated symbol on the right-hand side 3628s - works with an interpolated symbol with non-literal embedded expression on the right-hand side 3628s - adds the new method to the list of methods 3628s - adds the new method to the list of public methods 3628s - overwrites an existing method with the target name 3628s - is reversible 3628s - operates on the object's metaclass when used in instance_eval 3628s - operates on the class/module metaclass when used in instance_eval 3628s - operates on the class/module metaclass when used in instance_exec 3628s - operates on methods defined via attr, attr_reader, and attr_accessor 3628s - operates on methods with splat arguments 3628s - operates on methods with splat arguments on eigenclasses 3628s - operates on methods with splat arguments defined in a superclass 3628s - operates on methods with splat arguments defined in a superclass using text block for class eval 3628s - is not allowed against Integer or String instances 3631s - on top level defines the alias on Object 3631s - raises a NameError when passed a missing name 3631s - defines the method on the aliased class when the original method is from a parent class 3631s 3631s The alias keyword 3634s - can create a new global variable, synonym of the original 3636s - can override an existing global variable and make them synonyms 3639s - supports aliasing twice the same global variables 3639s 3639s The '&&' statement 3639s - short-circuits evaluation at the first condition to be false 3639s - evaluates to the first condition not to be true 3639s - evaluates to the last condition if all are true 3639s - evaluates the full set of chained conditions during assignment 3639s - treats empty expressions as nil 3639s 3639s The 'and' statement 3639s - short-circuits evaluation at the first condition to be false 3639s - evaluates to the first condition not to be true 3639s - evaluates to the last condition if all are true 3639s - when used in assignment, evaluates and assigns expressions individually 3639s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/assignments_spec.rb:83: warning: unused literal ignored 3639s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/assignments_spec.rb:87: warning: unused literal ignored 3639s - treats empty expressions as nil 3639s 3639s Array literals 3639s - [] should return a new array populated with the given elements 3639s - [] treats empty expressions as nil elements 3639s - [] accepts a literal hash without curly braces as its only parameter 3639s - [] accepts a literal hash without curly braces as its last parameter 3639s - [] treats splatted nil as no element 3639s - evaluates each argument exactly once 3639s 3639s Bareword array literal 3639s - %w() transforms unquoted barewords into an array 3639s - %W() transforms unquoted barewords into an array, supporting interpolation 3639s - %W() always treats interpolated expressions as a single word 3639s - treats consecutive whitespace characters the same as one 3639s - treats whitespace as literals characters when escaped by a backslash 3639s 3639s The unpacking splat operator (*) 3639s - when applied to a literal nested array, unpacks its elements into the containing array 3639s - when applied to a nested referenced array, unpacks its elements into the containing array 3639s - returns a new array containing the same values when applied to an array inside an empty array 3639s - unpacks the start and count arguments in an array slice assignment 3639s - unpacks arguments as if they were listed statically 3639s - unpacks a literal array into arguments in a method call 3639s - unpacks a referenced array into arguments in a method call 3639s - when applied to a non-Array value attempts to coerce it to Array if the object respond_to?(:to_a) 3639s - when applied to a non-Array value uses it unchanged if it does not respond_to?(:to_a) 3639s - when applied to a BasicObject coerces it to Array if it respond_to?(:to_a) 3639s - can be used before other non-splat elements 3639s - can be used multiple times in the same containing array 3639s 3639s Assignments using += using an accessor 3639s - does evaluate receiver only once when assigns 3639s - ignores method visibility when receiver is self 3639s 3639s Assignments using += using a #[] 3639s - evaluates receiver only once when assigns 3639s - ignores method visibility when receiver is self 3639s 3639s Assignments using += using a #[] splatted argument 3639s - correctly handles it 3639s - calls #to_a only once 3639s - correctly handles a nested splatted argument 3639s - correctly handles multiple nested splatted arguments 3639s 3639s A block yielded a single Array 3639s - assigns the Array to a single argument 3639s - receives the identical Array object 3639s - assigns the Array to a single rest argument 3639s - assigns the first element to a single argument with trailing comma 3639s - assigns elements to required arguments 3639s - assigns nil to unassigned required arguments 3639s - assigns elements to optional arguments 3639s - assigns elements to post arguments 3639s - assigns elements to pre arguments 3639s - assigns elements to pre and post arguments 3639s - assigns elements to pre and post arguments when *rest is present 3639s - autosplats single argument to required arguments when a keyword rest argument is present 3639s - autosplats single argument to required arguments when optional keyword arguments are present 3639s - assigns elements to mixed argument types 3639s - does not treat final Hash as keyword arguments and does not autosplat 3639s - does not call #to_hash on final argument to get keyword arguments and does not autosplat 3639s - does not call #to_hash on the argument when optional argument and keyword argument accepted and does not autosplat 3639s - does not treat hashes with string keys as keyword arguments and does not autosplat 3639s - does not call #to_hash on the last element if keyword arguments are present 3639s - does not call #to_hash on the last element when there are more arguments than parameters 3639s - does not call #to_ary on the Array 3639s 3639s A block yielded a single Array when non-symbol keys are in a keyword arguments Hash 3639s - does not separate non-symbol keys and symbol keys and does not autosplat 3639s 3639s A block yielded a single Object 3639s - calls #to_ary on the object when taking multiple arguments 3639s - does not call #to_ary when not taking any arguments 3639s - does not call #to_ary on the object when taking a single argument 3639s - does not call #to_ary on the object when taking a single rest argument 3639s - receives the object if #to_ary returns nil 3639s - receives the object if it does not respond to #to_ary 3639s - calls #respond_to? to check if object has method #to_ary 3639s - receives the object if it does not respond to #respond_to? 3639s - calls #to_ary on the object when it is defined dynamically 3639s - raises a TypeError if #to_ary does not return an Array 3639s - raises error transparently if #to_ary raises error on its own 3639s 3639s A block 3639s - captures locals from the surrounding scope 3639s - allows for a leading space before the arguments 3639s - allows to define a block variable with the same name as the enclosing block 3639s - does not capture a local when an argument has the same name 3639s - does not capture a local when the block argument has the same name 3639s 3639s A block taking zero arguments 3639s - does not raise an exception when no values are yielded 3639s - does not raise an exception when values are yielded 3639s - may include a rescue clause 3639s 3639s A block taking || arguments 3639s - does not raise an exception when no values are yielded 3639s - does not raise an exception when values are yielded 3639s - may include a rescue clause 3639s 3639s A block taking |a| arguments 3639s - assigns nil to the argument when no values are yielded 3639s - assigns the value yielded to the argument 3639s - does not call #to_ary to convert a single yielded object to an Array 3639s - assigns the first value yielded to the argument 3639s - does not destructure a single Array value 3639s - may include a rescue clause 3639s 3639s A block taking |a, b| arguments 3639s - assigns nil to the arguments when no values are yielded 3639s - assigns one value yielded to the first argument 3639s - assigns the first two values yielded to the arguments 3639s - does not destructure an Array value as one of several values yielded 3639s - assigns 'nil' and 'nil' to the arguments when a single, empty Array is yielded 3639s - assigns the element of a single element Array to the first argument 3639s - destructures a single Array value yielded 3639s - destructures a splatted Array 3639s - calls #to_ary to convert a single yielded object to an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - raises a TypeError if #to_ary does not return an Array 3639s - raises the original exception if #to_ary raises an exception 3639s 3639s A block taking |a, *b| arguments 3639s - assigns 'nil' and '[]' to the arguments when no values are yielded 3639s - assigns all yielded values after the first to the rest argument 3639s - assigns 'nil' and '[]' to the arguments when a single, empty Array is yielded 3639s - assigns the element of a single element Array to the first argument 3639s - destructures a splatted Array 3639s - destructures a single Array value assigning the remaining values to the rest argument 3639s - calls #to_ary to convert a single yielded object to an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - raises a TypeError if #to_ary does not return an Array 3639s 3639s A block taking |*| arguments 3639s - does not raise an exception when no values are yielded 3639s - does not raise an exception when values are yielded 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - does not call #to_ary to convert a single yielded object to an Array 3639s 3639s A block taking |*a| arguments 3639s - assigns '[]' to the argument when no values are yielded 3639s - assigns a single value yielded to the argument as an Array 3639s - assigns all the values passed to the argument as an Array 3639s - assigns '[[]]' to the argument when passed an empty Array 3639s - assigns a single Array value passed to the argument by wrapping it in an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - does not call #to_ary to convert a single yielded object to an Array 3639s 3639s A block taking |a, | arguments 3639s - assigns nil to the argument when no values are yielded 3639s - assigns the argument a single value yielded 3639s - assigns the argument the first value yielded 3639s - assigns the argument the first of several values yielded when it is an Array 3639s - assigns nil to the argument when passed an empty Array 3639s - assigns the argument the first element of the Array when passed a single Array 3639s - calls #to_ary to convert a single yielded object to an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - raises a TypeError if #to_ary does not return an Array 3639s 3639s A block taking |(a, b)| arguments 3639s - assigns nil to the arguments when yielded no values 3639s - destructures a single Array value yielded 3639s - destructures a single Array value yielded when shadowing an outer variable 3639s - calls #to_ary to convert a single yielded object to an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - raises a TypeError if #to_ary does not return an Array 3639s 3639s A block taking |(a, b), c| arguments 3639s - assigns nil to the arguments when yielded no values 3639s - destructures a single one-level Array value yielded 3639s - destructures a single multi-level Array value yielded 3639s - calls #to_ary to convert a single yielded object to an Array 3639s - does not call #to_ary if the single yielded object is an Array 3639s - does not call #to_ary if the object does not respond to #to_ary 3639s - raises a TypeError if #to_ary does not return an Array 3639s 3639s A block taking nested |a, (b, (c, d))| 3639s - assigns nil to the arguments when yielded no values 3639s - destructures separate yielded values 3639s - destructures a nested Array value yielded 3639s - destructures a single multi-level Array value yielded 3639s 3639s A block taking nested |a, ((b, c), d)| 3639s - assigns nil to the arguments when yielded no values 3639s - destructures separate yielded values 3639s - destructures a nested value yielded 3639s - destructures a single multi-level Array value yielded 3639s 3639s A block taking |*a, b:| 3639s - merges the hash into the splatted array 3639s 3639s A block arguments with _ 3639s - extracts arguments with _ 3639s - assigns the first variable named 3639s 3639s A block taking identically-named arguments 3639s - raises a SyntaxError for standard arguments 3639s - accepts unnamed arguments 3639s 3639s A block pre and post parameters 3639s - assigns nil to unassigned required arguments 3639s - assigns elements to optional arguments 3639s - assigns elements to post arguments 3639s - assigns elements to pre arguments 3639s - assigns elements to pre and post arguments 3639s - assigns elements to pre and post arguments when *rest is present 3639s 3639s Block-local variables 3639s - are introduced with a semi-colon in the parameter list 3639s - can be specified in a comma-separated list after the semi-colon 3639s - can not have the same name as one of the standard parameters 3639s - can not be prefixed with an asterisk 3639s - can not be prefixed with an ampersand 3639s - can not be assigned default values 3639s - need not be preceded by standard parameters 3639s - only allow a single semi-colon in the parameter list 3639s - override shadowed variables from the outer scope 3639s - are not automatically instantiated in the outer scope 3639s - are automatically instantiated in the block 3639s - are visible in deeper scopes before initialization 3639s 3639s Post-args 3639s - appear after a splat 3639s - are required for a lambda 3639s - are assigned to nil when not enough arguments are given to a proc 3639s 3639s Post-args with required args 3639s - gathers remaining args in the splat 3639s - has an empty splat when there are no remaining args 3639s 3639s Post-args with optional args 3639s - gathers remaining args in the splat 3639s - overrides the optional arg before gathering in the splat 3639s - uses the required arg before the optional and the splat 3639s - overrides the optional args from left to right before gathering the splat 3639s 3639s Post-args with optional args with a circular argument reference 3639s - raises a SyntaxError if using an existing local with the same name as the argument 3639s - raises a SyntaxError if there is an existing method with the same name as the argument 3639s - calls an existing method with the same name as the argument if explicitly using () 3639s 3639s Post-args with pattern matching 3639s - extracts matched blocks with post arguments 3639s - allows empty splats 3639s 3639s Anonymous block forwarding 3639s - forwards blocks to other method that formally declares anonymous block 3639s - requires the anonymous block parameter to be declared if directly passing a block 3639s - works when it's the only declared parameter 3639s - works alongside positional parameters 3639s - works alongside positional arguments and splatted keyword arguments 3639s - works alongside positional arguments and disallowed keyword arguments 3639s 3639s The break statement in a block 3639s - returns nil to method invoking the method yielding to the block when not passed an argument 3639s - returns a value to the method invoking the method yielding to the block 3639s 3639s The break statement in a block yielded inside a while 3639s - breaks out of the block 3639s 3639s The break statement in a block captured and delegated to another method repeatedly 3639s - breaks out of the block 3639s 3639s The break statement in a captured block when the invocation of the scope creating the block is still active 3639s - raises a LocalJumpError when invoking the block from the scope creating the block 3639s - raises a LocalJumpError when invoking the block from a method 3639s - raises a LocalJumpError when yielding to the block 3639s 3639s The break statement in a captured block from a scope that has returned 3639s - raises a LocalJumpError when calling the block from a method 3639s - raises a LocalJumpError when yielding to the block 3639s 3639s The break statement in a captured block from another thread 3640s - raises a LocalJumpError when getting the value from another thread 3640s 3640s The break statement in a lambda 3640s - returns from the lambda 3640s - returns from the call site if the lambda is passed as a block 3640s 3640s The break statement in a lambda when the invocation of the scope creating the lambda is still active 3640s - returns nil when not passed an argument 3640s - returns a value to the scope creating and calling the lambda 3640s - returns a value to the method scope below invoking the lambda 3640s - returns a value to a block scope invoking the lambda in a method below 3640s - returns from the lambda 3640s 3640s The break statement in a lambda created at the toplevel 3642s - returns a value when invoking from the toplevel 3645s - returns a value when invoking from a method 3647s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/case_spec.rb:396: warning: unused literal ignored 3647s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/case_spec.rb:398: warning: unused literal ignored 3647s - returns a value when invoking from a block 3647s 3647s The break statement in a lambda from a scope that has returned 3647s - returns a value to the method scope invoking the lambda 3647s - returns a value to the block scope invoking the lambda in a method 3647s - raises a LocalJumpError when yielding to a lambda passed as a block argument 3647s 3647s Break inside a while loop 3647s - stops a while loop when run 3647s - causes a call with a block to return when run 3647s 3647s Break inside a while loop with a value 3647s - exits the loop and returns the value 3647s - passes the value returned by a method with omitted parenthesis and passed block 3647s 3647s Break inside a while loop with a splat 3647s - exits the loop and makes the splat an Array 3647s - treats nil as an empty array 3647s - preserves an array as is 3647s - wraps a non-Array in an Array 3647s 3647s Executing break from within a block 3647s - returns from the original invoking method even in case of chained calls 3647s - runs ensures when continuing upward 3647s - runs ensures when breaking from a loop 3647s - doesn't run ensures in the destination method 3647s - works when passing through a super call 3647s - raises LocalJumpError when converted into a proc during a a super call 3647s 3647s The 'case'-construct 3647s - evaluates the body of the when clause matching the case target expression 3647s - evaluates the body of the when clause whose array expression includes the case target expression 3647s - evaluates the body of the when clause in left-to-right order if it's an array expression 3647s - evaluates the body of the when clause whose range expression includes the case target expression 3647s - returns nil when no 'then'-bodies are given 3647s - evaluates the 'else'-body when no other expression matches 3647s - returns nil when no expression matches and 'else'-body is empty 3647s - returns 2 when a then body is empty 3647s - returns the statement following 'then' 3647s - tests classes with case equality 3647s - tests with matching regexps 3647s - tests with matching regexps and sets $~ and captures 3647s - tests with a string interpolated in a regexp 3647s - tests with a regexp interpolated within another regexp 3647s - does not test with equality when given classes 3647s - takes lists of values 3647s - tests an empty array 3647s - expands arrays to lists of values 3647s - takes an expanded array in addition to a list of values 3647s - takes an expanded array before additional listed values 3647s - expands arrays from variables before additional listed values 3647s - expands arrays from variables before a single additional listed value 3647s - expands multiple arrays from variables before additional listed values 3647s - concats arrays before expanding them 3647s - never matches when clauses with no values 3647s - lets you define a method after the case statement 3647s - raises a SyntaxError when 'else' is used when no 'when' is given 3647s - raises a SyntaxError when 'else' is used before a 'when' was given 3647s - supports nested case statements 3647s - supports nested case statements followed by a when with a splatted array 3647s - supports nested case statements followed by a when with a splatted non-array 3647s - works even if there's only one when statement 3647s - evaluates true as only 'true' when true is the first clause 3647s - evaluates false as only 'false' when false is the first clause 3647s - treats a literal array as its own when argument, rather than a list of arguments 3647s - takes multiple expanded arrays 3647s - calls === even when private 3647s - accepts complex expressions within () 3647s - only matches last value in complex expressions within () 3647s - supports declaring variables in the case target expression 3647s 3647s The 'case'-construct with no target expression 3647s - evaluates the body of the first clause when at least one of its condition expressions is true 3647s - evaluates the body of the first when clause that is not false/nil 3647s - evaluates the body of the else clause if all when clauses are false/nil 3647s - evaluates multiple conditional expressions as a boolean disjunction 3647s - handles homogeneous cases 3647s - expands arrays to lists of values 3647s 3647s The class keyword 3647s - creates a new class with semicolon 3647s - does not raise a SyntaxError when opening a class without a semicolon 3647s - can redefine a class when called from a block 3647s 3647s A class definition 3647s - creates a new class 3647s - has no class variables 3647s - raises TypeError if constant given as class name exists and is not a Module 3647s - raises TypeError if the constant qualifying the class is nil 3647s - raises TypeError if any constant qualifying the class is not a Module 3647s - inherits from Object by default 3647s - raises an error when trying to change the superclass 3647s - raises an error when reopening a class with BasicObject as superclass 3647s - raises an error when reopening a class with Object as superclass 3647s - allows reopening a class without specifying the superclass 3648s - does not allow to set the superclass even if it was not specified by the first declaration 3648s - allows using self as the superclass if self is a class 3648s - first evaluates the superclass before checking if the class already exists 3648s - raises a TypeError if inheriting from a metaclass 3648s - allows the declaration of class variables in the body 3648s - stores instance variables defined in the class body in the class object 3648s - allows the declaration of class variables in a class method 3648s - allows the definition of class-level instance variables in a class method 3648s - allows the declaration of class variables in an instance method 3648s - allows the definition of instance methods 3648s - allows the definition of class methods 3648s - allows the definition of class methods using class << self 3648s - allows the definition of Constants 3648s - returns the value of the last statement in the body 3648s 3648s A class definition within a block creates a new class in the lexical scope 3648s - for named classes at the toplevel 3648s - for named classes in a module 3648s - for anonymous classes 3648s - for anonymous classes assigned to a constant 3648s 3648s An outer class definition 3648s - contains the inner classes 3648s 3648s A class definition extending an object (sclass) 3648s - allows adding methods 3648s - raises a TypeError when trying to extend numbers 3648s - raises a TypeError when trying to extend non-Class 3648s - does not allow accessing the block of the original scope 3648s - can use return to cause the enclosing method to return 3648s 3648s Reopening a class 3648s - extends the previous definitions 3648s - overwrites existing methods 3648s - raises a TypeError when superclasses mismatch 3648s - adds new methods to subclasses 3648s 3648s class provides hooks 3648s - calls inherited when a class is created 3648s 3648s A class variable 3648s - can be accessed from a subclass 3648s - is set in the superclass 3648s 3648s A class variable defined in a module 3648s - can be accessed from classes that extend the module 3648s - is not defined in these classes 3648s - is only updated in the module a method defined in the module is used 3648s - is updated in the class when a Method defined in the class is used 3648s - can be accessed inside the class using the module methods 3648s - can be accessed from modules that extend the module 3648s - is defined in the extended module 3648s - is not defined in the extending module 3648s 3648s A class variable definition 3648s - is created in a module if any of the parents do not define it 3648s 3648s Accessing a class variable 3648s - raises a RuntimeError when accessed from the toplevel scope (not in some module or class) 3648s - does not raise an error when checking if defined from the toplevel scope 3648s 3648s The comment 3648s - can be placed between fluent dot now 3648s 3648s Literal (A::X) constant resolution 3648s - raises a NameError if no constant is defined in the search path 3648s - uses the module or class #name to craft the error message 3648s - uses the module or class #inspect to craft the error message if they are anonymous 3648s - sends #const_missing to the original class or module scope 3648s - evaluates the qualifier 3648s - raises a TypeError if a non-class or non-module qualifier is given 3648s 3648s Literal (A::X) constant resolution with statically assigned constants 3648s - searches the immediate class or module scope first 3648s - searches a module included in the immediate class before the superclass 3648s - searches the superclass before a module included in the superclass 3648s - searches a module included in the superclass 3648s - searches the superclass chain 3648s - searches Object if no class or module qualifier is given 3648s - searches Object after searching other scopes 3648s - searches Object if a toplevel qualifier (::X) is given 3648s - does not search the singleton class of the class or module 3648s 3648s Literal (A::X) constant resolution with dynamically assigned constants 3648s - searches the immediate class or module scope first 3648s - searches a module included in the immediate class before the superclass 3648s - searches the superclass before a module included in the superclass 3648s - searches a module included in the superclass 3648s - searches the superclass chain 3648s - searches Object if no class or module qualifier is given 3648s - searches Object if a toplevel qualifier (::X) is given 3648s - does not search the singleton class of the class or module 3648s - returns the updated value when a constant is reassigned 3648s - evaluates the right hand side before evaluating a constant path 3648s 3648s Constant resolution within methods 3648s - raises a NameError if no constant is defined in the search path 3648s - sends #const_missing to the original class or module scope 3648s 3648s Constant resolution within methods with statically assigned constants 3648s - searches the immediate class or module scope first 3648s - searches a module included in the immediate class before the superclass 3648s - searches the superclass before a module included in the superclass 3648s - searches a module included in the superclass 3648s - searches the superclass chain 3648s - searches the lexical scope of the method not the receiver's immediate class 3648s - searches the lexical scope of a singleton method 3648s - does not search the lexical scope of the caller 3648s - searches the lexical scope of a block 3648s - searches Object as a lexical scope only if Object is explicitly opened 3648s - does not search the lexical scope of qualifying modules 3648s 3648s Constant resolution within methods with dynamically assigned constants 3648s - searches the immediate class or module scope first 3648s - searches a module included in the immediate class before the superclass 3648s - searches the superclass before a module included in the superclass 3648s - searches a module included in the superclass 3648s - searches the superclass chain 3648s - searches the lexical scope of the method not the receiver's immediate class 3648s - searches the lexical scope of a singleton method 3648s - does not search the lexical scope of the caller 3648s - searches the lexical scope of a block 3648s - searches Object as a lexical scope only if Object is explicitly opened 3648s - returns the updated value when a constant is reassigned 3648s - does not search the lexical scope of qualifying modules 3648s 3648s Constant resolution within a singleton class (class << obj) 3648s - works like normal classes or modules 3648s 3648s top-level constant lookup 3648s - searches Object unsuccessfully when searches on a module 3648s 3648s top-level constant lookup on a class 3648s - does not search Object after searching other scopes 3648s 3648s Module#private_constant marked constants 3648s - remain private even when updated 3648s - sends #const_missing to the original class or module 3648s 3648s Module#private_constant marked constants in a module 3648s - cannot be accessed from outside the module 3648s - can be reopened as a module where constant is not private 3648s - can be reopened as a class where constant is not private 3648s - is not defined? with A::B form 3648s - can be accessed from the module itself 3648s - is defined? from the module itself 3648s - can be accessed from lexical scope 3648s - is defined? from lexical scope 3648s - can be accessed from classes that include the module 3648s - can be accessed from modules that include the module 3648s - raises a NameError when accessed directly from modules that include the module 3648s - is defined? from classes that include the module 3648s 3648s Module#private_constant marked constants in a class 3648s - cannot be accessed from outside the class 3648s - can be reopened as a module where constant is not private 3648s - can be reopened as a class where constant is not private 3648s - is not defined? with A::B form 3648s - can be accessed from the class itself 3648s - is defined? from the class itself 3648s - can be accessed from lexical scope 3648s - is defined? from lexical scope 3648s - can be accessed from subclasses 3648s - is defined? from subclasses 3648s 3648s Module#private_constant marked constants in Object 3648s - cannot be accessed using ::Const form 3648s - is not defined? using ::Const form 3648s - can be accessed through the normal search 3648s - is defined? through the normal search 3648s 3648s Module#private_constant marked constants NameError by #private_constant 3648s - has :receiver and :name attributes 3648s - has the defined class as the :name attribute 3648s 3648s Module#public_constant marked constants in a module 3648s - can be accessed from outside the module 3648s - is defined? with A::B form 3648s 3648s Module#public_constant marked constants in a class 3648s - can be accessed from outside the class 3648s - is defined? with A::B form 3648s 3648s Module#public_constant marked constants in Object 3648s - can be accessed using ::Const form 3648s - is defined? using ::Const form 3648s 3648s Allowed characters 3648s - allows not ASCII characters in the middle of a name 3648s - does not allow not ASCII characters that cannot be upcased or lowercased at the beginning 3648s - allows not ASCII upcased characters at the beginning 3648s 3648s Assignment dynamic assignment 3648s - raises SyntaxError 3648s 3648s Redefining a method 3648s - replaces the original method 3648s 3648s Defining a method at the top-level 3648s - defines it on Object with private visibility by default 3648s - defines it on Object with public visibility after calling public 3648s 3648s Defining an 'initialize' method 3648s - sets the method's visibility to private 3648s 3648s Defining an 'initialize_copy' method 3648s - sets the method's visibility to private 3648s 3648s Defining an 'initialize_dup' method 3648s - sets the method's visibility to private 3648s 3648s Defining an 'initialize_clone' method 3648s - sets the method's visibility to private 3648s 3648s Defining a 'respond_to_missing?' method 3648s - sets the method's visibility to private 3648s 3648s Defining a method 3648s - returns a symbol of the method name 3648s 3648s An instance method 3648s - raises an error with too few arguments 3648s - raises an error with too many arguments 3648s - raises FrozenError with the correct class name 3648s 3648s An instance method definition with a splat 3648s - accepts an unnamed '*' argument 3648s - accepts a named * argument 3648s - accepts non-* arguments before the * argument 3648s - allows only a single * argument 3648s - requires the presence of any arguments that precede the * 3648s 3648s An instance method with a default argument 3648s - evaluates the default when no arguments are passed 3648s - evaluates the default empty expression when no arguments are passed 3648s - assigns an empty Array to an unused splat argument 3648s - evaluates the default when required arguments precede it 3648s - prefers to assign to a default argument before a splat argument 3648s - prefers to assign to a default argument when there are no required arguments 3648s - does not evaluate the default when passed a value and a * argument 3648s - raises a SyntaxError when there is an existing method with the same name as the local variable 3648s - calls a method with the same name as the local when explicitly using () 3648s 3648s A singleton method definition 3648s - can be declared for a local variable 3648s - can be declared for an instance variable 3648s - can be declared for a global variable 3648s - can be declared with an empty method body 3648s - can be redefined 3648s - raises FrozenError if frozen 3648s - raises FrozenError with the correct class name 3648s 3648s Redefining a singleton method 3648s - does not inherit a previously set visibility 3648s 3648s Redefining a singleton method 3648s - does not inherit a previously set visibility 3648s 3648s A method defined with extreme default arguments 3648s - can redefine itself when the default is evaluated 3648s - may use an fcall as a default 3648s - evaluates the defaults in the method's scope 3648s - may use preceding arguments as defaults 3648s - may use a lambda as a default 3648s 3648s A singleton method defined with extreme default arguments 3648s - may use a method definition as a default 3648s - may use an fcall as a default 3648s - evaluates the defaults in the singleton scope 3648s - may use preceding arguments as defaults 3648s - may use a lambda as a default 3648s 3648s A method definition inside a metaclass scope 3648s - can create a class method 3648s - can create a singleton method 3648s - raises FrozenError if frozen 3648s 3648s A nested method definition 3648s - creates an instance method when evaluated in an instance method 3648s - creates a class method when evaluated in a class method 3648s - creates a singleton method when evaluated in the metaclass of an instance 3648s - creates a method in the surrounding context when evaluated in a def expr.method 3648s - inside an instance_eval creates a singleton method 3648s - creates an instance method inside Class.new 3648s 3648s A method definition always resets the visibility to public for nested definitions 3648s - in Class.new 3648s 3648s A method definition inside an instance_eval 3648s - creates a singleton method 3648s - creates a singleton method when evaluated inside a metaclass 3648s - creates a class method when the receiver is a class 3648s - creates a class method when the receiver is an anonymous class 3648s - creates a class method when instance_eval is within class 3648s 3648s A method definition inside an instance_exec 3648s - creates a class method when the receiver is a class 3648s - creates a class method when the receiver is an anonymous class 3648s - creates a class method when instance_exec is within class 3648s 3648s A method definition in an eval 3648s - creates an instance method 3648s - creates a class method 3648s - creates a singleton method 3648s 3648s a method definition that sets more than one default parameter all to the same value 3648s - assigns them all the same object by default 3648s - allows the first argument to be given, and sets the rest to null 3648s - assigns the parameters different objects across different default calls 3648s - only allows overriding the default value of the first such parameter in each set 3648s - treats the argument after the multi-parameter normally 3648s 3648s The def keyword within a closure 3648s - looks outside the closure for the visibility 3648s 3648s The defined? keyword for literals 3648s - returns 'self' for self 3648s - returns 'nil' for nil 3648s - returns 'true' for true 3648s - returns 'false' for false 3648s 3648s The defined? keyword for literals for a literal Array 3648s - returns 'expression' if each element is defined 3648s - returns nil if one element is not defined 3648s - returns nil if all elements are not defined 3648s 3648s The defined? keyword when called with a method name 3648s - does not call the method 3648s - does not execute the arguments 3648s 3648s The defined? keyword when called with a method name without a receiver 3648s - returns 'method' if the method is defined 3648s - returns nil if the method is not defined 3648s - returns 'method' if the method is defined and private 3648s - returns 'method' if the predicate method is defined and private 3648s 3648s The defined? keyword when called with a method name having a module as receiver 3648s - returns 'method' if the method is defined 3648s - returns nil if the method is private 3648s - returns nil if the method is protected 3648s - returns nil if the method is not defined 3648s - returns nil if the class is not defined 3648s - returns nil if the subclass is not defined 3648s 3648s The defined? keyword when called with a method name having a local variable as receiver 3648s - returns 'method' if the method is defined 3648s - returns 'method' for []= 3648s - returns nil if the method is not defined 3648s - returns nil if the variable does not exist 3648s - calls #respond_to_missing? 3648s 3648s The defined? keyword when called with a method name having an instance variable as receiver 3648s - returns 'method' if the method is defined 3648s - returns nil if the method is not defined 3648s - returns nil if the variable does not exist 3648s 3648s The defined? keyword when called with a method name having a global variable as receiver 3648s - returns 'method' if the method is defined 3648s - returns nil if the method is not defined 3648s - returns nil if the variable does not exist 3648s 3648s The defined? keyword when called with a method name having a method call as a receiver 3648s - returns nil if evaluating the receiver raises an exception 3648s - returns nil if the method is not defined on the object the receiver returns 3648s - returns 'method' if the method is defined on the object the receiver returns 3648s 3648s The defined? keyword when called with a method name having a throw in the receiver 3648s - escapes defined? and performs the throw semantics as normal 3648s 3648s The defined? keyword when called with a method name in a void context 3648s - warns about the void context when parsing it 3648s 3648s The defined? keyword for an expression 3648s - returns 'assignment' for assigning a local variable 3648s - returns 'assignment' for assigning an instance variable 3648s - returns 'assignment' for assigning a global variable 3648s - returns 'assignment' for assigning a class variable 3648s - returns 'assignment' for assigning a constant 3648s - returns 'assignment' for assigning a fully qualified constant 3648s - returns 'assignment' for assigning multiple variables 3648s - returns 'assignment' for an expression with '%=' 3648s - returns 'assignment' for an expression with '/=' 3648s - returns 'assignment' for an expression with '-=' 3648s - returns 'assignment' for an expression with '+=' 3648s - returns 'expression' for an assigning a fully qualified constant with '+=' 3648s - returns 'assignment' for an expression with '*=' 3648s - returns 'assignment' for an expression with '|=' 3648s - returns 'assignment' for an expression with '&=' 3648s - returns 'assignment' for an expression with '^=' 3648s - returns 'assignment' for an expression with '~=' 3648s - returns 'assignment' for an expression with '<<=' 3648s - returns 'assignment' for an expression with '>>=' 3648s - returns 'assignment' for an expression with '**=' 3648s - returns nil for an expression with == and an undefined method 3648s - returns nil for an expression with != and an undefined method 3648s - returns nil for an expression with !~ and an undefined method 3648s - returns 'method' for an expression with '==' 3648s - returns 'method' for an expression with '!=' 3648s - returns 'method' for an expression with '!~' 3648s - returns 'expression' when passed a String 3648s - returns 'expression' when passed a Fixnum literal 3648s - returns 'expression' when passed a Bignum literal 3648s - returns 'expression' when passed a Float literal 3648s - returns 'expression' when passed a Range literal 3648s - returns 'expression' when passed a Regexp literal 3648s - returns 'expression' when passed an Array literal 3648s - returns 'expression' when passed a Hash literal 3648s - returns 'expression' when passed a Symbol literal 3648s 3648s The defined? keyword for an expression ||= 3648s - returns 'assignment' for assigning a local variable with '||=' 3648s - returns 'assignment' for assigning an instance variable with '||=' 3648s - returns 'assignment' for assigning a class variable with '||=' 3648s - returns 'assignment' for assigning a global variable with '||=' 3648s - returns 'assignment' for assigning a constant with '||=' 3648s - returns 'expression' for assigning a fully qualified constant with '||=' 3648s - returns 'assignment' for assigning an attribute with '||=' 3648s - returns 'assignment' for assigning a referenced element with '||=' 3648s 3648s The defined? keyword for an expression &&= 3648s - returns 'assignment' for assigning a local variable with '&&=' 3648s - returns 'assignment' for assigning an instance variable with '&&=' 3648s - returns 'assignment' for assigning a class variable with '&&=' 3648s - returns 'assignment' for assigning a global variable with '&&=' 3648s - returns 'assignment' for assigning a constant with '&&=' 3648s - returns 'expression' for assigning a fully qualified constant with '&&=' 3648s - returns 'assignment' for assigning an attribute with '&&=' 3648s - returns 'assignment' for assigning a referenced element with '&&=' 3648s 3648s The defined? keyword for an expression with logical connectives 3648s - returns nil for an expression with '!' and an undefined method 3648s - returns nil for an expression with '!' and an unset class variable 3648s - returns nil for an expression with 'not' and an undefined method 3648s - returns nil for an expression with 'not' and an unset class variable 3648s - does not propagate an exception raised by a method in a 'not' expression 3648s - returns 'expression' for an expression with '&&/and' and an unset global variable 3648s - returns 'expression' for an expression with '&&/and' and an unset instance variable 3648s - returns 'expression' for an expression '&&/and' regardless of its truth value 3648s - returns 'expression' for an expression with '||/or' and an unset global variable 3648s - returns 'expression' for an expression with '||/or' and an unset instance variable 3648s - returns 'expression' for an expression '||/or' regardless of its truth value 3648s - returns nil for an expression with '!' and an unset global variable 3648s - returns nil for an expression with '!' and an unset instance variable 3648s - returns 'method' for a 'not' expression with a method 3648s - calls a method in a 'not' expression and returns 'method' 3648s - returns nil for an expression with 'not' and an unset global variable 3648s - returns nil for an expression with 'not' and an unset instance variable 3648s - returns 'expression' for an expression with '&&/and' and an undefined method 3648s - returns 'expression' for an expression with '&&/and' and an unset class variable 3648s - does not call a method in an '&&' expression and returns 'expression' 3648s - does not call a method in an 'and' expression and returns 'expression' 3648s - returns 'expression' for an expression with '||/or' and an undefined method 3648s - returns 'expression' for an expression with '||/or' and an unset class variable 3648s - does not call a method in an '||' expression and returns 'expression' 3648s - does not call a method in an 'or' expression and returns 'expression' 3648s 3648s The defined? keyword for an expression with a dynamic String 3648s - returns 'expression' when the String contains a literal 3648s - returns 'expression' when the String contains a call to a defined method 3648s - returns 'expression' when the String contains a call to an undefined method 3648s - does not call the method in the String 3648s 3648s The defined? keyword for an expression with a dynamic Regexp 3648s - returns 'expression' when the Regexp contains a literal 3648s - returns 'expression' when the Regexp contains a call to a defined method 3648s - returns 'expression' when the Regexp contains a call to an undefined method 3648s - does not call the method in the Regexp 3648s 3648s The defined? keyword for variables 3648s - returns 'local-variable' when called with the name of a local variable 3648s - returns 'local-variable' when called with the name of a local variable assigned to nil 3648s - returns nil for an instance variable that has not been read 3648s - returns nil for an instance variable that has been read but not assigned to 3648s - returns 'instance-variable' for an instance variable that has been assigned 3648s - returns 'instance-variable' for an instance variable that has been assigned to nil 3648s - returns nil for a global variable that has not been read 3648s - returns nil for a global variable that has been read but not assigned to 3648s - returns 'global-variable' for a global variable that has been assigned nil 3648s - returns 'global-variable' for $! 3648s - returns 'global-variable for $~ 3648s - returns 'global-variable' for a global variable that has been assigned 3648s - returns nil for a class variable that has not been read 3648s - returns 'class variable' when called with the name of a class variable 3648s - returns 'local-variable' when called with the name of a block local 3648s 3648s The defined? keyword for variables when a String does not match a Regexp 3648s - returns 'global-variable' for $~ 3648s - returns nil for $& 3648s - returns nil for $` 3648s - returns nil for $' 3648s - returns nil for $+ 3648s - returns nil for any last match global 3648s 3648s The defined? keyword for variables when a String matches a Regexp 3648s - returns 'global-variable' for $~ 3648s - returns 'global-variable' for $& 3648s - returns 'global-variable' for $` 3648s - returns 'global-variable' for $' 3648s - returns 'global-variable' for $+ 3648s - returns 'global-variable' for the capture references 3648s - returns nil for non-captures 3648s 3648s The defined? keyword for variables when a Regexp does not match a String 3648s - returns 'global-variable' for $~ 3648s - returns nil for $& 3648s - returns nil for $` 3648s - returns nil for $' 3648s - returns nil for $+ 3648s - returns nil for any last match global 3648s 3648s The defined? keyword for variables when a Regexp matches a String 3648s - returns 'global-variable' for $~ 3648s - returns 'global-variable' for $& 3648s - returns 'global-variable' for $` 3648s - returns 'global-variable' for $' 3648s - returns 'global-variable' for $+ 3648s - returns 'global-variable' for the capture references 3648s - returns nil for non-captures 3648s 3648s The defined? keyword for a simple constant 3648s - returns 'constant' when the constant is defined 3648s - returns nil when the constant is not defined 3648s - does not call Object.const_missing if the constant is not defined 3648s - returns 'constant' for an included module 3648s - returns 'constant' for a constant defined in an included module 3648s 3648s The defined? keyword for a top-level constant 3648s - returns 'constant' when passed the name of a top-level constant 3648s - returns nil if the constant is not defined 3648s - does not call Object.const_missing if the constant is not defined 3648s 3648s The defined? keyword for a scoped constant 3648s - returns 'constant' when the scoped constant is defined 3648s - returns nil when the scoped constant is not defined 3648s - does not call .const_missing if the constant is not defined 3648s - returns nil when an undefined constant is scoped to a defined constant 3648s - returns nil when a constant is scoped to an undefined constant 3648s - returns nil when the undefined constant is scoped to an undefined constant 3648s - returns nil when a constant is defined on top-level but not on the module 3648s - returns nil when a constant is defined on top-level but not on the class 3648s - returns 'constant' if the scoped-scoped constant is defined 3648s 3648s The defined? keyword for a top-level scoped constant 3648s - returns 'constant' when the scoped constant is defined 3648s - returns nil when the scoped constant is not defined 3648s - returns nil when an undefined constant is scoped to a defined constant 3648s - returns nil when the undefined constant is scoped to an undefined constant 3648s - returns 'constant' if the scoped-scoped constant is defined 3648s 3648s The defined? keyword for a self-send method call scoped constant 3648s - returns nil if the constant is not defined in the scope of the method's value 3648s - returns 'constant' if the constant is defined in the scope of the method's value 3648s - returns nil if the last constant is not defined in the scope chain 3648s - returns nil if the middle constant is not defined in the scope chain 3648s - returns 'constant' if all the constants in the scope chain are defined 3648s 3648s The defined? keyword for a receiver method call scoped constant 3648s - returns nil if the constant is not defined in the scope of the method's value 3648s - returns 'constant' if the constant is defined in the scope of the method's value 3648s - returns nil if the last constant is not defined in the scope chain 3648s - returns nil if the middle constant is not defined in the scope chain 3648s - returns 'constant' if all the constants in the scope chain are defined 3648s 3648s The defined? keyword for a module method call scoped constant 3648s - returns nil if the constant is not defined in the scope of the method's value 3648s - returns 'constant' if the constant scoped by the method's value is defined 3648s - returns nil if the last constant in the scope chain is not defined 3648s - returns nil if the middle constant in the scope chain is not defined 3648s - returns 'constant' if all the constants in the scope chain are defined 3648s - returns nil if the outer scope constant in the receiver is not defined 3648s - returns nil if the scoped constant in the receiver is not defined 3648s - returns 'constant' if all the constants in the receiver are defined 3648s - returns 'constant' if all the constants in the receiver and scope chain are defined 3648s 3648s The defined? keyword for a variable scoped constant 3648s - returns nil if the instance scoped constant is not defined 3648s - returns 'constant' if the constant is defined in the scope of the instance variable 3648s - returns nil if the global scoped constant is not defined 3648s - returns 'constant' if the constant is defined in the scope of the global variable 3648s - returns nil if the class scoped constant is not defined 3648s - returns 'constant' if the constant is defined in the scope of the class variable 3648s - returns nil if the local scoped constant is not defined 3648s - returns 'constant' if the constant is defined in the scope of the local variable 3648s 3648s The defined? keyword for a self:: scoped constant 3648s - returns 'constant' for a constant explicitly scoped to self:: when set 3648s - returns 'constant' for a constant explicitly scoped to self:: in subclass's metaclass 3648s 3648s The defined? keyword for yield 3648s - returns nil if no block is passed to a method not taking a block parameter 3648s - returns nil if no block is passed to a method taking a block parameter 3648s - returns 'yield' if a block is passed to a method not taking a block parameter 3648s - returns 'yield' if a block is passed to a method taking a block parameter 3648s - returns 'yield' when called within a block 3648s 3648s The defined? keyword for super 3648s - returns nil when a superclass undef's the method 3648s 3648s The defined? keyword for super for a method taking no arguments 3648s - returns nil when no superclass method exists 3648s - returns nil from a block when no superclass method exists 3648s - returns nil from a #define_method when no superclass method exists 3648s - returns nil from a block in a #define_method when no superclass method exists 3648s - returns 'super' when a superclass method exists 3648s - returns 'super' from a block when a superclass method exists 3648s - returns 'super' from a #define_method when a superclass method exists 3648s - returns 'super' from a block in a #define_method when a superclass method exists 3648s - returns 'super' when the method exists in a supermodule 3648s 3648s The defined? keyword for super for a method taking arguments 3648s - returns nil when no superclass method exists 3648s - returns nil from a block when no superclass method exists 3648s - returns nil from a #define_method when no superclass method exists 3648s - returns nil from a block in a #define_method when no superclass method exists 3648s - returns 'super' when a superclass method exists 3648s - returns 'super' from a block when a superclass method exists 3648s - returns 'super' from a #define_method when a superclass method exists 3648s - returns 'super' from a block in a #define_method when a superclass method exists 3648s 3648s The defined? keyword for super within an included module's method 3648s - returns 'super' when a superclass method exists in the including hierarchy 3648s 3648s The defined? keyword for instance variables 3648s - returns 'instance-variable' if assigned 3648s - returns nil if not assigned 3648s 3648s The defined? keyword for pseudo-variables 3648s - returns 'expression' for __FILE__ 3648s - returns 'expression' for __LINE__ 3648s - returns 'expression' for __ENCODING__ 3648s 3648s The defined? keyword for conditional expressions 3648s - returns 'expression' for an 'if' conditional 3648s - returns 'expression' for an 'unless' conditional 3648s - returns 'expression' for ternary expressions 3648s 3648s The defined? keyword for case expressions 3648s - returns 'expression' 3648s 3648s The defined? keyword for loop expressions 3648s - returns 'expression' for a 'for' expression 3648s - returns 'expression' for a 'while' expression 3648s - returns 'expression' for an 'until' expression 3648s - returns 'expression' for a 'break' expression 3648s - returns 'expression' for a 'next' expression 3648s - returns 'expression' for a 'redo' expression 3648s - returns 'expression' for a 'retry' expression 3648s 3648s The defined? keyword for return expressions 3648s - returns 'expression' 3648s 3648s The defined? keyword for exception expressions 3648s - returns 'expression' 3648s 3648s delegation with def(...) 3648s - delegates rest and kwargs 3648s - delegates block 3648s - parses as open endless Range when brackets are omitted 3648s 3648s delegation with def(x, ...) 3648s - delegates rest and kwargs 3648s - delegates block 3648s 3648s The __ENCODING__ pseudo-variable 3648s - is an instance of Encoding 3648s - is US-ASCII by default 3648s - is the evaluated strings's one inside an eval 3648s - is the encoding specified by a magic comment inside an eval 3648s - is the encoding specified by a magic comment in the file 3648s - raises a SyntaxError if assigned to 3648s 3648s An ensure block inside a begin block 3648s - is executed when an exception is raised in it's corresponding begin block 3648s - is executed when an exception is raised and rescued in it's corresponding begin block 3648s - is executed even when a symbol is thrown in it's corresponding begin block 3648s - is executed when nothing is raised or thrown in it's corresponding begin block 3648s - has no return value 3648s - sets exception cause if raises exception in block and in ensure 3648s 3648s The value of an ensure expression, 3648s - in no-exception scenarios, is the value of the last statement of the protected body 3648s - when an exception is rescued, is the value of the rescuing block 3648s 3648s An ensure block inside a method 3648s - is executed when an exception is raised in the method 3648s - is executed when an exception is raised and rescued in the method 3648s - is executed even when a symbol is thrown in the method 3648s - has no impact on the method's implicit return value 3648s - has an impact on the method's explicit return value 3648s - has an impact on the method's explicit return value from rescue if returns explicitly 3648s - has no impact on the method's explicit return value from rescue if returns implicitly 3648s - suppresses exception raised in method if returns value explicitly 3648s - suppresses exception raised in rescue if returns value explicitly 3648s - overrides exception raised in rescue if raises exception itself 3648s - suppresses exception raised in method if raises exception itself 3648s 3648s An ensure block inside a class 3648s - is executed when an exception is raised 3648s - is executed when an exception is raised and rescued 3648s - is executed even when a symbol is thrown 3648s - is executed when nothing is raised or thrown 3648s - has no return value 3648s 3648s An ensure block inside {} block 3648s - is not allowed 3648s 3648s An ensure block inside 'do end' block 3648s - is executed when an exception is raised in it's corresponding begin block 3648s - is executed when an exception is raised and rescued in it's corresponding begin block 3648s - is executed even when a symbol is thrown in it's corresponding begin block 3648s - is executed when nothing is raised or thrown in it's corresponding begin block 3648s - has no return value 3648s 3648s `` 3648s - returns the output of the executed sub-process 3648s 3648s %x 3648s - is the same as `` 3648s 3648s The __FILE__ pseudo-variable 3648s - raises a SyntaxError if assigned to 3648s - equals (eval) inside an eval 3648s 3648s The __FILE__ pseudo-variable with require 3648s - equals the absolute path of a file loaded by an absolute path 3648s - equals the absolute path of a file loaded by a relative path 3648s 3648s The __FILE__ pseudo-variable with load 3648s - equals the absolute path of a file loaded by an absolute path 3648s - equals the absolute path of a file loaded by a relative path 3648s 3648s The for expression 3648s - iterates over an Enumerable passing each element to the block 3648s - iterates over a list of arrays and destructures with empty comma 3648s - iterates over an Hash passing each key-value pair to the block 3648s - iterates over any object responding to 'each' 3648s - allows an instance variable as an iterator name 3648s - allows a class variable as an iterator name 3648s - allows a constant as an iterator name 3648s - yields only as many values as there are arguments 3648s - optionally takes a 'do' after the expression 3648s - allows body begin on the same line if do is used 3648s - executes code in containing variable scope 3648s - executes code in containing variable scope with 'do' 3648s - does not try to access variables outside the method 3648s - returns expr 3648s - breaks out of a loop upon 'break', returning nil 3648s - allows 'break' to have an argument which becomes the value of the for expression 3648s - starts the next iteration with 'next' 3648s - repeats current iteration with 'redo' 3648s 3648s Hash literal 3648s - {} should return an empty hash 3648s - {} should return a new hash populated with the given elements 3648s - treats empty expressions as nils 3648s - freezes string keys on initialization 3648s - checks duplicated keys on initialization 3648s - checks duplicated float keys on initialization 3648s - accepts a hanging comma 3648s - recognizes '=' at the end of the key 3648s - with '==>' in the middle raises SyntaxError 3648s - constructs a new hash with the given elements 3648s - ignores a hanging comma 3648s - accepts mixed 'key: value' and 'key => value' syntax 3648s - accepts mixed 'key: value', 'key => value' and '"key"': value' syntax 3648s - expands an '**{}' element into the containing Hash literal initialization 3648s - expands an '**obj' element into the containing Hash literal initialization 3648s - expands a BasicObject using ** into the containing Hash literal initialization 3648s - expands an '**{}' or '**obj' element with the last key/value pair taking precedence 3648s - expands an '**{}' and warns when finding an additional duplicate key afterwards 3648s - merges multiple nested '**obj' in Hash literals 3648s - calls #to_hash to expand an '**obj' element 3648s - allows splatted elements keys that are not symbols 3648s - raises a TypeError if #to_hash does not return a Hash 3648s - raises a TypeError if the object does not respond to #to_hash 3648s - does not change encoding of literal string keys during creation 3648s - raises an EncodingError at parse time when Symbol key with invalid bytes 3648s - raises an EncodingError at parse time when Symbol key with invalid bytes and 'key: value' syntax used 3648s 3648s The ** operator 3648s - makes a copy when calling a method taking a keyword rest argument 3648s 3648s The ** operator hash with omitted value 3648s - accepts short notation 'key' for 'key: value' syntax 3648s - ignores hanging comma on short notation 3648s - accepts mixed syntax 3648s - works with methods and local vars 3648s 3648s Heredoc string 3648s - allows HEREDOC with < (*args, **kwargs) {} 3648s - works with (...) 3648s - works with call(*ruby2_keyword_args) 3648s - works with super(*ruby2_keyword_args) 3648s - works with zsuper 3648s - works with yield(*ruby2_keyword_args) 3648s - does not work with (*args) 3648s - works with call(*ruby2_keyword_args) with missing ruby2_keywords in between due to CRuby bug #18625 3648s 3648s Keyword arguments delegation omitted values 3648s - accepts short notation 'key' for 'key: value' syntax 3648s 3648s A lambda literal -> () { } 3648s - returns a Proc object when used in a BasicObject method 3648s - does not execute the block 3648s - returns a lambda 3648s - may include a rescue clause 3648s - may include a ensure clause 3648s - has its own scope for local variables 3648s 3648s A lambda literal -> () { } assigns no local variables 3648s - for definition 3648s @a = -> { } 3648s @b = ->() { } 3648s @c = -> () { } 3648s @d = -> do end 3648s 3648s A lambda literal -> () { } assigns variables from parameters 3648s - for definition '@a = -> (a) { a }' 3648s - for definition '@a = -> ((a)) { a }' 3648s - for definition '@a = -> ((*a, b)) { [a, b] }' 3648s - for definition '@a = -> (a={}) { a }' 3648s - for definition '@a = -> (*) { }' 3648s - for definition '@a = -> (*a) { a }' 3648s - for definition '@a = -> (a:) { a }' 3648s - for definition '@a = -> (a: 1) { a }' 3648s - for definition '@a = -> (**) { }' 3648s - for definition '@a = -> (**k) { k }' 3648s - for definition '@a = -> (&b) { b }' 3648s - for definition '@a = -> (a, b) { [a, b] }' 3648s - for definition 3648s @a = -> ((a, b, *c, d), (*e, f, g), (*h)) do 3648s [a, b, c, d, e, f, g, h] 3648s end 3648s - for definition 3648s @a = -> (a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))) do 3648s [a, b, c, d, e, f, g, h, i, j] 3648s end 3648s - for definition '@a = -> (*, **k) { k }' 3648s - for definition '@a = -> (*, &b) { b }' 3648s - for definition '@a = -> (a:, b:) { [a, b] }' 3648s - for definition '@a = -> (a:, b: 1) { [a, b] }' 3648s - for definition '@a = -> (a: 1, b:) { [a, b] }' 3648s - for definition 3648s @a = -> (a: @a = -> (a: 1) { a }, b:) do 3648s [a, b] 3648s end 3648s - for definition '@a = -> (a: 1, b: 2) { [a, b] }' 3648s - for definition 3648s @a = -> (a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) do 3648s [a, b, c, d, e, f, g, h, k, l] 3648s end 3648s - for definition 3648s @a = -> a, b=1, *c, d, e:, f: 2, g:, **k, &l do 3648s [a, b, c, d, e, f, g, k, l] 3648s end 3648s 3648s A lambda literal -> () { } assigns variables from parameters with circular optional argument reference 3648s - raises a SyntaxError if using an existing local with the same name as the argument 3648s - raises a SyntaxError if there is an existing method with the same name as the argument 3648s - calls an existing method with the same name as the argument if explicitly using () 3648s 3648s A lambda expression 'lambda { ... }' 3648s - calls the #lambda method 3648s - does not execute the block 3648s - returns a lambda 3648s - requires a block 3648s - may include a rescue clause 3648s 3648s A lambda expression 'lambda { ... }' with an implicit block 3648s - raises ArgumentError 3648s 3648s A lambda expression 'lambda { ... }' assigns no local variables 3648s - for definition 3648s @a = lambda { } 3648s @b = lambda { || } 3648s 3648s A lambda expression 'lambda { ... }' assigns variables from parameters 3648s - for definition '@a = lambda { |a| a }' 3648s - for definition 3648s def m(*a) yield(*a) end 3648s @a = lambda { |a| a } 3648s - for definition '@a = lambda { |a, | a }' 3648s - for definition 3648s def m(a) yield a end 3648s def m2() yield end 3648s @a = lambda { |a, | a } 3648s - for definition '@a = lambda { |(a)| a }' 3648s - for definition '@a = lambda { |(*a, b)| [a, b] }' 3648s - for definition '@a = lambda { |a={}| a }' 3648s - for definition '@a = lambda { |*| }' 3648s - for definition '@a = lambda { |*a| a }' 3648s - for definition '@a = lambda { |a:| a }' 3648s - for definition '@a = lambda { |a: 1| a }' 3648s - for definition '@a = lambda { |**| }' 3648s - for definition '@a = lambda { |**k| k }' 3648s - for definition '@a = lambda { |&b| b }' 3648s - for definition '@a = lambda { |a, b| [a, b] }' 3648s - for definition 3648s @a = lambda do |(a, b, *c, d), (*e, f, g), (*h)| 3648s [a, b, c, d, e, f, g, h] 3648s end 3648s - for definition 3648s @a = lambda do |a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))| 3648s [a, b, c, d, e, f, g, h, i, j] 3648s end 3648s - for definition '@a = lambda { |*, **k| k }' 3648s - for definition '@a = lambda { |*, &b| b }' 3648s - for definition '@a = lambda { |a:, b:| [a, b] }' 3648s - for definition '@a = lambda { |a:, b: 1| [a, b] }' 3648s - for definition '@a = lambda { |a: 1, b:| [a, b] }' 3648s - for definition 3648s @a = lambda do |a: (@a = -> (a: 1) { a }), b:| 3648s [a, b] 3648s end 3648s - for definition '@a = lambda { |a: 1, b: 2| [a, b] }' 3648s - for definition 3648s @a = lambda do |a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l| 3648s [a, b, c, d, e, f, g, h, k, l] 3648s end 3648s - for definition 3648s @a = lambda do |a, b=1, *c, d, e:, f: 2, g:, **k, &l| 3648s [a, b, c, d, e, f, g, k, l] 3648s end 3648s 3648s The __LINE__ pseudo-variable 3648s - raises a SyntaxError if assigned to 3648s - equals the line number of the text inside an eval 3648s 3648s The __LINE__ pseudo-variable 3648s - equals the line number of the text in a loaded file 3648s 3648s The __LINE__ pseudo-variable 3648s - equals the line number of the text in a loaded file 3648s 3648s The __LINE__ pseudo-variable 3648s - equals the line number of the text in a loaded file 3648s 3648s The __LINE__ pseudo-variable 3648s - equals the line number of the text in a loaded file 3648s 3648s The loop expression 3648s - repeats the given block until a break is called 3648s - executes code in its own scope 3648s - returns the value passed to break if interrupted by break 3648s - returns nil if interrupted by break with no arguments 3648s - skips to end of body with next 3648s - restarts the current iteration with redo 3648s - uses a spaghetti nightmare of redo, next and break 3648s 3648s Magic comments in stdin 3651s - are optional 3654s - are case-insensitive 3657s - must be at the first line 3660s - must be the first token of the line 3663s - can be after the shebang 3666s - can take Emacs style 3668s - can take vim style 3671s - determine __ENCODING__ 3674s - do not cause bytes to be mangled by passing them through the wrong encoding 3674s 3674s Magic comments in an -e argument 3677s - are optional 3680s - are case-insensitive 3683s - must be at the first line 3686s - must be the first token of the line 3689s - can be after the shebang 3691s - can take Emacs style 3695s - can take vim style 3697s - determine __ENCODING__ 3697s 3697s Magic comments in the main file 3700s - are optional 3703s - are case-insensitive 3706s - must be at the first line 3709s - must be the first token of the line 3712s - can be after the shebang 3715s - can take Emacs style 3718s - can take vim style 3721s - determine __ENCODING__ 3724s - do not cause bytes to be mangled by passing them through the wrong encoding 3724s 3724s Magic comments in a loaded file 3724s - are optional 3724s - are case-insensitive 3724s - must be at the first line 3724s - must be the first token of the line 3724s - can be after the shebang 3724s - can take Emacs style 3724s - can take vim style 3724s - determine __ENCODING__ 3724s - do not cause bytes to be mangled by passing them through the wrong encoding 3724s 3724s Magic comments in a required file 3724s - are optional 3724s - are case-insensitive 3724s - must be at the first line 3724s - must be the first token of the line 3724s - can be after the shebang 3724s - can take Emacs style 3724s - can take vim style 3724s - determine __ENCODING__ 3724s - do not cause bytes to be mangled by passing them through the wrong encoding 3724s 3724s Magic comments in an eval 3724s - are optional 3724s - are case-insensitive 3724s - must be at the first line 3724s - must be the first token of the line 3724s - can be after the shebang 3724s - can take Emacs style 3724s - can take vim style 3724s - determine __ENCODING__ 3724s - do not cause bytes to be mangled by passing them through the wrong encoding 3724s 3724s The !~ operator 3724s - evaluates as a call to !~ 3724s 3724s The =~ operator 3724s - calls the =~ method 3724s 3724s The =~ operator with named captures on syntax of /regexp/ =~ string_variable 3724s - sets local variables by the captured pairs 3724s 3724s The =~ operator with named captures on syntax of 'string_literal' =~ /regexp/ 3724s - does not set local variables 3724s 3724s The =~ operator with named captures on syntax of string_variable =~ /regexp/ 3724s - does not set local variables 3724s 3724s The =~ operator with named captures on syntax of regexp_variable =~ string_variable 3724s - does not set local variables 3724s 3724s The =~ operator with named captures on the method calling 3724s - does not set local variables 3724s 3724s self in a metaclass body (class << obj) 3724s - is TrueClass for true 3724s - is FalseClass for false 3724s - is NilClass for nil 3724s - raises a TypeError for numbers 3724s - raises a TypeError for symbols 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1192: warning: empty expression 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1203: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1226: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1226: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1244: warning: empty expression 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/method_spec.rb:1252: warning: empty expression 3724s - is a singleton Class instance 3724s 3724s A constant on a metaclass 3724s - can be accessed after the metaclass body is reopened 3724s - can be accessed via self::CONST 3724s - can be accessed via const_get 3724s - is not defined on the object's class 3724s - is not defined in the metaclass opener's scope 3724s - cannot be accessed via object::CONST 3724s - raises a NameError for anonymous_module::CONST 3724s - appears in the metaclass constant list 3724s - does not appear in the object's class constant list 3724s - is not preserved when the object is duped 3724s - is preserved when the object is cloned 3724s 3724s calling methods on the metaclass 3724s - calls a method on the metaclass 3724s - calls a method on the instance's metaclass 3724s - calls a method in deeper chains of metaclasses 3724s 3724s A method send 3724s - for definition 'def m(a) a end' 3724s 3724s A method send with a single splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s A method send with a leading splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s A method send with a middle splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s - copies the splatted array 3724s - allows an array being splatted to be modified by another argument 3724s 3724s A method send with a trailing splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s A method send with a block argument 3724s - that refers to a proc passes the proc as the block 3724s - that is nil passes no block 3724s 3724s An element assignment method send with a single splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An element assignment method send with a leading splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An element assignment method send with a middle splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An element assignment method send with a trailing splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An attribute assignment method send with a single splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An attribute assignment method send with a leading splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An attribute assignment method send with a middle splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s An attribute assignment method send with a trailing splatted Object argument 3724s - does not call #to_ary 3724s - calls #to_a 3724s - wraps the argument in an Array if #to_a returns nil 3724s - raises a TypeError if #to_a does not return an Array 3724s 3724s A method 3724s - assigns the last Hash to the last optional argument if the Hash contains non-Symbol keys and is not passed as keywords 3724s 3724s A method assigns no local variables 3724s - for definition 3724s def m 3724s end 3724s - for definition 3724s def m() 3724s end 3724s 3724s A method assigns local variables from method parameters 3724s - for definition 'def m(a) a end' 3724s - for definition 'def m((a)) a end' 3724s - for definition 'def m((*a, b)) [a, b] end' 3724s - for definition 'def m(a=1) a end' 3724s - for definition 'def m() end' 3724s - for definition 'def m(*) end' 3724s - for definition 'def m(*a) a end' 3724s - for definition 'def m(a:) a end' 3724s - for definition 'def m(a:, **kw) [a, kw] end' 3724s - for definition 'def m(a: 1) a end' 3724s - for definition 'def m(**) end' 3724s - for definition 'def m(**k) k end' 3724s - for definition 'def m(**k); k end;' 3724s - for definition 'def m(&b) b end' 3724s - for definition 'def m(a, b) [a, b] end' 3724s - for definition 'def m(a, (b, c)) [a, b, c] end' 3724s - for definition 'def m((a), (b)) [a, b] end' 3724s - for definition 'def m((*), (*)) end' 3724s - for definition 'def m((*a), (*b)) [a, b] end' 3724s - for definition 3724s def m((a, b), (c, d)) 3724s [a, b, c, d] 3724s end 3724s - for definition 3724s def m((a, *b), (*c, d)) 3724s [a, b, c, d] 3724s end 3724s - for definition 3724s def m((a, b, *c, d), (*e, f, g), (*h)) 3724s [a, b, c, d, e, f, g, h] 3724s end 3724s - for definition 3724s def m(a, (b, (c, *d), *e)) 3724s [a, b, c, d, e] 3724s end 3724s - for definition 3724s def m(a, (b, (c, *d, (e, (*f)), g), (h, (i, j)))) 3724s [a, b, c, d, e, f, g, h, i, j] 3724s end 3724s - for definition 'def m(a, b=1) [a, b] end' 3724s - for definition 'def m(a, *) a end' 3724s - for definition 'def m(a, *b) [a, b] end' 3724s - for definition 'def m(a, b:) [a, b] end' 3724s - for definition 'def m(a, b: 1) [a, b] end' 3724s - for definition 'def m(a, **) a end' 3724s - for definition 'def m(a, **k) [a, k] end' 3724s - for definition 'def m(a, &b) [a, b] end' 3724s - for definition 'def m(a=1, b) [a, b] end' 3724s - for definition 'def m(a=1, *) a end' 3724s - for definition 'def m(a=1, *b) [a, b] end' 3724s - for definition 'def m(a=1, (b, c)) [a, b, c] end' 3724s - for definition 'def m(a=1, (b, (c, *d))) [a, b, c, d] end' 3724s - for definition 'def m(a=1, (b, (c, *d), *e)) [a, b, c, d, e] end' 3724s - for definition 'def m(a=1, (b), (c)) [a, b, c] end' 3724s - for definition 'def m(a=1, (*b), (*c)) [a, b, c] end' 3724s - for definition 'def m(a=1, (b, c), (d, e)) [a, b, c, d, e] end' 3724s - for definition 3724s def m(a=1, (b, *c), (*d, e)) 3724s [a, b, c, d, e] 3724s end 3724s - for definition 3724s def m(a=1, (b, *c), (d, (*e, f))) 3724s [a, b, c, d, e, f] 3724s end 3724s - for definition 'def m(a=1, b:) [a, b] end' 3724s - for definition 'def m(a=1, b: 2) [a, b] end' 3724s - for definition 'def m(a=1, **) a end' 3724s - for definition 'def m(a=1, **k) [a, k] end' 3724s - for definition 'def m(a=1, &b) [a, b] end' 3724s - for definition 'def m(*, a) a end' 3724s - for definition 'def m(*a, b) [a, b] end' 3724s - for definition 'def m(*, &b) b end' 3724s - for definition 'def m(*a, &b) [a, b] end' 3724s - for definition 'def m(a:, b:) [a, b] end' 3724s - for definition 'def m(a:, b: 1) [a, b] end' 3724s - for definition 'def m(a:, **) a end' 3724s - for definition 'def m(a:, **k) [a, k] end' 3724s - for definition 'def m(a:, &b) [a, b] end' 3724s - for definition 'def m(a: 1, b:) [a, b] end' 3724s - for definition 3724s def m(a: def m(a: 1) a end, b:) 3724s [a, b] 3724s end 3724s - for definition 'def m(a: 1, b: 2) [a, b] end' 3724s - for definition 'def m(a: 1, **) a end' 3724s - for definition 'def m(a: 1, **k) [a, k] end' 3724s - for definition 'def m(a: 1, &b) [a, b] end' 3724s - for definition 'def m(**, &b) b end' 3724s - for definition 'def m(**k, &b) [k, b] end' 3724s - for definition 3724s def m(a, b=1, *c, (*d, (e)), f: 2, g:, h:, **k, &l) 3724s [a, b, c, d, e, f, g, h, k, l] 3724s end 3724s - for definition 3724s def m(a, b=1, *c, d, e:, f: 2, g:, **k, &l) 3724s [a, b, c, d, e, f, g, k, l] 3724s end 3724s - for definition 'def m(a, **nil); a end;' 3724s - for definition 3724s def m(a, b = nil, c = nil, d, e: nil, **f) 3724s [a, b, c, d, e, f] 3724s end 3724s 3724s A method when passing an empty keyword splat to a method that does not accept keywords 3724s - for definition 'def m(*a); a; end' 3724s 3724s A method when passing an empty keyword splat to a method that does not accept keywords 3724s - for definition 'def m(a); a; end' 3724s 3724s A method raises ArgumentError if passing hash as keyword arguments 3724s - for definition 'def m(a: nil); a; end' 3724s 3724s A method call with a space between method name and parentheses 3724s - allows to pass a block with curly braces 3724s - allows to pass a block with do/end 3724s 3724s A method call with a space between method name and parentheses when no arguments provided 3724s - assigns nil 3724s 3724s A method call with a space between method name and parentheses when a single argument is provided 3724s - assigns a simple expression 3724s - assigns an expression consisting of multiple statements 3724s - assigns one single statement, without the need of parentheses 3724s 3724s A method call with a space between method name and parentheses when multiple arguments are provided 3724s - assigns simple expressions 3724s - assigns expressions consisting of multiple statements 3724s 3724s A method call with a space between method name and parentheses when the argument looks like an argument list 3724s - raises a syntax error 3724s 3724s An array-dereference method ([]) received the passed-in block 3724s - for definition 3724s def [](*, &b) 3724s b.call 3724s end 3724s - for definition 3724s def [](*) 3724s yield 3724s end 3724s 3724s An endless method definition without arguments 3724s - for definition 'def m() = 42' 3724s 3724s An endless method definition without arguments without parenthesis 3724s - for definition 'def m = 42' 3724s 3724s An endless method definition with arguments 3724s - for definition 'def m(a, b) = a + b' 3724s 3724s An endless method definition with multiline body 3724s - for definition 3724s def m(n) = 3724s if n > 2 3724s m(n - 2) + m(n - 1) 3724s else 3724s 1 3724s end 3724s 3724s An endless method definition with args forwarding 3724s - for definition 3724s def mm(word, num:) 3724s word * num 3724s end 3724s def m(...) = mm(...) + mm(...) 3724s 3724s Keyword arguments are now separated from positional arguments when the method has only positional parameters 3724s - treats incoming keyword arguments as positional for compatibility 3724s 3724s Keyword arguments are now separated from positional arguments when the method takes a ** parameter 3724s - captures the passed literal keyword arguments 3724s - captures the passed ** keyword arguments 3724s - does not convert a positional Hash to keyword arguments 3724s 3724s 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 ** 3724s - raises ArgumentError 3724s 3724s Keyword arguments are now separated from positional arguments when the method takes a key: parameter when it's called with ** 3724s - captures the passed keyword arguments 3724s 3724s kwarg with omitted value in a method call accepts short notation 'kwarg' in method call 3724s - for definition 'def call(*args, **kwargs) = [args, kwargs]' 3724s 3724s kwarg with omitted value in a method call with methods and local variables 3724s - for definition 3724s def call(*args, **kwargs) = [args, kwargs] 3724s def bar 3724s "baz" 3724s end 3724s def foo(val) 3724s call bar:, val: 3724s end 3724s 3724s Inside 'endless' method definitions 3724s - allows method calls without parenthesis 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/next_spec.rb:20: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/next_spec.rb:28: warning: unused literal ignored 3724s 3724s The module keyword 3724s - creates a new module without semicolon 3724s - creates a new module with a non-qualified constant name 3724s - creates a new module with a qualified constant name 3724s - creates a new module with a variable qualified constant name 3724s - reopens an existing module 3724s - reopens a module included in Object 3724s - raises a TypeError if the constant is a Class 3724s - raises a TypeError if the constant is a String 3724s - raises a TypeError if the constant is an Integer 3724s - raises a TypeError if the constant is nil 3724s - raises a TypeError if the constant is true 3724s - raises a TypeError if the constant is false 3724s 3724s Assigning an anonymous module to a constant 3724s - sets the name of the module 3724s - sets the name of a module scoped by an anonymous module 3724s - sets the name of contained modules when assigning a toplevel anonymous module 3724s 3724s The next statement from within the block 3724s - ends block execution 3724s - causes block to return nil if invoked without arguments 3724s - causes block to return nil if invoked with an empty expression 3724s - returns the argument passed 3724s - returns to the invoking method 3724s - returns to the invoking method, with the specified value 3724s - returns to the currently yielding method in case of chained calls 3724s - causes ensure blocks to run 3724s - skips following code outside an exception block 3724s - passes the value returned by a method with omitted parenthesis and passed block 3724s 3724s The next statement in a method 3724s - is invalid and raises a SyntaxError 3724s 3724s The next statement in a while loop 3724s - causes nested ensure blocks to run 3724s - causes ensure blocks to run when mixed with break 3724s 3724s The next statement in a while loop when not passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s The next statement in a while loop when passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s The next statement in an until loop 3724s - causes nested ensure blocks to run 3724s - causes ensure blocks to run when mixed with break 3724s 3724s The next statement in an until loop when not passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s The next statement in an until loop when passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s The next statement in a loop 3724s - causes nested ensure blocks to run 3724s - causes ensure blocks to run when mixed with break 3724s 3724s The next statement in a loop when not passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s The next statement in a loop when passed an argument 3724s - causes ensure blocks to run 3724s - causes ensure blocks to run when nested in an block 3724s 3724s Assignment via next 3724s - assigns objects 3724s - assigns splatted objects 3724s - assigns objects to a splatted reference 3724s - assigns splatted objects to a splatted reference via a splatted yield 3724s - assigns objects to multiple variables 3724s - assigns splatted objects to multiple variables 3724s 3724s The not keyword 3724s - negates a `true' value 3724s - negates a `false' value 3724s - accepts an argument 3724s - returns false if the argument is true 3724s - returns true if the argument is false 3724s - returns true if the argument is nil 3724s 3724s The `!' keyword 3724s - negates a `true' value 3724s - negates a `false' value 3724s - doubled turns a truthful object into `true' 3724s - doubled turns a not truthful object into `false' 3724s 3724s Numbered parameters 3724s - provides default parameters _1, _2, ... in a block 3724s - assigns nil to not passed parameters 3724s - supports variables _1-_9 only for the first 9 passed parameters 3724s - does not support more than 9 parameters 3724s - can not be used in both outer and nested blocks at the same time 3724s - cannot be overwritten with local variable 3724s - errors when numbered parameter is overwritten with local variable 3724s - raises SyntaxError when block parameters are specified explicitly 3724s - affects block arity 3724s - affects block parameters 3724s - affects binding local variables 3724s - does not work in methods 3724s 3724s Numbered parameters assigning to a numbered parameter 3724s - raises SyntaxError 3724s 3724s A number literal 3724s - can be a sequence of decimal digits 3724s - can have '_' characters between digits 3724s - cannot have a leading underscore 3724s - can have a decimal point 3724s - must have a digit before the decimal point 3724s - can have an exponent 3724s - can be a sequence of hexadecimal digits with a leading '0x' 3724s - can be a sequence of binary digits with a leading '0x' 3724s - can be a sequence of octal digits with a leading '0' 3724s - can be an integer literal with trailing 'r' to represent a Rational 3724s - can be an float literal with trailing 'r' to represent a Rational in a canonical form 3724s - can be a float literal with trailing 'r' to represent a Rational 3724s - can be a bignum literal with trailing 'r' to represent a Rational 3724s - can be a decimal literal with trailing 'r' to represent a Rational 3724s - can be a hexadecimal literal with trailing 'r' to represent a Rational 3724s - can be an octal literal with trailing 'r' to represent a Rational 3724s - can be a binary literal with trailing 'r' to represent a Rational 3724s - can be an integer literal with trailing 'i' to represent a Complex 3724s - can be a decimal literal with trailing 'i' to represent a Complex 3724s - can be a hexadecimal literal with trailing 'i' to represent a Complex 3724s - can be a octal literal with trailing 'i' to represent a Complex 3724s - can be a binary literal with trailing 'i' to represent a Complex 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:233: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:236: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:526: warning: unused literal ignored 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/optional_assignments_spec.rb:530: warning: unused literal ignored 3724s 3724s Optional variable assignments using ||= using a single variable 3724s - assigns a new variable 3724s - re-assigns an existing variable set to false 3724s - re-assigns an existing variable set to nil 3724s - does not re-assign a variable with a truthy value 3724s - does not evaluate the right side when not needed 3724s - does not re-assign a variable with a truthy value when using an inline rescue 3724s - returns the new value if set to false 3724s - returns the original value if truthy 3724s 3724s Optional variable assignments using ||= using an accessor 3724s - assigns a new variable 3724s - re-assigns an existing variable set to false 3724s - re-assigns an existing variable set to nil 3724s - does not re-assign a variable with a truthy value 3724s - does not evaluate the right side when not needed 3724s - does not re-assign a variable with a truthy value when using an inline rescue 3724s - does evaluate receiver only once when assigns 3724s - returns the new value if set to false 3724s - returns the original value if truthy 3724s - ignores method visibility when receiver is self 3724s 3724s Optional variable assignments using ||= using a #[] 3724s - returns the assigned value, not the result of the []= method with ||= 3724s - evaluates the index precisely once 3724s - evaluates the index arguments in the correct order 3724s - evaluates receiver only once when assigns 3724s - ignores method visibility when receiver is self 3724s 3724s Optional variable assignments using ||= using a #[] splatted argument 3724s - correctly handles it 3724s - calls #to_a only once 3724s - correctly handles a nested splatted argument 3724s - correctly handles multiple nested splatted arguments 3724s 3724s Optional variable assignments using &&= using a single variable 3724s - leaves new variable unassigned 3724s - leaves false 3724s - leaves nil 3724s - does not evaluate the right side when not needed 3724s - does re-assign a variable with a truthy value 3724s - does re-assign a variable with a truthy value when using an inline rescue 3724s 3724s Optional variable assignments using &&= using an accessor 3724s - leaves new variable unassigned 3724s - leaves false 3724s - leaves nil 3724s - does not evaluate the right side when not needed 3724s - does re-assign a variable with a truthy value 3724s - does re-assign a variable with a truthy value when using an inline rescue 3724s - does evaluate receiver only once when assigns 3724s - ignores method visibility when receiver is self 3724s 3724s Optional variable assignments using &&= using a #[] 3724s - leaves new variable unassigned 3724s - leaves false 3724s - leaves nil 3724s - does not evaluate the right side when not needed 3724s - does re-assign a variable with a truthy value 3724s - does re-assign a variable with a truthy value when using an inline rescue 3724s - returns the assigned value, not the result of the []= method with ||= 3724s - evaluates the index precisely once 3724s - evaluates the index arguments in the correct order 3724s - evaluates receiver only once when assigns 3724s - returns the assigned value, not the result of the []= method with += 3724s - ignores method visibility when receiver is self 3724s 3724s Optional variable assignments using &&= using a #[] splatted argument 3724s - correctly handles it 3724s - calls #to_a only once 3724s - correctly handles a nested splatted argument 3724s - correctly handles multiple nested splatted arguments 3724s 3724s Optional variable assignments using compounded constants 3724s - with ||= assignments 3724s - with ||= do not reassign 3724s - with &&= assignments 3724s - with &&= assignments will fail with non-existent constants 3724s - with operator assignments 3724s - with operator assignments will fail with non-existent constants 3724s 3724s Optional constant assignment with ||= 3724s - assigns a scoped constant if previously undefined 3724s - assigns a global constant if previously undefined 3724s - correctly defines non-existing constants 3724s - correctly overwrites nil constants 3724s - causes side-effects of the module part to be applied only once (for undefined constant) 3724s - causes side-effects of the module part to be applied only once (for nil constant) 3724s - does not evaluate the right-hand side if the module part raises an exception (for undefined constant) 3724s - does not evaluate the right-hand side if the module part raises an exception (for nil constant) 3724s 3724s Optional constant assignment with &&= 3724s - re-assigns a scoped constant if already true 3724s - leaves scoped constant if not true 3724s - causes side-effects of the module part to be applied only once (when assigns) 3724s 3724s The || operator 3724s - evaluates to true if any of its operands are true 3724s - evaluated to false if all of its operands are false 3724s - is evaluated before assignment operators 3724s - has a lower precedence than the && operator 3724s - treats empty expressions as nil 3724s - has a higher precedence than 'break' in 'break true || false' 3724s - has a higher precedence than 'next' in 'next true || false' 3724s - has a higher precedence than 'return' in 'return true || false' 3724s 3724s The or operator 3724s - evaluates to true if any of its operands are true 3724s - is evaluated after variables are assigned 3724s - has a lower precedence than the || operator 3724s - treats empty expressions as nil 3724s - has a lower precedence than 'break' in 'break true or false' 3724s - has a lower precedence than 'next' in 'next true or false' 3724s - has a lower precedence than 'return' in 'return true or false' 3724s 3724s A method call 3724s - evaluates the receiver first 3724s - evaluates arguments after receiver 3724s - evaluates arguments left-to-right 3724s - evaluates block pass after arguments 3724s - evaluates block pass after receiver 3724s 3724s Pattern matching 3724s - extends case expression with case/in construction 3724s - allows using then operator 3724s - binds variables 3724s - cannot mix in and when operators 3724s - checks patterns until the first matching 3724s - executes else clause if no pattern matches 3724s - raises NoMatchingPatternError if no pattern matches and no else clause 3724s - raises NoMatchingPatternError if no pattern matches and evaluates the expression only once 3724s - does not allow calculation or method calls in a pattern 3724s - evaluates the case expression once for multiple patterns, caching the result 3724s 3724s Pattern matching can be standalone assoc operator that 3724s - deconstructs value 3724s - deconstructs value and properly scopes variables 3724s 3724s Pattern matching find pattern 3724s - captures preceding elements to the pattern 3724s - captures following elements to the pattern 3724s - captures both preceding and following elements to the pattern 3724s - can capture the entirety of the pattern 3724s - will match an empty Array-like structure 3724s - can be nested 3724s - can be nested with an array pattern 3724s - can be nested within a hash pattern 3724s - can nest hash and array patterns 3724s 3724s Pattern matching warning when regular form 3724s - does not warn about pattern matching is experimental feature 3724s 3724s Pattern matching warning when one-line form 3724s - does not warn about pattern matching is experimental feature 3724s 3724s Pattern matching guards 3724s - supports if guard 3724s - supports unless guard 3724s - makes bound variables visible in guard 3724s - does not evaluate guard if pattern does not match 3724s - takes guards into account when there are several matching patterns 3724s - executes else clause if no guarded pattern matches 3724s - raises NoMatchingPatternError if no guarded pattern matches and no else clause 3724s 3724s Pattern matching value pattern 3724s - matches an object such that pattern === object 3724s - allows string literal with interpolation 3724s 3724s Pattern matching variable pattern 3724s - matches a value and binds variable name to this value 3724s - makes bounded variable visible outside a case statement scope 3724s - create local variables even if a pattern doesn't match 3724s - allow using _ name to drop values 3724s - supports using _ in a pattern several times 3724s - supports using any name with _ at the beginning in a pattern several times 3724s - does not support using variable name (except _) several times 3724s - supports existing variables in a pattern specified with ^ operator 3724s - allows applying ^ operator to bound variables 3724s - requires bound variable to be specified in a pattern before ^ operator when it relies on a bound variable 3724s 3724s Pattern matching alternative pattern 3724s - matches if any of patterns matches 3724s - does not support variable binding 3724s - support underscore prefixed variables in alternation 3724s - can be used as a nested pattern 3724s 3724s Pattern matching AS pattern 3724s - binds a variable to a value if pattern matches 3724s - can be used as a nested pattern 3724s 3724s Pattern matching Array pattern 3724s - supports form Constant(pat, pat, ...) 3724s - supports form Constant[pat, pat, ...] 3724s - supports form [pat, pat, ...] 3724s - supports form pat, pat, ... 3724s - matches an object with #deconstruct method which returns an array and each element in array matches element in pattern 3724s - calls #deconstruct once for multiple patterns, caching the result 3724s - calls #deconstruct even on objects that are already an array 3724s - does not match object if Constant === object returns false 3724s - checks Constant === object before calling #deconstruct 3724s - does not match object without #deconstruct method 3724s - raises TypeError if #deconstruct method does not return array 3724s - accepts a subclass of Array from #deconstruct 3724s - does not match object if elements of array returned by #deconstruct method does not match elements in pattern 3724s - binds variables 3724s - supports splat operator *rest 3724s - does not match partially by default 3724s - does match partially from the array beginning if list + , syntax used 3724s - matches [] with [] 3724s - matches anything with * 3724s - can be used as a nested pattern 3724s 3724s Pattern matching Hash pattern 3724s - supports form Constant(id: pat, id: pat, ...) 3724s - supports form Constant[id: pat, id: pat, ...] 3724s - supports form {id: pat, id: pat, ...} 3724s - supports form id: pat, id: pat, ... 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:240: warning: comparison '<=' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:241: warning: comparison '<=' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:243: warning: comparison '<' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:244: warning: comparison '<' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:246: warning: comparison '>=' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:247: warning: comparison '>=' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:249: warning: comparison '>' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:250: warning: comparison '>' after comparison 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:307: warning: literal in condition 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:430: warning: literal in condition 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:430: warning: literal in condition 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:431: warning: literal in condition 3724s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/language/precedence_spec.rb:431: warning: literal in condition 3724s - supports a: which means a: a 3724s - can mix key (a:) and key-value (a: b) declarations 3724s - supports 'string': key literal 3724s - does not support non-symbol keys 3724s - does not support string interpolation in keys 3724s - raise SyntaxError when keys duplicate in pattern 3724s - matches an object with #deconstruct_keys method which returns a Hash with equal keys and each value in Hash matches value in pattern 3724s - calls #deconstruct_keys per pattern 3724s - does not match object if Constant === object returns false 3724s - checks Constant === object before calling #deconstruct_keys 3724s - does not match object without #deconstruct_keys method 3724s - does not match object if #deconstruct_keys method does not return Hash 3724s - does not match object if #deconstruct_keys method returns Hash with non-symbol keys 3724s - does not match object if elements of Hash returned by #deconstruct_keys method does not match values in pattern 3724s - passes keys specified in pattern as arguments to #deconstruct_keys method 3724s - passes keys specified in pattern to #deconstruct_keys method if pattern contains double splat operator ** 3724s - passes nil to #deconstruct_keys method if pattern contains double splat operator **rest 3724s - binds variables 3724s - supports double splat operator **rest 3724s - treats **nil like there should not be any other keys in a matched Hash 3724s - can match partially 3724s - matches {} with {} 3724s - in {} only matches empty hashes 3724s - in {**nil} only matches empty hashes 3724s - matches anything with ** 3724s - can be used as a nested pattern 3724s 3724s Pattern matching refinements 3724s - are used for #deconstruct 3724s - are used for #deconstruct_keys 3724s - are used for #=== in constant pattern 3724s 3724s Pattern matching Ruby 3.1 improvements 3724s - can omit parentheses in one line pattern matching 3724s - supports pinning instance variables 3724s - supports pinning class variables 3724s - supports pinning global variables 3724s - supports pinning expressions 3724s - supports pinning expressions in array pattern 3724s - supports pinning expressions in hash pattern 3724s 3724s Pattern matching value in pattern 3724s - returns true if the pattern matches 3724s - returns false if the pattern does not match 3724s 3724s Operators 3724s - ! ~ + is right-associative 3724s - ** is right-associative 3724s - ** has higher precedence than unary minus 3724s - unary minus is right-associative 3724s - unary minus has higher precedence than * / % 3724s - treats +/- as a regular send if the arguments are known locals or block locals 3724s - * / % are left-associative 3724s - * / % have higher precedence than + - 3724s - + - are left-associative 3724s - + - have higher precedence than >> << 3724s - >> << are left-associative 3724s - >> << have higher precedence than & 3724s - & is left-associative 3724s - & has higher precedence than ^ | 3724s - ^ | are left-associative 3724s - ^ | have higher precedence than <= < > >= 3724s - <= < > >= are left-associative 3724s - <=> == === != =~ !~ are non-associative 3724s - <=> == === != =~ !~ have higher precedence than && 3724s - && is left-associative 3724s - && has higher precedence than || 3724s - || is left-associative 3724s - || has higher precedence than .. ... 3724s - .. ... are non-associative 3724s - .. ... have higher precedence than ? : 3724s - ? : is right-associative 3724s - ? : has higher precedence than rescue 3724s - rescue is left-associative 3724s - rescue has higher precedence than = 3724s - = %= /= -= += |= &= >>= <<= *= &&= ||= **= are right-associative 3724s - = %= /= -= += |= &= >>= <<= *= &&= ||= **= have higher precedence than defined? operator 3724s - defined? is non-associative 3724s - defined? has higher precedence than not 3724s - not is right-associative 3724s - not has higher precedence than or/and 3724s - or/and are left-associative 3724s - or/and have higher precedence than if unless while until modifiers 3724s - if unless while until are non-associative 3724s 3724s The TOPLEVEL_BINDING constant 3727s - only includes local variables defined in the main script, not in required files or eval 3730s - has no local variables in files required before the main script 3733s - merges local variables of the main script with dynamically-defined Binding variables 3736s - gets updated variables values as they are defined and set 3738s - is always the same object for all top levels 3739s 3739s The private keyword 3739s - marks following methods as being private 3739s - has no effect on def expr.meth() methods 3739s - is overridden when a new class is opened 3739s - is no longer in effect when the class is closed 3739s - changes visibility of previously called method 3739s - changes visibility of previously called methods with same send/call site 3739s - changes the visibility of the existing method in the subclass 3739s 3739s A Proc 3739s - captures locals from the surrounding scope 3739s - does not capture a local when an argument has the same name 3739s 3739s A Proc taking zero arguments 3739s - does not raise an exception if no values are passed 3739s - raises an ArgumentError if a value is passed 3739s 3739s A Proc taking || arguments 3739s - does not raise an exception when passed no values 3739s - raises an ArgumentError if a value is passed 3739s 3739s A Proc taking |a| arguments 3739s - assigns the value passed to the argument 3739s - does not destructure a single Array value 3739s - does not call #to_ary to convert a single passed object to an Array 3739s - raises an ArgumentError if no value is passed 3739s 3739s A Proc taking |a, b| arguments 3739s - raises an ArgumentError if passed no values 3739s - raises an ArgumentError if passed one value 3739s - assigns the values passed to the arguments 3739s - does not call #to_ary to convert a single passed object to an Array 3739s 3739s A Proc taking |a, *b| arguments 3739s - raises an ArgumentError if passed no values 3739s - does not destructure a single Array value yielded 3739s - assigns all passed values after the first to the rest argument 3739s - does not call #to_ary to convert a single passed object to an Array 3739s 3739s A Proc taking |*| arguments 3739s - does not raise an exception when passed no values 3739s - does not raise an exception when passed multiple values 3739s - does not call #to_ary to convert a single passed object to an Array 3739s 3739s A Proc taking |*a| arguments 3739s - assigns [] to the argument when passed no values 3739s - assigns the argument an Array wrapping one passed value 3739s - assigns the argument an Array wrapping all values passed 3739s - does not call #to_ary to convert a single passed object to an Array 3739s 3739s A Proc taking |*a, b| arguments 3739s - assigns [] to the argument when passed no values 3739s 3739s A Proc taking |a, *b, c| arguments 3739s - assigns [] to the argument when passed no values 3739s 3739s A Proc taking |a, | arguments 3739s - raises an ArgumentError when passed no values 3739s - raises an ArgumentError when passed more than one value 3739s - assigns the argument the value passed 3739s - does not destructure when passed a single Array 3739s - does not call #to_ary to convert a single passed object to an Array 3739s 3739s A Proc taking |(a, b)| arguments 3739s - raises an ArgumentError when passed no values 3739s - destructures a single Array value yielded 3739s - calls #to_ary to convert a single passed object to an Array 3739s - raises a TypeError if #to_ary does not return an Array 3739s 3739s A Proc taking |*a, **kw| arguments 3739s - does not autosplat keyword arguments 3739s 3739s A Proc taking |required keyword arguments, **kw| arguments 3739s - raises ArgumentError for missing required argument 3739s 3739s Literal Ranges 3739s - creates range object 3739s - creates range with excluded right boundary 3739s - creates endless ranges 3739s - creates beginless ranges 3739s 3739s The redo statement 3739s - restarts block execution if used within block 3739s - re-executes the closest loop 3739s - re-executes the last step in enumeration 3739s - triggers ensure block when re-executing a block 3739s 3739s Regexps with anchors 3739s - supports ^ (line start anchor) 3739s - does not match ^ after trailing \n 3739s - supports $ (line end anchor) 3739s - supports \A (string start anchor) 3739s - supports \Z (string end anchor, including before trailing \n) 3739s - supports \z (string end anchor) 3739s - supports \b (word boundary) 3739s - supports \B (non-word-boundary) 3739s - supports (?= ) (positive lookahead) 3739s - supports (?! ) (negative lookahead) 3739s - supports (?!<) (negative lookbehind) 3739s - supports (?<=) (positive lookbehind) 3739s - supports (?<=\b) (positive lookbehind with word boundary) 3739s - supports (?!<\b) (negative lookbehind with word boundary) 3739s 3739s Regexps with back-references 3739s - saves match data in the $~ pseudo-global variable 3739s - saves captures in numbered $[1-N] variables 3739s - will not clobber capture variables across threads 3739s - supports (backreference to previous group match) 3739s - resets nested backreference before match of outer subexpression 3739s - does not reset enclosed capture groups 3739s - can match an optional quote, followed by content, followed by a matching quote, as the whole string 3739s - allows forward references 3739s - disallows forward references >= 10 3739s - fails when trying to match a backreference to an unmatched capture group 3739s - ignores backreferences > 1000 3739s - 0 is not a valid backreference 3739s - allows numeric conditional backreferences 3739s - allows either <> or '' in named conditional backreferences 3739s - allows negative numeric backreferences 3739s - delimited numeric backreferences can start with 0 3739s - regular numeric backreferences cannot start with 0 3739s - named capture groups invalidate numeric backreferences 3739s - treats + or - as the beginning of a level specifier in \k<> backreferences and (?(...)...|...) conditional backreferences 3739s 3739s Regexp with character classes 3739s - supports \w (word character) 3739s - supports \W (non-word character) 3739s - supports \s (space character) 3739s - supports \S (non-space character) 3739s - supports \d (numeric digit) 3739s - supports \D (non-digit) 3739s - supports [] (character class) 3739s - supports [[:alpha:][:digit:][:etc:]] (predefined character classes) 3739s - matches ASCII characters with [[:ascii:]] 3739s - doesn't match non-ASCII characters with [[:ascii:]] 3739s - matches Unicode letter characters with [[:alnum:]] 3739s - matches Unicode digits with [[:alnum:]] 3739s - doesn't matches Unicode marks with [[:alnum:]] 3739s - doesn't match Unicode control characters with [[:alnum:]] 3739s - doesn't match Unicode punctuation characters with [[:alnum:]] 3739s - matches Unicode letter characters with [[:alpha:]] 3739s - doesn't match Unicode digits with [[:alpha:]] 3739s - doesn't matches Unicode marks with [[:alpha:]] 3739s - doesn't match Unicode control characters with [[:alpha:]] 3739s - doesn't match Unicode punctuation characters with [[:alpha:]] 3739s - matches Unicode space characters with [[:blank:]] 3739s - doesn't match Unicode control characters with [[:blank:]] 3739s - doesn't match Unicode punctuation characters with [[:blank:]] 3739s - doesn't match Unicode letter characters with [[:blank:]] 3739s - doesn't match Unicode digits with [[:blank:]] 3739s - doesn't match Unicode marks with [[:blank:]] 3739s - doesn't Unicode letter characters with [[:cntrl:]] 3739s - doesn't match Unicode digits with [[:cntrl:]] 3739s - doesn't match Unicode marks with [[:cntrl:]] 3739s - doesn't match Unicode punctuation characters with [[:cntrl:]] 3739s - matches Unicode control characters with [[:cntrl:]] 3739s - doesn't match Unicode format characters with [[:cntrl:]] 3739s - doesn't match Unicode private-use characters with [[:cntrl:]] 3739s - doesn't match Unicode letter characters with [[:digit:]] 3739s - matches Unicode digits with [[:digit:]] 3739s - doesn't match Unicode marks with [[:digit:]] 3739s - doesn't match Unicode punctuation characters with [[:digit:]] 3739s - doesn't match Unicode control characters with [[:digit:]] 3739s - doesn't match Unicode format characters with [[:digit:]] 3739s - doesn't match Unicode private-use characters with [[:digit:]] 3739s - matches Unicode letter characters with [[:graph:]] 3739s - matches Unicode digits with [[:graph:]] 3739s - matches Unicode marks with [[:graph:]] 3739s - matches Unicode punctuation characters with [[:graph:]] 3739s - doesn't match Unicode control characters with [[:graph:]] 3739s - match Unicode format characters with [[:graph:]] 3739s - match Unicode private-use characters with [[:graph:]] 3739s - matches Unicode lowercase letter characters with [[:lower:]] 3739s - doesn't match Unicode uppercase letter characters with [[:lower:]] 3739s - doesn't match Unicode title-case characters with [[:lower:]] 3739s - doesn't match Unicode digits with [[:lower:]] 3739s - doesn't match Unicode marks with [[:lower:]] 3739s - doesn't match Unicode punctuation characters with [[:lower:]] 3739s - doesn't match Unicode control characters with [[:lower:]] 3739s - doesn't match Unicode format characters with [[:lower:]] 3739s - doesn't match Unicode private-use characters with [[:lower:]] 3739s - matches Unicode lowercase letter characters with [[:print:]] 3739s - matches Unicode uppercase letter characters with [[:print:]] 3739s - matches Unicode title-case characters with [[:print:]] 3739s - matches Unicode digits with [[:print:]] 3739s - matches Unicode marks with [[:print:]] 3739s - matches Unicode punctuation characters with [[:print:]] 3739s - doesn't match Unicode control characters with [[:print:]] 3739s - match Unicode format characters with [[:print:]] 3739s - match Unicode private-use characters with [[:print:]] 3739s - doesn't match Unicode lowercase letter characters with [[:punct:]] 3739s - doesn't match Unicode uppercase letter characters with [[:punct:]] 3739s - doesn't match Unicode title-case characters with [[:punct:]] 3739s - doesn't match Unicode digits with [[:punct:]] 3739s - doesn't match Unicode marks with [[:punct:]] 3739s - matches Unicode Pc characters with [[:punct:]] 3739s - matches Unicode Pd characters with [[:punct:]] 3739s - matches Unicode Ps characters with [[:punct:]] 3739s - matches Unicode Pe characters with [[:punct:]] 3739s - matches Unicode Pi characters with [[:punct:]] 3739s - matches Unicode Pf characters with [[:punct:]] 3739s - matches Unicode Po characters with [[:punct:]] 3739s - doesn't match Unicode format characters with [[:punct:]] 3739s - doesn't match Unicode private-use characters with [[:punct:]] 3739s - doesn't match Unicode lowercase letter characters with [[:space:]] 3739s - doesn't match Unicode uppercase letter characters with [[:space:]] 3739s - doesn't match Unicode title-case characters with [[:space:]] 3739s - doesn't match Unicode digits with [[:space:]] 3739s - doesn't match Unicode marks with [[:space:]] 3739s - matches Unicode Zs characters with [[:space:]] 3739s - matches Unicode Zl characters with [[:space:]] 3739s - matches Unicode Zp characters with [[:space:]] 3739s - doesn't match Unicode format characters with [[:space:]] 3739s - doesn't match Unicode private-use characters with [[:space:]] 3739s - doesn't match Unicode lowercase characters with [[:upper:]] 3739s - matches Unicode uppercase characters with [[:upper:]] 3739s - doesn't match Unicode title-case characters with [[:upper:]] 3739s - doesn't match Unicode digits with [[:upper:]] 3739s - doesn't match Unicode marks with [[:upper:]] 3739s - doesn't match Unicode punctuation characters with [[:upper:]] 3739s - doesn't match Unicode control characters with [[:upper:]] 3739s - doesn't match Unicode format characters with [[:upper:]] 3739s - doesn't match Unicode private-use characters with [[:upper:]] 3739s - doesn't match Unicode letter characters [^a-fA-F] with [[:xdigit:]] 3739s - matches Unicode letter characters [a-fA-F] with [[:xdigit:]] 3739s - doesn't match Unicode digits [^0-9] with [[:xdigit:]] 3739s - doesn't match Unicode marks with [[:xdigit:]] 3739s - doesn't match Unicode punctuation characters with [[:xdigit:]] 3739s - doesn't match Unicode control characters with [[:xdigit:]] 3739s - doesn't match Unicode format characters with [[:xdigit:]] 3739s - doesn't match Unicode private-use characters with [[:xdigit:]] 3739s - matches Unicode lowercase characters with [[:word:]] 3739s - matches Unicode uppercase characters with [[:word:]] 3739s - matches Unicode title-case characters with [[:word:]] 3739s - matches Unicode decimal digits with [[:word:]] 3739s - matches Unicode marks with [[:word:]] 3739s - match Unicode Nl characters with [[:word:]] 3739s - doesn't match Unicode No characters with [[:word:]] 3739s - doesn't match Unicode punctuation characters with [[:word:]] 3739s - doesn't match Unicode control characters with [[:word:]] 3739s - doesn't match Unicode format characters with [[:word:]] 3739s - doesn't match Unicode private-use characters with [[:word:]] 3739s - matches unicode named character properties 3739s - matches unicode abbreviated character properties 3739s - matches unicode script properties 3739s - matches unicode Han properties 3739s - matches unicode Hiragana properties 3739s - matches unicode Katakana properties 3739s - matches unicode Hangul properties 3739s - supports negated property condition 3739s - raises a RegexpError for an unterminated unicode property 3739s - supports \X (unicode 9.0 with UTR #51 workarounds) 3739s 3739s empty checks in Regexps 3739s - allow extra empty iterations 3739s - allow empty iterations in the middle of a loop 3739s - make the Regexp proceed past the quantified expression on failure 3739s - shouldn't cause the Regexp parser to get stuck in a loop 3739s 3739s Regexps with encoding modifiers 3739s - supports /e (EUC encoding) 3739s - supports /e (EUC encoding) with interpolation 3739s - supports /e (EUC encoding) with interpolation /o 3739s - uses EUC-JP as /e encoding 3739s - preserves EUC-JP as /e encoding through interpolation 3739s - supports /n (No encoding) 3739s - supports /n (No encoding) with interpolation 3739s - supports /n (No encoding) with interpolation /o 3739s - warns when using /n with a match string with non-ASCII characters and an encoding other than ASCII-8BIT 3739s - uses US-ASCII as /n encoding if all chars are 7-bit 3739s - uses BINARY when is not initialized 3739s - uses BINARY as /n encoding if not all chars are 7-bit 3739s - preserves US-ASCII as /n encoding through interpolation if all chars are 7-bit 3739s - preserves BINARY as /n encoding through interpolation if all chars are 7-bit 3739s - supports /s (Windows_31J encoding) 3739s - supports /s (Windows_31J encoding) with interpolation 3739s - supports /s (Windows_31J encoding) with interpolation and /o 3739s - uses Windows-31J as /s encoding 3739s - preserves Windows-31J as /s encoding through interpolation 3739s - supports /u (UTF8 encoding) 3739s - supports /u (UTF8 encoding) with interpolation 3739s - supports /u (UTF8 encoding) with interpolation and /o 3739s - uses UTF-8 as /u encoding 3739s - preserves UTF-8 as /u encoding through interpolation 3739s - selects last of multiple encoding specifiers 3739s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/mspec/lib/mspec/runner/mspec.rb:100: warning: Unknown escape \y is ignored 3739s - raises Encoding::CompatibilityError when trying match against different encodings 3739s - raises Encoding::CompatibilityError when trying match? against different encodings 3739s - raises Encoding::CompatibilityError when trying =~ against different encodings 3739s - raises Encoding::CompatibilityError when the regexp has a fixed, non-ASCII-compatible encoding 3739s - raises Encoding::CompatibilityError when the regexp has a fixed encoding and the match string has non-ASCII characters 3739s - raises ArgumentError when trying to match a broken String 3739s - computes the Regexp Encoding for each interpolated Regexp instance 3739s 3739s Regexps with escape characters 3739s - supports escape sequences 3739s - supports quoting meta-characters via escape sequence 3739s - supports quoting meta-characters via escape sequence when used as a terminator 3739s - supports quoting non-meta-characters via escape sequence when used as a terminator 3739s - does not change semantics of escaped non-meta-character when used as a terminator 3739s - does not change semantics of escaped meta-character when used as a terminator 3739s - allows any character to be escaped 3739s - supports \x (hex characters) 3739s - supports \c (control characters) 3739s - handles three digit octal escapes starting with 0 3739s - handles control escapes with \C-x syntax 3739s - supports the \K keep operator 3739s - supports the \R line break escape 3739s 3739s Regexps with grouping 3739s - support () 3739s - allows groups to be nested 3739s - raises a SyntaxError when parentheses aren't balanced 3739s - supports (?: ) (non-capturing group) 3739s - group names cannot start with digits or minus 3739s - ignore capture groups in line comments 3739s - does not consider # inside a character class as a comment 3739s 3739s Regexps with interpolation 3739s - allows interpolation of strings 3739s - allows interpolation of literal regexps 3739s - allows interpolation of any object that responds to to_s 3739s - allows interpolation which mixes modifiers 3739s - allows interpolation to interact with other Regexp constructs 3739s - gives precedence to escape sequences over substitution 3739s - throws RegexpError for malformed interpolation 3739s - allows interpolation in extended mode 3739s - allows escape sequences in interpolated regexps 3739s 3739s Regexps with modifiers 3739s - supports /i (case-insensitive) 3739s - supports /m (multiline) 3739s - supports /x (extended syntax) 3739s - supports /o (once) 3739s - invokes substitutions for /o only once 3739s - supports modifier combinations 3739s - supports (?~) (absent operator) 3739s - supports (?imx-imx) (inline modifiers) 3739s - supports (?imx-imx:expr) (scoped inline modifiers) 3739s - supports . with /m 3739s - supports ASCII/Unicode modifiers 3739s 3739s Regexps with repetition 3739s - supports * (0 or more of previous subexpression) 3739s - supports *? (0 or more of previous subexpression - lazy) 3739s - supports + (1 or more of previous subexpression) 3739s - supports +? (0 or more of previous subexpression - lazy) 3739s - supports {m,n} (m to n of previous subexpression) 3739s - supports {m,n}? (m to n of previous subexpression) - lazy) 3739s - does not treat {m,n}+ as possessive 3739s - supports ? (0 or 1 of previous subexpression) 3739s - handles incomplete range quantifiers 3739s - lets us use quantifiers on assertions 3739s - does not delete optional assertions 3739s - supports nested quantifiers 3739s - treats ? after {n} quantifier as another quantifier, not as non-greedy marker 3739s - matches zero-width capture groups in optional iterations of loops 3739s 3739s Regexps with subexpression calls 3739s - allows numeric subexpression calls 3739s - treats subexpression calls as distinct from simple back-references 3739s - allows recursive subexpression calls 3739s - allows access to back-references from the current level 3739s - allows + and - in group names and referential constructs that don't use levels, i.e. subexpression calls 3739s 3739s Literal Regexps 3739s - matches against $_ (last input) in a conditional if no explicit matchee provided 3739s - yields a Regexp 3739s - is frozen 3739s - caches the Regexp object 3739s - throws SyntaxError for malformed literals 3739s - supports paired delimiters with %r 3739s - supports grouping constructs that are also paired delimiters 3739s - allows second part of paired delimiters to be used as non-paired delimiters 3739s - disallows first part of paired delimiters to be used as non-paired delimiters 3739s - supports non-paired delimiters delimiters with %r 3739s - disallows alphabets as non-paired delimiter with %r 3739s - disallows spaces after %r and delimiter 3739s - allows unescaped / to be used with %r 3739s - supports . (any character except line terminator) 3739s - supports | (alternations) 3739s - supports (?> ) (embedded subexpression) 3739s - supports (?# ) 3739s - supports (?<= ) (positive lookbehind) 3739s - supports (? 3807s - calls <=> left to right and return first non-0 result 3807s - returns 0 if the arrays are equal 3807s - returns -1 if the array is shorter than the other array 3807s - returns +1 if the array is longer than the other array 3807s - returns -1 if the arrays have same length and a pair of corresponding elements returns -1 for <=> 3807s - returns +1 if the arrays have same length and a pair of corresponding elements returns +1 for <=> 3807s - properly handles recursive arrays 3807s - tries to convert the passed argument to an Array using #to_ary 3807s - does not call #to_ary on Array subclasses 3807s - returns nil when the argument is not array-like 3807s 3807s Array#concat 3807s - returns the array itself 3807s - appends the elements in the other array 3807s - does not loop endlessly when argument is self 3807s - tries to convert the passed argument to an Array using #to_ary 3807s - does not call #to_ary on Array subclasses 3807s - raises a FrozenError when Array is frozen and modification occurs 3807s - raises a FrozenError when Array is frozen and no modification occurs 3807s - appends elements to an Array with enough capacity that has been shifted 3807s - appends elements to an Array without enough capacity that has been shifted 3807s - takes multiple arguments 3807s - concatenates the initial value when given arguments contain 2 self 3807s - returns self when given no arguments 3807s 3807s Array.[] 3807s - returns a new array populated with the given elements 3807s 3807s Array[] 3807s - is a synonym for .[] 3807s 3807s Array#count 3807s - returns the number of elements 3807s - returns the number of elements that equal the argument 3807s - returns the number of element for which the block evaluates to true 3807s - ignores the block if there is an argument 3807s 3807s Array#count when a block argument given 3807s - tolerates increasing an array size during iteration 3807s 3807s Array#cycle 3807s - does not yield and returns nil when the array is empty and passed value is an integer 3807s - does not yield and returns nil when the array is empty and passed value is nil 3807s - does not yield and returns nil when passed 0 3807s - iterates the array 'count' times yielding each item to the block 3807s - iterates indefinitely when not passed a count 3807s - iterates indefinitely when passed nil 3807s - does not rescue StopIteration when not passed a count 3807s - does not rescue StopIteration when passed a count 3807s - iterates the array Integer(count) times when passed a Float count 3807s - calls #to_int to convert count to an Integer 3807s - raises a TypeError if #to_int does not return an Integer 3807s - raises a TypeError if passed a String 3807s - raises a TypeError if passed an Object 3807s - raises a TypeError if passed true 3807s - raises a TypeError if passed false 3807s 3807s Array#cycle when no block is given returned Enumerator size 3807s - should be the result of multiplying the enumerable size by the argument passed 3807s - should be zero when the argument passed is 0 or less 3807s - should be Float::INFINITY when no argument is passed 3807s 3807s Array#deconstruct 3807s - returns self 3807s 3807s Array#delete_at 3807s - removes the element at the specified index 3807s - returns the removed element at the specified index 3807s - returns nil and makes no modification if the index is out of range 3807s - tries to convert the passed argument to an Integer using #to_int 3807s - accepts negative indices 3807s - raises a FrozenError on a frozen array 3807s 3807s Array#delete_if 3807s - removes each element for which block returns true 3807s - returns self 3807s - returns an Enumerator if no block given 3807s - returns self when called on an Array emptied with #shift 3807s - returns an Enumerator if no block given, and the enumerator can modify the original array 3807s - returns an Enumerator if no block given, and the array is frozen 3807s - raises a FrozenError on a frozen array 3807s - raises a FrozenError on an empty frozen array 3807s - does not truncate the array is the block raises an exception 3807s - only removes elements for which the block returns true, keeping the element which raised an error. 3807s - updates the receiver after all blocks 3807s - tolerates increasing an array size during iteration 3807s 3807s Array#delete_if when no block is given returned Enumerator 3807s - size returns the enumerable size 3807s 3807s Array#delete 3807s - removes elements that are #== to object 3807s - calculates equality correctly for reference values 3807s - returns object or nil if no elements match object 3807s - may be given a block that is executed if no element matches object 3807s - returns nil if the array is empty due to a shift 3807s - returns nil on a frozen array if a modification does not take place 3807s - raises a FrozenError on a frozen array 3807s 3807s Array#difference 3807s - creates an array minus any items from other array 3807s - removes multiple items on the lhs equal to one on the rhs 3807s - properly handles recursive arrays 3807s - tries to convert the passed arguments to Arrays using #to_ary 3807s - raises a TypeError if the argument cannot be coerced to an Array by calling #to_ary 3807s - does not return subclass instance for Array subclasses 3807s - does not call to_ary on array subclasses 3807s - removes an item identified as equivalent via #hash and #eql? 3807s - doesn't remove an item with the same hash but not #eql? 3807s - removes an identical item even when its #eql? isn't reflexive 3807s - is not destructive 3807s - returns a copy when called without any parameter 3807s - does not return subclass instances for Array subclasses 3807s - accepts multiple arguments 3807s 3807s Array#dig 3807s - returns #at with one arg 3807s - recurses array elements 3807s - returns the nested value specified if the sequence includes a key 3807s - raises a TypeError for a non-numeric index 3807s - raises a TypeError if any intermediate step does not respond to #dig 3807s - raises an ArgumentError if no arguments provided 3807s - returns nil if any intermediate step is nil 3807s - calls #dig on the result of #at with the remaining arguments 3807s 3807s Array#drop 3807s - removes the specified number of elements from the start of the array 3807s - raises an ArgumentError if the number of elements specified is negative 3807s - returns an empty Array if all elements are dropped 3807s - returns an empty Array when called on an empty Array 3807s - does not remove any elements when passed zero 3807s - returns an empty Array if more elements than exist are dropped 3807s - acts correctly after a shift 3807s - tries to convert the passed argument to an Integer using #to_int 3807s - raises a TypeError when the passed argument can't be coerced to Integer 3807s - raises a TypeError when the passed argument isn't an integer and #to_int returns non-Integer 3807s - returns a Array instance for Array subclasses 3807s 3807s Array#drop_while 3807s - tolerates increasing an array size during iteration 3807s - removes elements from the start of the array while the block evaluates to true 3807s - removes elements from the start of the array until the block returns nil 3807s - removes elements from the start of the array until the block returns false 3807s - returns a Array instance for Array subclasses 3807s 3807s Array#dup 3807s - returns an Array or a subclass instance 3807s - produces a shallow copy where the references are directly copied 3807s - creates a new array containing all elements or the original 3807s - does not copy frozen status from the original 3807s - does not copy singleton methods 3807s 3807s Array#each_index 3807s - passes the index of each element to the block 3807s - returns self 3807s - is not confused by removing elements from the front 3807s - returns an Enumerator if no block given 3807s 3807s Array#each_index when no block is given returned Enumerator 3807s - size returns the enumerable size 3807s 3807s Array#each_index 3807s - tolerates increasing an array size during iteration 3807s 3807s Array#each 3807s - yields each element to the block 3807s - yields each element to the block even if the array is changed during iteration 3807s - yields only elements that are still in the array 3807s - yields elements based on an internal index 3807s - yields the same element multiple times if inserting while iterating 3807s - yields each element to a block that takes multiple arguments 3807s - yields elements added to the end of the array by the block 3807s - does not yield elements deleted from the end of the array 3807s - returns an Enumerator if no block given 3807s 3807s Array#each when no block is given returned Enumerator 3807s - size returns the enumerable size 3807s 3807s Array#each 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#[] 3808s - returns the element at index with [index] 3808s - returns the element at index from the end of the array with [-index] 3808s - returns count elements starting from index with [index, count] 3808s - returns count elements starting at index from the end of array with [-index, count] 3808s - returns the first count elements with [0, count] 3808s - returns the subarray which is independent to self with [index,count] 3808s - tries to convert the passed argument to an Integer using #to_int 3808s - raises TypeError if to_int returns non-integer 3808s - returns the elements specified by Range indexes with [m..n] 3808s - returns elements specified by Range indexes except the element at index n with [m...n] 3808s - returns elements that exist if range start is in the array but range end is not with [m..n] 3808s - accepts Range instances having a negative m and both signs for n with [m..n] and [m...n] 3808s - returns the subarray which is independent to self with [m..n] 3808s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 3808s - returns the same elements as [m..n] and [m...n] with Range subclasses 3808s - returns nil for a requested index not in the array with [index] 3808s - returns [] if the index is valid but length is zero with [index, length] 3808s - returns nil if length is zero but index is invalid with [index, length] 3808s - returns [] if index == array.size with [index, length] 3808s - returns nil if index > array.size with [index, length] 3808s - returns nil if length is negative with [index, length] 3808s - returns nil if no requested index is in the array with [m..n] 3808s - returns nil if range start is not in the array with [m..n] 3808s - returns an empty array when m == n with [m...n] 3808s - returns an empty array with [0...0] 3808s - returns a subarray where m, n negatives and m < n with [m..n] 3808s - returns an array containing the first element with [0..0] 3808s - returns the entire array with [0..-1] 3808s - returns all but the last element with [0...-1] 3808s - returns [3] for [2..-1] out of [1, 2, 3] 3808s - returns an empty array when m > n and m, n are positive with [m..n] 3808s - returns an empty array when m > n and m, n are negative with [m..n] 3808s - does not expand array when the indices are outside of the array bounds 3808s - raises a RangeError when the length is out of range of Fixnum 3808s - raises a type error if a range is passed with a length 3808s - raises a RangeError if passed a range with a bound that is too large 3808s - can accept endless ranges 3808s - can accept beginless ranges 3808s - can accept nil...nil ranges 3808s 3808s Array#[] with a subclass of Array 3808s - returns a Array instance with [n, m] 3808s - returns a Array instance with [-n, m] 3808s - returns a Array instance with [n..m] 3808s - returns a Array instance with [n...m] 3808s - returns a Array instance with [-n..-m] 3808s - returns a Array instance with [-n...-m] 3808s - returns an empty array when m == n with [m...n] 3808s - returns an empty array with [0...0] 3808s - returns an empty array when m > n and m, n are positive with [m..n] 3808s - returns an empty array when m > n and m, n are negative with [m..n] 3808s - returns [] if index == array.size with [index, length] 3808s - returns [] if the index is valid but length is zero with [index, length] 3808s - does not call #initialize on the subclass instance 3808s 3808s Array#[] can be sliced with Enumerator::ArithmeticSequence 3808s - has endless range and positive steps 3808s - has beginless range and positive steps 3808s - has endless range and negative steps 3808s - has closed range and positive steps 3808s - has closed range and negative steps 3808s - has inverted closed range and positive steps 3808s - has range with bounds outside of array 3808s - has endless range with start outside of array's bounds 3808s 3808s Array.[] 3808s - [] should return a new array populated with the given elements 3808s - when applied to a literal nested array, unpacks its elements into the containing array 3808s - when applied to a nested referenced array, unpacks its elements into the containing array 3808s - can unpack 2 or more nested referenced array 3808s - constructs a nested Hash for tailing key-value pairs 3808s 3808s Array.[] with a subclass of Array 3808s - returns an instance of the subclass 3808s - does not call #initialize on the subclass instance 3808s 3808s Array#[]= 3808s - sets the value of the element at index 3808s - sets the section defined by [start,length] to other 3808s - replaces the section defined by [start,length] with the given values 3808s - just sets the section defined by [start,length] to other even if other is nil 3808s - returns nil if the rhs is nil 3808s - sets the section defined by range to other 3808s - replaces the section defined by range with the given values 3808s - just sets the section defined by range to other even if other is nil 3808s - expands and nil-pads the array if section assigned by range is outside array boundaries 3808s - calls to_int on its start and length arguments 3808s - checks frozen before attempting to coerce arguments 3808s - sets elements in the range arguments when passed ranges 3808s - inserts the given elements with [range] which the range is zero-width 3808s - inserts the given elements with [start, length] which length is zero 3808s - inserts the given elements with [range] which the range has negative width 3808s - just inserts nil if the section defined by range is zero-width and the rhs is nil 3808s - just inserts nil if the section defined by range has negative width and the rhs is nil 3808s - does nothing if the section defined by range is zero-width and the rhs is an empty array 3808s - does nothing if the section defined by range has negative width and the rhs is an empty array 3808s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 3808s - raises an IndexError when passed indexes out of bounds 3808s - calls to_ary on its rhs argument for multi-element sets 3808s - does not call to_ary on rhs array subclasses for multi-element sets 3808s - raises a FrozenError on a frozen array 3808s 3808s Array#[]= with [index] 3808s - returns value assigned if idx is inside array 3808s - returns value assigned if idx is right beyond right array boundary 3808s - returns value assigned if idx far beyond right array boundary 3808s - sets the value of the element at index 3808s - sets the value of the element if it is right beyond the array boundary 3808s 3808s Array#[]= with [index, count] 3808s - returns non-array value if non-array value assigned 3808s - returns array if array assigned 3808s - accepts a frozen String literal as RHS 3808s - just sets the section defined by [start,length] to nil even if the rhs is nil 3808s - just sets the section defined by [start,length] to nil if negative index within bounds, cnt > 0 and the rhs is nil 3808s - replaces the section defined by [start,length] to other 3808s - replaces the section to other if idx < 0 and cnt > 0 3808s - replaces the section to other even if cnt spanning beyond the array boundary 3808s - pads the Array with nils if the span is past the end 3808s - inserts other section in place defined by idx 3808s - raises an IndexError when passed start and negative length 3808s 3808s Array#[]= with [m..n] 3808s - returns non-array value if non-array value assigned 3808s - returns array if array assigned 3808s - just sets the section defined by range to nil even if the rhs is nil 3808s - just sets the section defined by range to nil if m and n < 0 and the rhs is nil 3808s - replaces the section defined by range 3808s - replaces the section if m and n < 0 3808s - replaces the section if m < 0 and n > 0 3808s - inserts the other section at m if m > n 3808s - inserts at the end if m > the array size 3808s 3808s Array#[]= with [m..n] Range subclasses 3808s - accepts Range subclasses 3808s - returns non-array value if non-array value assigned 3808s - returns array if array assigned 3808s 3808s Array#[]= with [m..] 3808s - just sets the section defined by range to nil even if the rhs is nil 3808s - just sets the section defined by range to nil if m and n < 0 and the rhs is nil 3808s - replaces the section defined by range 3808s - replaces the section if m and n < 0 3808s - inserts at the end if m > the array size 3808s 3808s Array#[]= with [..n] and [...n] 3808s - just sets the section defined by range to nil even if the rhs is nil 3808s - just sets the section defined by range to nil if n < 0 and the rhs is nil 3808s - replaces the section defined by range 3808s - replaces the section if n < 0 3808s - replaces everything if n > the array size 3808s - inserts at the beginning if n < negative the array size 3808s 3808s Array#[] after a shift 3808s - works for insertion 3808s 3808s Array#empty? 3808s - returns true if the array has no elements 3808s 3808s Array#eql? 3808s - returns true if other is the same array 3808s - returns true if corresponding elements are #eql? 3808s - returns false if other is shorter than self 3808s - returns false if other is longer than self 3808s - returns false immediately when sizes of the arrays differ 3808s - handles well recursive arrays 3808s - does not call #to_ary on its argument 3808s - does not call #to_ary on Array subclasses 3808s - ignores array class differences 3808s - returns false if any corresponding elements are not #eql? 3808s - returns false if other is not a kind of Array 3808s 3808s Array#== 3808s - returns true if other is the same array 3808s - returns true if corresponding elements are #eql? 3808s - returns false if other is shorter than self 3808s - returns false if other is longer than self 3808s - returns false immediately when sizes of the arrays differ 3808s - handles well recursive arrays 3808s - does not call #to_ary on its argument 3808s - does not call #to_ary on Array subclasses 3808s - ignores array class differences 3808s - compares with an equivalent Array-like object using #to_ary 3808s - returns false if any corresponding elements are not #== 3808s - returns true if corresponding elements are #== 3808s - returns true for [NaN] == [NaN] because Array#== first checks with #equal? and NaN.equal?(NaN) is true 3808s 3808s Array#fetch 3808s - returns the element at the passed index 3808s - counts negative indices backwards from end 3808s - raises an IndexError if there is no element at index 3808s - returns default if there is no element at index if passed a default value 3808s - returns the value of block if there is no element at index if passed a block 3808s - passes the original index argument object to the block, not the converted Integer 3808s - gives precedence to the default block over the default argument 3808s - tries to convert the passed argument to an Integer using #to_int 3808s - raises a TypeError when the passed argument can't be coerced to Integer 3808s 3808s Array#fill 3808s - returns self 3808s - is destructive 3808s - does not replicate the filler 3808s - replaces all elements in the array with the filler if not given a index nor a length 3808s - replaces all elements with the value of block (index given to block) 3808s - raises a FrozenError on a frozen array 3808s - raises a FrozenError on an empty frozen array 3808s - raises an ArgumentError if 4 or more arguments are passed when no block given 3808s - raises an ArgumentError if no argument passed and no block given 3808s - raises an ArgumentError if 3 or more arguments are passed when a block given 3808s - does not truncate the array is the block raises an exception 3808s - only changes elements before error is raised, keeping the element which raised an error. 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#fill with (filler, index, length) 3808s - replaces length elements beginning with the index with the filler if given an index and a length 3808s - replaces length elements beginning with the index with the value of block 3808s - replaces all elements after the index if given an index and no length 3808s - replaces all elements after the index if given an index and nil as a length 3808s - replaces the last (-n) elements if given an index n which is negative and no length 3808s - replaces the last (-n) elements if given an index n which is negative and nil as a length 3808s - makes no modifications if given an index greater than end and no length 3808s - makes no modifications if given an index greater than end and nil as a length 3808s - replaces length elements beginning with start index if given an index >= 0 and a length >= 0 3808s - increases the Array size when necessary 3808s - pads between the last element and the index with nil if given an index which is greater than size of the array 3808s - replaces length elements beginning with the (-n)th if given an index n < 0 and a length > 0 3808s - starts at 0 if the negative index is before the start of the array 3808s - makes no modifications if the given length <= 0 3808s - does not raise an exception if the given length is negative and its absolute value does not exceed the index 3808s - does not raise an exception even if the given length is negative and its absolute value exceeds the index 3808s - tries to convert the second and third arguments to Integers using #to_int 3808s - raises a TypeError if the index is not numeric 3808s - raises a TypeError when the length is not numeric 3808s - raises an ArgumentError or RangeError for too-large sizes 3808s 3808s Array#fill with (filler, range) 3808s - replaces elements in range with object 3808s - replaces all elements in range with the value of block 3808s - increases the Array size when necessary 3808s - raises a TypeError with range and length argument 3808s - 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 3808s - replaces elements between the (-m)th and (-n)th to the last if given an range m..n where m < 0 and n < 0 3808s - 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 3808s - makes no modifications if given an range which implies a section of zero width 3808s - makes no modifications if given an range which implies a section of negative width 3808s - raises an exception if some of the given range lies before the first of the array 3808s - tries to convert the start and end of the passed range to Integers using #to_int 3808s - raises a TypeError if the start or end of the passed range is not numeric 3808s - works with endless ranges 3808s - works with beginless ranges 3808s 3808s Array#filter 3808s - returns an Enumerator if no block given 3808s - tolerates increasing an array size during iteration 3808s - returns a new array of elements for which block is true 3808s - does not return subclass instance on Array subclasses 3808s - properly handles recursive arrays 3808s 3808s Array#filter when no block is given returned Enumerator 3808s - size returns the enumerable size 3808s 3808s Array#filter! 3808s - returns nil if no changes were made in the array 3808s - deletes elements for which the block returns a false value 3808s - returns an enumerator if no block is given 3808s - updates the receiver after all blocks 3808s - does not truncate the array is the block raises an exception 3808s - only changes elements before error is raised, keeping the element which raised an error. 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#filter! when no block is given returned Enumerator 3808s - size returns the enumerable size 3808s 3808s Array#filter! on frozen objects 3808s - returns an Enumerator if no block is given 3808s - raises a FrozenError on a frozen array only during iteration if called without a block 3808s 3808s Array#filter! on frozen objects with truthy block 3808s - keeps elements after any exception 3808s - raises a FrozenError 3808s 3808s Array#filter! on frozen objects with falsy block 3808s - keeps elements after any exception 3808s - raises a FrozenError 3808s 3808s Array#find_index 3808s - returns the index of the first element == to object 3808s - returns 0 if first element == to object 3808s - returns size-1 if only last element == to object 3808s - returns nil if no element == to object 3808s - accepts a block instead of an argument 3808s - ignores the block if there is an argument 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#find_index given no argument and no block 3808s - produces an Enumerator 3808s 3808s Array#first 3808s - returns the first element 3808s - returns nil if self is empty 3808s - returns the first count elements if given a count 3808s - returns an empty array when passed count on an empty array 3808s - returns an empty array when passed count == 0 3808s - returns an array containing the first element when passed count == 1 3808s - raises an ArgumentError when count is negative 3808s - raises a RangeError when count is a Bignum 3808s - returns the entire array when count > length 3808s - returns an array which is independent to the original when passed count 3808s - properly handles recursive arrays 3808s - tries to convert the passed argument to an Integer using #to_int 3808s - raises a TypeError if the passed argument is not numeric 3808s - does not return subclass instance when passed count on Array subclasses 3808s - is not destructive 3808s 3808s Array#flatten 3808s - returns a one-dimensional flattening recursively 3808s - takes an optional argument that determines the level of recursion 3808s - returns dup when the level of recursion is 0 3808s - ignores negative levels 3808s - tries to convert passed Objects to Integers using #to_int 3808s - raises a TypeError when the passed Object can't be converted to an Integer 3808s - does not call flatten on elements 3808s - raises an ArgumentError on recursive arrays 3808s - flattens any element which responds to #to_ary, using the return value of said method 3808s - does not call #to_ary on elements beyond the given level 3808s - returns Array instance for Array subclasses 3808s - is not destructive 3808s - performs respond_to? and method_missing-aware checks when coercing elements to array 3808s 3808s Array#flatten with a non-Array object in the Array 3808s - does not call #to_ary if the method is not defined 3808s - does not raise an exception if #to_ary returns nil 3808s - raises a TypeError if #to_ary does not return an Array 3808s - calls respond_to_missing?(:to_ary, true) to try coercing 3808s - does not call #to_ary if not defined when #respond_to_missing? returns false 3808s - calls #method_missing if defined 3808s 3808s Array#flatten! 3808s - modifies array to produce a one-dimensional flattening recursively 3808s - returns self if made some modifications 3808s - returns nil if no modifications took place 3808s - should not check modification by size 3808s - takes an optional argument that determines the level of recursion 3808s - returns nil when the level of recursion is 0 3808s - treats negative levels as no arguments 3808s - tries to convert passed Objects to Integers using #to_int 3808s - raises a TypeError when the passed Object can't be converted to an Integer 3808s - does not call flatten! on elements 3808s - raises an ArgumentError on recursive arrays 3808s - flattens any elements which responds to #to_ary, using the return value of said method 3808s - raises a FrozenError on frozen arrays when the array is modified 3808s - raises a FrozenError on frozen arrays when the array would not be modified 3808s 3808s Array#frozen? 3808s - returns true if array is frozen 3808s - returns false for an array being sorted by #sort 3808s 3808s Array#hash 3808s - returns the same fixnum for arrays with the same content 3808s - properly handles recursive arrays 3808s - returns the same hash for equal recursive arrays 3808s - returns the same hash for equal recursive arrays through hashes 3808s - calls to_int on result of calling hash on each element 3808s - ignores array class differences 3808s - returns same hash code for arrays with the same content 3808s - returns the same value if arrays are #eql? 3808s - produces different hashes for nested arrays with different values and empty terminator 3808s 3808s Array#include? 3808s - returns true if object is present, false otherwise 3808s - determines presence by using element == obj 3808s - calls == on elements from left to right until success 3808s 3808s Array#index 3808s - returns the index of the first element == to object 3808s - returns 0 if first element == to object 3808s - returns size-1 if only last element == to object 3808s - returns nil if no element == to object 3808s - accepts a block instead of an argument 3808s - ignores the block if there is an argument 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#index given no argument and no block 3808s - produces an Enumerator 3808s 3808s Array#initialize 3808s - is private 3808s - is called on subclasses 3808s - preserves the object's identity even when changing its value 3808s - raises an ArgumentError if passed 3 or more arguments 3808s - raises a FrozenError on frozen arrays 3808s - calls #to_ary to convert the value to an array, even if it's private 3808s 3808s Array#initialize with no arguments 3808s - makes the array empty 3808s - does not use the given block 3808s 3808s Array#initialize with (array) 3808s - replaces self with the other array 3808s - does not use the given block 3808s - calls #to_ary to convert the value to an array 3808s - does not call #to_ary on instances of Array or subclasses of Array 3808s - raises a TypeError if an Array type argument and a default object 3808s 3808s Array#initialize with (size, object=nil) 3808s - sets the array to size and fills with the object 3808s - sets the array to size and fills with nil when object is omitted 3808s - raises an ArgumentError if size is negative 3808s - calls #to_int to convert the size argument to an Integer when object is given 3808s - calls #to_int to convert the size argument to an Integer when object is not given 3808s - raises a TypeError if the size argument is not an Integer type 3808s - yields the index of the element and sets the element to the value of the block 3808s - uses the block value instead of using the default value 3808s - returns the value passed to break 3808s - sets the array to the values returned by the block before break is executed 3808s 3808s Array#insert 3808s - returns self 3808s - inserts objects before the element at index for non-negative index 3808s - appends objects to the end of the array for index == -1 3808s - inserts objects after the element at index with negative index 3808s - pads with nils if the index to be inserted to is past the end 3808s - can insert before the first element with a negative index 3808s - raises an IndexError if the negative index is out of bounds 3808s - does nothing of no object is passed 3808s - tries to convert the passed position argument to an Integer using #to_int 3808s - raises an ArgumentError if no argument passed 3808s - raises a FrozenError on frozen arrays when the array is modified 3808s - raises a FrozenError on frozen arrays when the array would not be modified 3808s 3808s Array#inspect 3808s - returns a string 3808s - returns '[]' for an empty Array 3808s - calls inspect on its elements and joins the results with commas 3808s - does not call #to_s on a String returned from #inspect 3808s - calls #to_s on the object returned from #inspect if the Object isn't a String 3808s - does not call #to_str on the object returned from #inspect when it is not a String 3808s - does not call #to_str on the object returned from #to_s when it is not a String 3808s - does not swallow exceptions raised by #to_s 3808s - represents a recursive element with '[...]' 3808s 3808s Array#inspect with encoding 3808s - returns a US-ASCII string for an empty Array 3808s - use the default external encoding if it is ascii compatible 3808s - use US-ASCII encoding if the default external encoding is not ascii compatible 3808s - does not raise if inspected result is not default external encoding 3808s 3808s Array#intersect? 3808s - tries to convert the passed argument to an Array using #to_ary 3808s - determines equivalence between elements in the sense of eql? 3808s - does not call to_ary on array subclasses 3808s - properly handles an identical item even when its #eql? isn't reflexive 3808s - has semantic of !(a & b).empty? 3808s 3808s Array#intersect? when at least one element in two Arrays is the same 3808s - returns true 3808s 3808s Array#intersect? when there are no elements in common between two Arrays 3808s - returns false 3808s 3808s Array#& 3808s - creates an array with elements common to both arrays (intersection) 3808s - creates an array with no duplicates 3808s - creates an array with elements in order they are first encountered 3808s - does not modify the original Array 3808s - properly handles recursive arrays 3808s - tries to convert the passed argument to an Array using #to_ary 3808s - determines equivalence between elements in the sense of eql? 3808s - does return subclass instances for Array subclasses 3808s - does not call to_ary on array subclasses 3808s - properly handles an identical item even when its #eql? isn't reflexive 3808s 3808s Array#intersection 3808s - creates an array with elements common to both arrays (intersection) 3808s - creates an array with no duplicates 3808s - creates an array with elements in order they are first encountered 3808s - does not modify the original Array 3808s - properly handles recursive arrays 3808s - tries to convert the passed argument to an Array using #to_ary 3808s - determines equivalence between elements in the sense of eql? 3808s - does return subclass instances for Array subclasses 3808s - does not call to_ary on array subclasses 3808s - properly handles an identical item even when its #eql? isn't reflexive 3808s - accepts multiple arguments 3808s - preserves elements order from original array 3808s 3808s Array#join 3808s - returns a string formed by concatenating each element.to_str separated by separator 3808s - uses the same separator with nested arrays 3808s - returns an empty string if the Array is empty 3808s - returns a US-ASCII string for an empty Array 3808s - returns a string formed by concatenating each String element separated by $, 3808s - attempts coercion via #to_str first 3808s - attempts coercion via #to_ary second 3808s - attempts coercion via #to_s third 3808s - raises a NoMethodError if an element does not respond to #to_str, #to_ary, or #to_s 3808s - raises an ArgumentError when the Array is recursive 3808s - uses the first encoding when other strings are compatible 3808s - uses the widest common encoding when other strings are incompatible 3808s - fails for arrays with incompatibly-encoded strings 3808s - does not separate elements when the passed separator is nil 3808s - calls #to_str to convert the separator to a String 3808s - does not call #to_str on the separator if the array is empty 3808s - raises a TypeError if the separator cannot be coerced to a String by calling #to_str 3808s - raises a TypeError if passed false as the separator 3808s 3808s Array#join when $, is not nil 3808s - warns 3808s 3808s Array#join with $, 3808s - separates elements with default separator when the passed separator is nil 3808s 3808s Array#keep_if 3808s - returns the same array if no changes were made 3808s - deletes elements for which the block returns a false value 3808s - returns an enumerator if no block is given 3808s - updates the receiver after all blocks 3808s - does not truncate the array is the block raises an exception 3808s - only changes elements before error is raised, keeping the element which raised an error. 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#keep_if when no block is given returned Enumerator 3808s - size returns the enumerable size 3808s 3808s Array#keep_if on frozen objects 3808s - returns an Enumerator if no block is given 3808s - raises a FrozenError on a frozen array only during iteration if called without a block 3808s 3808s Array#keep_if on frozen objects with truthy block 3808s - keeps elements after any exception 3808s - raises a FrozenError 3808s 3808s Array#keep_if on frozen objects with falsy block 3808s - keeps elements after any exception 3808s - raises a FrozenError 3808s 3808s Array#last 3808s - returns the last element 3808s - returns nil if self is empty 3808s - returns the last count elements if given a count 3808s - returns an empty array when passed a count on an empty array 3808s - returns an empty array when count == 0 3808s - returns an array containing the last element when passed count == 1 3808s - raises an ArgumentError when count is negative 3808s - returns the entire array when count > length 3808s - returns an array which is independent to the original when passed count 3808s - properly handles recursive arrays 3808s - tries to convert the passed argument to an Integer using #to_int 3808s - raises a TypeError if the passed argument is not numeric 3808s - does not return subclass instance on Array subclasses 3808s - is not destructive 3808s 3808s Array#length 3808s - returns the number of elements 3808s - properly handles recursive arrays 3808s 3808s Array#map 3808s - returns a copy of array with each element replaced by the value returned by block 3808s - does not return subclass instance 3808s - does not change self 3808s - returns the evaluated value of block if it broke in the block 3808s - returns an Enumerator when no block given 3808s - raises an ArgumentError when no block and with arguments 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#map when no block is given returned Enumerator 3808s - size returns the enumerable size 3808s 3808s Array#map! 3808s - replaces each element with the value returned by block 3808s - returns self 3808s - returns the evaluated value of block but its contents is partially modified, if it broke in the block 3808s - returns an Enumerator when no block given, and the enumerator can modify the original array 3808s - does not truncate the array is the block raises an exception 3808s - only changes elements before error is raised, keeping the element which raised an error. 3808s - tolerates increasing an array size during iteration 3808s 3808s Array#map! when frozen 3808s - raises a FrozenError 3808s - raises a FrozenError when empty 3808s - raises a FrozenError when calling #each on the returned Enumerator 3808s - raises a FrozenError when calling #each on the returned Enumerator when empty 3808s 3808s Array#map! when no block is given returned Enumerator 3808s - size returns the enumerable size 3808s 3808s Array#max 3808s - is defined on Array 3808s - returns nil with no values 3808s - returns only element in one element array 3808s - returns largest value with multiple elements 3808s 3808s Array#max given a block with one argument 3808s - yields in turn the last length-1 values from the array 3808s 3808s Array#max 3808s - max should return the maximum element 3808s - returns the maximum element (basics cases) 3808s - returns nil for an empty Enumerable 3808s - raises a NoMethodError for elements without #<=> 3808s - raises an ArgumentError for incomparable elements 3808s - returns the maximum element (with block) 3808s - returns the minimum for enumerables that contain nils 3808s - gathers whole arrays as elements when each yields multiple 3808s 3808s Array#min 3808s - is defined on Array 3808s - returns nil with no values 3808s - returns only element in one element array 3808s - returns smallest value with multiple elements 3808s 3808s Array#min given a block with one argument 3808s - yields in turn the last length-1 values from the array 3808s 3808s Array#min 3808s - min should return the minimum element 3808s - returns the minimum (basic cases) 3808s - returns nil for an empty Enumerable 3808s - raises a NoMethodError for elements without #<=> 3808s - raises an ArgumentError for incomparable elements 3808s - returns the minimum when using a block rule 3808s - returns the minimum for enumerables that contain nils 3808s - gathers whole arrays as elements when each yields multiple 3808s 3808s Array#minmax 3808s - min should return the minimum element 3808s - returns the minimum when using a block rule 3808s - returns [nil, nil] for an empty Enumerable 3808s - raises a NoMethodError for elements without #<=> 3808s - raises an ArgumentError when elements are incompatible 3808s 3808s Array#- 3808s - creates an array minus any items from other array 3808s - removes multiple items on the lhs equal to one on the rhs 3808s - properly handles recursive arrays 3808s - tries to convert the passed arguments to Arrays using #to_ary 3808s - raises a TypeError if the argument cannot be coerced to an Array by calling #to_ary 3808s - does not return subclass instance for Array subclasses 3808s - does not call to_ary on array subclasses 3808s - removes an item identified as equivalent via #hash and #eql? 3808s - doesn't remove an item with the same hash but not #eql? 3808s - removes an identical item even when its #eql? isn't reflexive 3808s - is not destructive 3808s 3808s Array#* 3808s - tries to convert the passed argument to a String using #to_str 3808s - tires to convert the passed argument to an Integer using #to_int 3808s - raises a TypeError if the argument can neither be converted to a string nor an integer 3808s - converts the passed argument to a String rather than an Integer 3808s - raises a TypeError is the passed argument is nil 3808s - raises an ArgumentError when passed 2 or more arguments 3808s - raises an ArgumentError when passed no arguments 3808s 3808s Array#* with an integer 3808s - concatenates n copies of the array when passed an integer 3808s - does not return self even if the passed integer is 1 3808s - properly handles recursive arrays 3808s - raises an ArgumentError when passed a negative integer 3808s 3808s Array#* with an integer with a subclass of Array 3808s - returns an Array instance 3808s - does not call #initialize on the subclass instance 3808s 3808s Array#* with a string 3808s - returns a string formed by concatenating each element.to_str separated by separator 3808s - uses the same separator with nested arrays 3808s 3808s Array.new 3808s - returns an instance of Array 3808s - returns an instance of a subclass 3808s - raises an ArgumentError if passed 3 or more arguments 3808s 3808s Array.new with no arguments 3808s - returns an empty array 3808s - does not use the given block 3808s 3808s Array.new with (array) 3808s - returns an array initialized to the other array 3808s - does not use the given block 3808s - calls #to_ary to convert the value to an array 3808s - does not call #to_ary on instances of Array or subclasses of Array 3808s - raises a TypeError if an Array type argument and a default object 3808s 3808s Array.new with (size, object=nil) 3808s - returns an array of size filled with object 3808s - returns an array of size filled with nil when object is omitted 3808s - raises an ArgumentError if size is negative 3808s - calls #to_int to convert the size argument to an Integer when object is given 3808s - calls #to_int to convert the size argument to an Integer when object is not given 3808s - raises a TypeError if the size argument is not an Integer type 3808s - yields the index of the element and sets the element to the value of the block 3808s - uses the block value instead of using the default value 3808s - returns the value passed to break 3808s 3808s Array#none? 3808s - tolerates increasing an array size during iteration 3808s - ignores the block if there is an argument 3808s 3808s Array#one? 3808s - tolerates increasing an array size during iteration 3808s - ignores the block if there is an argument 3808s 3808s Array#pack with format 'A' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - adds count bytes of a String to the output 3808s - implicitly has a count of one when no count is specified 3808s - does not add any bytes when the count is zero 3808s - is not affected by a previous count modifier 3808s - raises an ArgumentError when the Array is empty 3808s - raises an ArgumentError when the Array has too few elements 3808s - calls #to_str to convert the element to a String 3808s - raises a TypeError when the object does not respond to #to_str 3808s - returns a string in encoding of common to the concatenated results 3808s - calls #to_str to convert an Object to a String 3808s - will not implicitly convert a number to a string 3808s - adds all the bytes to the output when passed the '*' modifier 3808s - padds the output with spaces when the count exceeds the size of the String 3808s - adds a space when the value is nil 3808s - pads the output with spaces when the value is nil 3808s - does not pad with spaces when passed the '*' modifier and the value is nil 3808s 3808s Array#pack with format 'a' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - adds count bytes of a String to the output 3808s - implicitly has a count of one when no count is specified 3808s - does not add any bytes when the count is zero 3808s - is not affected by a previous count modifier 3808s - raises an ArgumentError when the Array is empty 3808s - raises an ArgumentError when the Array has too few elements 3808s - calls #to_str to convert the element to a String 3808s - raises a TypeError when the object does not respond to #to_str 3808s - returns a string in encoding of common to the concatenated results 3808s - adds all the bytes to the output when passed the '*' modifier 3808s - padds the output with NULL bytes when the count exceeds the size of the String 3808s - adds a NULL byte when the value is nil 3808s - pads the output with NULL bytes when the value is nil 3808s - does not pad with NULL bytes when passed the '*' modifier and the value is nil 3808s 3808s Array#pack with format '@' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - moves the insertion point to the index specified by the count modifier 3808s - does not consume any elements 3808s - extends the string with NULL bytes if the string size is less than the count 3808s - truncates the string if the string size is greater than the count 3808s - implicitly has a count of one when no count modifier is passed 3808s 3808s Array#pack with format 'B' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - encodes no bytes when passed zero as the count modifier 3808s - raises a TypeError if the object does not respond to #to_str 3808s - raises a TypeError if #to_str does not return a String 3808s - calls #to_str to convert an Object to a String 3808s - will not implicitly convert a number to a string 3808s - encodes one bit for each character starting with the most significant bit 3808s - implicitly has a count of one when not passed a count modifier 3808s - implicitly has count equal to the string length when passed the '*' modifier 3808s - encodes the least significant bit of a character other than 0 or 1 3808s - returns a binary string 3808s - encodes the string as a sequence of bytes 3808s 3808s Array#pack with format 'b' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - encodes no bytes when passed zero as the count modifier 3808s - raises a TypeError if the object does not respond to #to_str 3808s - raises a TypeError if #to_str does not return a String 3808s - calls #to_str to convert an Object to a String 3808s - encodes one bit for each character starting with the least significant bit 3808s - implicitly has a count of one when not passed a count modifier 3808s - implicitly has count equal to the string length when passed the '*' modifier 3808s - encodes the least significant bit of a character other than 0 or 1 3808s - returns a binary string 3808s - encodes the string as a sequence of bytes 3808s 3808s Array#pack with :buffer option 3808s - returns specified buffer 3808s - adds result at the end of buffer content 3808s - raises TypeError exception if buffer is not String 3808s 3808s Array#pack with :buffer option offset (@) is specified 3808s - keeps buffer content if it is longer than offset 3808s - fills the gap with \0 if buffer content is shorter than offset 3808s - does not keep buffer content if it is longer than offset + result 3808s 3808s Array#pack with format 'C' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - encodes the least significant eight bits of a positive number 3808s - encodes the least significant eight bits of a negative number 3808s - encodes a Float truncated as an Integer 3808s - calls #to_int to convert the pack argument to an Integer 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError when the object does not respond to #to_int 3808s - raises a TypeError when passed a String 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s 3808s Array#pack with format 'c' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - warns in verbose mode that a directive is unknown 3808s - calls #to_str to coerce the directives string 3808s - encodes the least significant eight bits of a positive number 3808s - encodes the least significant eight bits of a negative number 3808s - encodes a Float truncated as an Integer 3808s - calls #to_int to convert the pack argument to an Integer 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError when the object does not respond to #to_int 3808s - raises a TypeError when passed a String 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s 3808s Array#pack 3808s - ignores directives text from '#' to the first newline 3808s - ignores directives text from '#' to the end if no newline is present 3808s - ignores comments at the start of the directives string 3808s - ignores the entire directive string if it is a comment 3808s - ignores multiple comments 3808s 3808s Array#pack with format 'D' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError if a String does not represent a floating point number 3808s - raises a TypeError when the object is not Numeric 3808s - raises a TypeError when the Numeric object does not respond to #to_f 3808s - encodes a positive Float 3808s - encodes a negative Float 3808s - converts an Integer to a Float 3808s - converts a Rational to a Float 3808s - raises a TypeError if passed a String representation of a floating point number 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - encodes positive Infinity 3808s - encodes negative Infinity 3808s - encodes NaN 3808s - encodes a positive Float outside the range of a single precision float 3808s - encodes a negative Float outside the range of a single precision float 3808s 3808s Array#pack with format 'd' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError if a String does not represent a floating point number 3808s - raises a TypeError when the object is not Numeric 3808s - raises a TypeError when the Numeric object does not respond to #to_f 3808s - encodes a positive Float 3808s - encodes a negative Float 3808s - converts an Integer to a Float 3808s - converts a Rational to a Float 3808s - raises a TypeError if passed a String representation of a floating point number 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - encodes positive Infinity 3808s - encodes negative Infinity 3808s - encodes NaN 3808s - encodes a positive Float outside the range of a single precision float 3808s - encodes a negative Float outside the range of a single precision float 3808s 3808s Array#pack with format 'E' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError if a String does not represent a floating point number 3808s - raises a TypeError when the object is not Numeric 3808s - raises a TypeError when the Numeric object does not respond to #to_f 3808s - encodes a positive Float 3808s - encodes a negative Float 3808s - converts an Integer to a Float 3808s - converts a Rational to a Float 3808s - raises a TypeError if passed a String representation of a floating point number 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - encodes positive Infinity 3808s - encodes negative Infinity 3808s - encodes NaN 3808s - encodes a positive Float outside the range of a single precision float 3808s - encodes a negative Float outside the range of a single precision float 3808s 3808s Array#pack with format 'e' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - returns an empty String if count is zero 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed true 3808s - raises a TypeError when passed false 3808s - returns a binary string 3808s - raises a TypeError if a String does not represent a floating point number 3808s - raises a TypeError when the object is not Numeric 3808s - raises a TypeError when the Numeric object does not respond to #to_f 3808s - encodes a positive Float 3808s - encodes a negative Float 3808s - converts an Integer to a Float 3808s - raises a TypeError if passed a String representation of a floating point number 3808s - encodes the number of array elements specified by the count modifier 3808s - encodes all remaining elements when passed the '*' modifier 3808s - ignores NULL bytes between directives 3808s - ignores spaces between directives 3808s - encodes positive Infinity 3808s - encodes negative Infinity 3808s - encodes NaN 3808s - encodes a positive Float outside the range of a single precision float 3808s - encodes a negative Float outside the range of a single precision float 3808s - encodes a bignum as a float 3808s - encodes a rational as a float 3808s 3808s Array#pack with empty format 3808s - returns an empty String 3808s - returns a String with US-ASCII encoding 3808s 3808s Array#pack with format 'F' 3808s - raises a TypeError when passed nil 3808s - raises a TypeError when passed an Integer 3808s - ignores whitespace in the format string 3808s - ignores comments in the format string 3808s - calls #to_str to coerce the directives string 3808s - raises an ArgumentError if there are fewer elements than the format requires 3808s - raises ArgumentError when the format modifier is '_' 3808s - raises ArgumentError when the format modifier is '!' 3808s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError if a String does not represent a floating point number 3809s - raises a TypeError when the object is not Numeric 3809s - raises a TypeError when the Numeric object does not respond to #to_f 3809s - encodes a positive Float 3809s - encodes a negative Float 3809s - converts an Integer to a Float 3809s - raises a TypeError if passed a String representation of a floating point number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes positive Infinity 3809s - encodes negative Infinity 3809s - encodes NaN 3809s - encodes a positive Float outside the range of a single precision float 3809s - encodes a negative Float outside the range of a single precision float 3809s - encodes a bignum as a float 3809s - encodes a rational as a float 3809s 3809s Array#pack with format 'f' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError if a String does not represent a floating point number 3809s - raises a TypeError when the object is not Numeric 3809s - raises a TypeError when the Numeric object does not respond to #to_f 3809s - encodes a positive Float 3809s - encodes a negative Float 3809s - converts an Integer to a Float 3809s - raises a TypeError if passed a String representation of a floating point number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes positive Infinity 3809s - encodes negative Infinity 3809s - encodes NaN 3809s - encodes a positive Float outside the range of a single precision float 3809s - encodes a negative Float outside the range of a single precision float 3809s - encodes a bignum as a float 3809s - encodes a rational as a float 3809s 3809s Array#pack with format 'G' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError if a String does not represent a floating point number 3809s - raises a TypeError when the object is not Numeric 3809s - raises a TypeError when the Numeric object does not respond to #to_f 3809s - encodes a positive Float 3809s - encodes a negative Float 3809s - converts an Integer to a Float 3809s - raises a TypeError if passed a String representation of a floating point number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes positive Infinity 3809s - encodes negative Infinity 3809s - encodes NaN 3809s - encodes a positive Float outside the range of a single precision float 3809s - encodes a negative Float outside the range of a single precision float 3809s 3809s Array#pack with format 'g' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError if a String does not represent a floating point number 3809s - raises a TypeError when the object is not Numeric 3809s - raises a TypeError when the Numeric object does not respond to #to_f 3809s - encodes a positive Float 3809s - encodes a negative Float 3809s - converts an Integer to a Float 3809s - converts a Rational to a Float 3809s - raises a TypeError if passed a String representation of a floating point number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes positive Infinity 3809s - encodes negative Infinity 3809s - encodes NaN 3809s - encodes a positive Float outside the range of a single precision float 3809s - encodes a negative Float outside the range of a single precision float 3809s 3809s Array#pack with format 'H' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - encodes no bytes when passed zero as the count modifier 3809s - raises a TypeError if the object does not respond to #to_str 3809s - raises a TypeError if #to_str does not return a String 3809s - calls #to_str to convert an Object to a String 3809s - will not implicitly convert a number to a string 3809s - encodes the first character as the most significant nibble when passed no count modifier 3809s - implicitly has count equal to the string length when passed the '*' modifier 3809s - encodes count nibbles when passed a count modifier exceeding the string length 3809s - encodes the first character as the most significant nibble of a hex value 3809s - encodes the second character as the least significant nibble of a hex value 3809s - encodes the least significant nibble of a non alphanumeric character as the most significant nibble of the hex value 3809s - returns a binary string 3809s 3809s Array#pack with format 'h' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - encodes no bytes when passed zero as the count modifier 3809s - raises a TypeError if the object does not respond to #to_str 3809s - raises a TypeError if #to_str does not return a String 3809s - calls #to_str to convert an Object to a String 3809s - encodes the first character as the least significant nibble when passed no count modifier 3809s - implicitly has count equal to the string length when passed the '*' modifier 3809s - encodes count nibbles when passed a count modifier exceeding the string length 3809s - encodes the first character as the least significant nibble of a hex value 3809s - encodes the second character as the most significant nibble of a hex value 3809s - encodes the least significant nibble of a non alphanumeric character as the least significant nibble of the hex value 3809s - returns a binary string 3809s 3809s Array#pack with format 'I' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'i' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'I' with modifier '<' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '<' and '_' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '<' and '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '>' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '>' and '_' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '>' and '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '<' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '<' and '_' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '<' and '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '>' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '>' and '_' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '>' and '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'I' with modifier '_' 3809s - encodes the least significant 32 bits of a number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - encodes the least significant 32 bits of a number that is greater than 32 bits 3809s 3809s Array#pack with format 'I' with modifier '!' 3809s - encodes the least significant 32 bits of a number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - encodes the least significant 32 bits of a number that is greater than 32 bits 3809s 3809s Array#pack with format 'i' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'i' with modifier '_' 3809s - encodes the least significant 32 bits of a number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - encodes the least significant 32 bits of a number that is greater than 32 bits 3809s 3809s Array#pack with format 'i' with modifier '!' 3809s - encodes the least significant 32 bits of a number 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - encodes the least significant 32 bits of a number that is greater than 32 bits 3809s 3809s Array#pack with format 'J' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'j' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'J' with modifier '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'J' with modifier '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'J' with modifier '<' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'J' with modifier '<' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'J' with modifier '>' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'J' with modifier '>' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '<' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '<' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '>' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'j' with modifier '>' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'l' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'L' with modifier '<' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '>' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '<' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '<' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '>' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '>' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '<' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '>' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '<' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '<' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '>' and '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '>' and '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'L' with modifier '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '_' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'l' with modifier '!' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'M' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - encodes an empty string as an empty string 3809s - encodes nil as an empty string 3809s - appends a soft line break at the end of an encoded string 3809s - does not append a soft break if the string ends with a newline 3809s - encodes one element for each directive 3809s - encodes byte values 33..60 directly 3809s - encodes byte values 62..126 directly 3809s - encodes an '=' character in hex format 3809s - encodes an embedded space directly 3809s - encodes a space at the end of the string directly 3809s - encodes an embedded tab directly 3809s - encodes a tab at the end of the string directly 3809s - encodes an embedded newline directly 3809s - encodes 0..31 except tab and newline in hex format 3809s - encodes a tab at the end of a line with an encoded newline 3809s - encodes a space at the end of a line with an encoded newline 3809s - encodes 127..255 in hex format 3809s - emits a soft line break when the output exceeds 72 characters when passed '*', 0, 1, or no count modifier 3809s - emits a soft line break when the output exceeds count characters 3809s - encodes a recursive array 3809s - calls #to_s to convert an object to a String 3809s - converts the object to a String representation if #to_s does not return a String 3809s - encodes a Symbol as a String 3809s - encodes an Integer as a String 3809s - encodes a Float as a String 3809s - converts Floats to the minimum unique representation 3809s - sets the output string to US-ASCII encoding 3809s 3809s Array#pack with format 'm' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - encodes an empty string as an empty string 3809s - appends a newline to the end of the encoded string 3809s - encodes one element per directive 3809s - encodes 1, 2, or 3 characters in 4 output characters (Base64 encoding) 3809s - emits a newline after complete groups of count / 3 input characters when passed a count modifier 3809s - implicitly has a count of 45 when passed '*', 1, 2 or no count modifier 3809s - encodes all ascii characters 3809s - calls #to_str to convert an object to a String 3809s - raises a TypeError if #to_str does not return a String 3809s - raises a TypeError if passed nil 3809s - raises a TypeError if passed an Integer 3809s - does not emit a newline if passed zero as the count modifier 3809s - sets the output string to US-ASCII encoding 3809s 3809s Array#pack with format 'N' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'n' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'P' 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - produces as many bytes as there are in a pointer 3809s - with nil gives a null pointer 3809s 3809s Array#pack with format 'p' 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - produces as many bytes as there are in a pointer 3809s - with nil gives a null pointer 3809s 3809s Array#pack with format '%' 3809s - raises an Argument Error 3809s 3809s Array#pack with format 'Q' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'q' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'Q' with modifier '<' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'Q' with modifier '>' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'q' with modifier '<' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'q' with modifier '>' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'Q' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'q' 3809s - encodes the least significant 64 bits of a positive number 3809s - encodes the least significant 64 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 's' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s 3809s Array#pack with format 'S' with modifier '<' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '<' and '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '<' and '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '>' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '>' and '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '>' and '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '<' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '<' and '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '<' and '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '>' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '>' and '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '>' and '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'S' with modifier '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '_' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 's' with modifier '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'U' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - encodes ASCII values as a Unicode codepoint 3809s - encodes UTF-8 BMP codepoints 3809s - constructs strings with valid encodings 3809s - encodes values larger than UTF-8 max codepoints 3809s - encodes UTF-8 max codepoints 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - calls #to_int to convert the pack argument to an Integer 3809s - raises a TypeError if #to_int does not return an Integer 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - raises a RangeError if passed a negative number 3809s - raises a RangeError if passed a number larger than an unsigned 32-bit integer 3809s - sets the output string to UTF-8 encoding 3809s 3809s Array#pack with format 'u' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - calls #to_str to convert an Object to a String 3809s - will not implicitly convert a number to a string 3809s - encodes an empty string as an empty string 3809s - appends a newline to the end of the encoded string 3809s - encodes one element per directive 3809s - prepends the length of each segment of the input string as the first character (+32) in each line of the output 3809s - encodes 1, 2, or 3 characters in 4 output characters (uuencoding) 3809s - emits a newline after complete groups of count / 3 input characters when passed a count modifier 3809s - implicitly has a count of 45 when passed '*', 0, 1, 2 or no count modifier 3809s - encodes all ascii characters 3809s - calls #to_str to convert an object to a String 3809s - raises a TypeError if #to_str does not return a String 3809s - raises a TypeError if passed nil 3809s - raises a TypeError if passed an Integer 3809s - sets the output string to US-ASCII encoding 3809s 3809s Array#pack with format 'V' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - encodes the least significant 32 bits of a positive number 3809s - encodes the least significant 32 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'v' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - raises a TypeError when the object does not respond to #to_int 3809s - raises a TypeError when passed a String 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - encodes the least significant 16 bits of a positive number 3809s - encodes the least significant 16 bits of a negative number 3809s - encodes a Float truncated as an Integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - encodes the number of array elements specified by the count modifier 3809s - encodes all remaining elements when passed the '*' modifier 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s 3809s Array#pack with format 'w' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises an ArgumentError if there are fewer elements than the format requires 3809s - returns an empty String if count is zero 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed true 3809s - raises a TypeError when passed false 3809s - returns a binary string 3809s - encodes a BER-compressed integer 3809s - calls #to_int to convert the pack argument to an Integer 3809s - ignores NULL bytes between directives 3809s - ignores spaces between directives 3809s - raises an ArgumentError when passed a negative value 3809s - returns a binary string 3809s 3809s Array#pack with format 'x' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - adds a NULL byte with an empty array 3809s - adds a NULL byte without consuming an element 3809s - is not affected by a previous count modifier 3809s - adds multiple NULL bytes when passed a count modifier 3809s - does not add a NULL byte if the count modifier is zero 3809s - does not add a NULL byte when passed the '*' modifier 3809s 3809s Array#pack with format 'X' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - reduces the output string by one byte at the point it is encountered 3809s - does not consume any elements 3809s - reduces the output string by multiple bytes when passed a count modifier 3809s - has no affect when passed the '*' modifier 3809s - raises an ArgumentError if the output string is empty 3809s - raises an ArgumentError if the count modifier is greater than the bytes in the string 3809s 3809s Array#pack with format 'Z' 3809s - raises a TypeError when passed nil 3809s - raises a TypeError when passed an Integer 3809s - ignores whitespace in the format string 3809s - ignores comments in the format string 3809s - warns in verbose mode that a directive is unknown 3809s - calls #to_str to coerce the directives string 3809s - raises ArgumentError when the format modifier is '_' 3809s - raises ArgumentError when the format modifier is '!' 3809s - adds count bytes of a String to the output 3809s - implicitly has a count of one when no count is specified 3809s - does not add any bytes when the count is zero 3809s - is not affected by a previous count modifier 3809s - raises an ArgumentError when the Array is empty 3809s - raises an ArgumentError when the Array has too few elements 3809s - calls #to_str to convert the element to a String 3809s - raises a TypeError when the object does not respond to #to_str 3809s - returns a string in encoding of common to the concatenated results 3809s - calls #to_str to convert an Object to a String 3809s - will not implicitly convert a number to a string 3809s - adds all the bytes and appends a NULL byte when passed the '*' modifier 3809s - padds the output with NULL bytes when the count exceeds the size of the String 3809s - adds a NULL byte when the value is nil 3809s - pads the output with NULL bytes when the value is nil 3809s - does not append a NULL byte when passed the '*' modifier and the value is nil 3809s 3809s Array#partition 3809s - returns two arrays 3809s - returns in the left array values for which the block evaluates to true 3809s - properly handles recursive arrays 3809s - does not return subclass instances on Array subclasses 3809s 3809s Array#permutation 3809s - returns an Enumerator of all permutations when called without a block or arguments 3809s - returns an Enumerator of permutations of given length when called with an argument but no block 3809s - yields all permutations to the block then returns self when called with block but no arguments 3809s - yields all permutations of given length to the block then returns self when called with block and argument 3809s - returns the empty permutation ([[]]) when the given length is 0 3809s - returns the empty permutation([]) when called on an empty Array 3809s - returns no permutations when the given length has no permutations 3809s - handles duplicate elements correctly 3809s - handles nested Arrays correctly 3809s - truncates Float arguments 3809s - returns an Enumerator which works as expected even when the array was modified 3809s - generates from a defensive copy, ignoring mutations 3809s 3809s Array#permutation when no block is given returned Enumerator size with an array size greater than 0 3809s - returns the descending factorial of array size and given length 3809s - returns the descending factorial of array size with array size when there's no param 3809s 3809s Array#permutation when no block is given returned Enumerator size with an empty array 3809s - returns 1 when the given length is 0 3809s - returns 1 when there's param 3809s 3809s Array#+ 3809s - concatenates two arrays 3809s - can concatenate an array with itself 3809s - properly handles recursive arrays 3809s - does return subclass instances with Array subclasses 3809s - does not call to_ary on array subclasses 3809s 3809s Array#+ converts the passed argument to an Array using #to_ary 3809s - successfully concatenates the resulting array from the #to_ary call 3809s - raises a Typeerror if the given argument can't be converted to an array 3809s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to an Array 3809s 3809s Array#pop 3809s - removes and returns the last element of the array 3809s - returns nil if there are no more elements 3809s - properly handles recursive arrays 3809s - raises a FrozenError on a frozen array 3809s - raises a FrozenError on an empty frozen array 3809s 3809s Array#pop passed a number n as an argument 3809s - removes and returns an array with the last n elements of the array 3809s - returns an array with the last n elements even if shift was invoked 3809s - returns a new empty array if there are no more elements 3809s - returns whole elements if n exceeds size of the array 3809s - does not return self even when it returns whole elements 3809s - raises an ArgumentError if n is negative 3809s - tries to convert n to an Integer using #to_int 3809s - raises a TypeError when the passed n cannot be coerced to Integer 3809s - raises an ArgumentError if more arguments are passed 3809s - does not return subclass instances with Array subclass 3809s - raises a FrozenError on a frozen array 3809s 3809s Array#prepend 3809s - prepends object to the original array 3809s - returns self 3809s - quietly ignores unshifting nothing 3809s - properly handles recursive arrays 3809s - raises a FrozenError on a frozen array when the array is modified 3809s - raises a FrozenError on a frozen array when the array would not be modified 3809s - doesn't rely on Array#[]= so it can be overridden 3809s 3809s Array#product 3809s - returns converted arguments using :to_ary 3809s - returns converted arguments using :method_missing 3809s - returns the expected result 3809s - has no required argument 3809s - returns an empty array when the argument is an empty array 3809s - does not attempt to produce an unreasonable number of products 3809s 3809s Array#product when given a block 3809s - yields all combinations in turn 3809s - returns self 3809s - will ignore unreasonable numbers of products and yield anyway 3809s 3809s Array#product when given an empty block 3809s - returns self 3809s 3809s Array#push 3809s - appends the arguments to the array 3809s - isn't confused by previous shift 3809s - properly handles recursive arrays 3809s - raises a FrozenError on a frozen array 3809s 3809s Array#rassoc 3809s - returns the first contained array whose second element is == object 3809s - properly handles recursive arrays 3809s - calls elem == obj on the second element of each contained array 3809s - does not check the last element in each contained but specifically the second 3809s 3809s Array#reject 3809s - returns a new array without elements for which block is true 3809s - returns self when called on an Array emptied with #shift 3809s - properly handles recursive arrays 3809s - does not return subclass instance on Array subclasses 3809s - does not retain instance variables 3809s - returns an Enumerator if no block given 3809s 3809s Array#reject when no block is given returned Enumerator 3809s - size returns the enumerable size 3809s 3809s Array#reject 3809s - tolerates increasing an array size during iteration 3809s 3809s Array#reject! 3809s - removes elements for which block is true 3809s - properly handles recursive arrays 3809s - returns nil when called on an Array emptied with #shift 3809s - returns nil if no changes are made 3809s - returns an Enumerator if no block given, and the array is frozen 3809s - raises a FrozenError on a frozen array 3809s - raises a FrozenError on an empty frozen array 3809s - raises a FrozenError on a frozen array only during iteration if called without a block 3809s - does not truncate the array is the block raises an exception 3809s - only removes elements for which the block returns true, keeping the element which raised an error. 3809s - returns an Enumerator if no block given 3809s - updates the receiver after all blocks 3809s 3809s Array#reject! when no block is given returned Enumerator 3809s - size returns the enumerable size 3809s 3809s Array#reject! 3809s - tolerates increasing an array size during iteration 3809s 3809s Array#repeated_combination 3809s - returns an enumerator when no block is provided 3809s - returns self when a block is given 3809s - yields nothing for negative length and return self 3809s - yields the expected repeated_combinations 3809s - yields [] when length is 0 3809s - yields nothing when the array is empty and num is non zero 3809s - yields a partition consisting of only singletons 3809s - accepts sizes larger than the original array 3809s - generates from a defensive copy, ignoring mutations 3809s 3809s Array#repeated_combination when no block is given returned Enumerator size 3809s - returns 0 when the combination_size is < 0 3809s - returns 1 when the combination_size is 0 3809s - returns the binomial coefficient between combination_size and array size + combination_size -1 3809s 3809s Array#repeated_permutation 3809s - returns an Enumerator of all repeated permutations of given length when called without a block 3809s - yields all repeated_permutations to the block then returns self when called with block but no arguments 3809s - yields the empty repeated_permutation ([[]]) when the given length is 0 3809s - does not yield when called on an empty Array with a nonzero argument 3809s - handles duplicate elements correctly 3809s - truncates Float arguments 3809s - returns an Enumerator which works as expected even when the array was modified 3809s - allows permutations larger than the number of elements 3809s - generates from a defensive copy, ignoring mutations 3809s 3809s Array#repeated_permutation when no block is given returned Enumerator size 3809s - returns 0 when combination_size is < 0 3809s - returns array size ** combination_size 3809s 3809s Array#replace 3809s - replaces the elements with elements from other array 3809s - properly handles recursive arrays 3809s - returns self 3809s - does not make self dependent to the original array 3809s - tries to convert the passed argument to an Array using #to_ary 3809s - does not call #to_ary on Array subclasses 3809s - raises a FrozenError on a frozen array 3809s 3809s Array#reverse_each 3809s - traverses array in reverse order and pass each element to block 3809s - returns self 3809s - yields only the top level element of an empty recursive arrays 3809s - yields only the top level element of a recursive array 3809s - returns the correct size when no block is given 3809s - tolerates increasing an array size during iteration 3809s - returns an Enumerator if no block given 3809s 3809s Array#reverse_each when no block is given returned Enumerator 3809s - size returns the enumerable size 3809s 3809s Array#reverse 3809s - returns a new array with the elements in reverse order 3809s - properly handles recursive arrays 3809s - does not return subclass instance on Array subclasses 3809s 3809s Array#reverse! 3809s - reverses the elements in place 3809s - properly handles recursive arrays 3809s - raises a FrozenError on a frozen array 3809s 3809s Array#rindex 3809s - returns the first index backwards from the end where element == to object 3809s - returns size-1 if last element == to object 3809s - returns 0 if only first element == to object 3809s - returns nil if no element == to object 3809s - returns correct index even after delete_at 3809s - properly handles empty recursive arrays 3809s - properly handles recursive arrays 3809s - accepts a block instead of an argument 3809s - ignores the block if there is an argument 3809s - rechecks the array size during iteration 3809s - tolerates increasing an array size during iteration 3809s 3809s Array#rindex given no argument and no block 3809s - produces an Enumerator 3809s 3809s Array#rindex when no block is given returned Enumerator 3809s - size returns nil 3809s 3809s Array#rotate 3809s - returns a copy of the array when its length is one or zero 3809s - does not mutate the receiver 3809s - does not return self 3809s - does not return subclass instance for Array subclasses 3809s 3809s Array#rotate when passed no argument 3809s - returns a copy of the array with the first element moved at the end 3809s 3809s Array#rotate with an argument n 3809s - returns a copy of the array with the first (n % size) elements moved at the end 3809s - coerces the argument using to_int 3809s - raises a TypeError if not passed an integer-like argument 3809s 3809s Array#rotate! 3809s - does nothing and returns self when the length is zero or one 3809s - raises a FrozenError on a frozen array 3809s 3809s Array#rotate! when passed no argument 3809s - moves the first element to the end and returns self 3809s 3809s Array#rotate! with an argument n 3809s - moves the first (n % size) elements at the end and returns self 3809s - coerces the argument using to_int 3809s - raises a TypeError if not passed an integer-like argument 3809s 3809s Array#sample 3810s - samples evenly 3810s - returns nil for an empty Array 3810s - returns nil for an empty array when called without n and a Random is given 3810s - returns a single value when not passed a count 3810s - returns a single value when not passed a count and a Random is given 3810s - returns a single value when not passed a count and a Random class is given 3810s - returns an empty Array when passed zero 3810s - returns an Array of elements when passed a count 3810s - returns elements from the Array 3810s - returns at most the number of elements in the Array 3810s - does not return the same value if the Array has unique values 3810s - may return the same value if the array is not unique 3810s - calls #to_int to convert the count when passed an Object 3810s - raises ArgumentError when passed a negative count 3810s - does not return subclass instances with Array subclass 3810s 3810s Array#sample with options 3810s - calls #rand on the Object passed by the :random key in the arguments Hash 3810s - raises a NoMethodError if an object passed for the RNG does not define #rand 3810s 3810s Array#sample with options when the object returned by #rand is an Integer 3810s - uses the integer as index 3810s - raises a RangeError if the value is less than zero 3810s - raises a RangeError if the value is equal to the Array size 3810s 3810s Array#sample when the object returned by #rand is not an Integer but responds to #to_int 3810s - calls #to_int on the Object 3810s - raises a RangeError if the value is less than zero 3810s - raises a RangeError if the value is equal to the Array size 3810s 3810s Array#select 3810s - returns an Enumerator if no block given 3810s - tolerates increasing an array size during iteration 3810s - returns a new array of elements for which block is true 3810s - does not return subclass instance on Array subclasses 3810s - properly handles recursive arrays 3810s 3810s Array#select when no block is given returned Enumerator 3810s - size returns the enumerable size 3810s 3810s Array#select! 3810s - returns nil if no changes were made in the array 3810s - deletes elements for which the block returns a false value 3810s - returns an enumerator if no block is given 3810s - updates the receiver after all blocks 3810s - does not truncate the array is the block raises an exception 3810s - only changes elements before error is raised, keeping the element which raised an error. 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#select! when no block is given returned Enumerator 3810s - size returns the enumerable size 3810s 3810s Array#select! on frozen objects 3810s - returns an Enumerator if no block is given 3810s - raises a FrozenError on a frozen array only during iteration if called without a block 3810s 3810s Array#select! on frozen objects with truthy block 3810s - keeps elements after any exception 3810s - raises a FrozenError 3810s 3810s Array#select! on frozen objects with falsy block 3810s - keeps elements after any exception 3810s - raises a FrozenError 3810s 3810s Array#shift 3810s - removes and returns the first element 3810s - returns nil when the array is empty 3810s - properly handles recursive arrays 3810s - raises a FrozenError on a frozen array 3810s - raises a FrozenError on an empty frozen array 3810s 3810s Array#shift passed a number n as an argument 3810s - removes and returns an array with the first n element of the array 3810s - does not corrupt the array when shift without arguments is followed by shift with an argument 3810s - returns a new empty array if there are no more elements 3810s - returns whole elements if n exceeds size of the array 3810s - does not return self even when it returns whole elements 3810s - raises an ArgumentError if n is negative 3810s - tries to convert n to an Integer using #to_int 3810s - raises a TypeError when the passed n cannot be coerced to Integer 3810s - raises an ArgumentError if more arguments are passed 3810s - does not return subclass instances with Array subclass 3810s 3810s Array#shuffle 3810s - returns the same values, in a usually different order 3810s - is not destructive 3810s - does not return subclass instances with Array subclass 3810s - calls #rand on the Object passed by the :random key in the arguments Hash 3810s - raises a NoMethodError if an object passed for the RNG does not define #rand 3810s - accepts a Float for the value returned by #rand 3810s - accepts a Random class for the value for random: argument 3810s - calls #to_int on the Object returned by #rand 3810s - raises a RangeError if the value is less than zero 3810s - raises a RangeError if the value is equal to one 3810s 3810s Array#shuffle! 3810s - returns the same values, in a usually different order 3810s - raises a FrozenError on a frozen array 3810s - matches CRuby with random: 3810s - matches CRuby with srand 3810s 3810s Array#size 3810s - returns the number of elements 3810s - properly handles recursive arrays 3810s 3810s Array#slice! 3810s - removes and return the element at index 3810s - removes and returns length elements beginning at start 3810s - returns nil if length is negative 3810s - properly handles recursive arrays 3810s - calls to_int on start and length arguments 3810s - removes and return elements in range 3810s - removes and returns elements in end-exclusive ranges 3810s - calls to_int on range arguments 3810s - returns last element for consecutive calls at zero index 3810s - does not expand array with indices out of bounds 3810s - does not expand array with negative indices out of bounds 3810s - raises a FrozenError on a frozen array 3810s - works with endless ranges 3810s - works with beginless ranges 3810s 3810s Array#slice! with a subclass of Array 3810s - returns a Array instance with [n, m] 3810s - returns a Array instance with [-n, m] 3810s - returns a Array instance with [n..m] 3810s - returns a Array instance with [n...m] 3810s - returns a Array instance with [-n..-m] 3810s - returns a Array instance with [-n...-m] 3810s 3810s Array#slice 3810s - returns the element at index with [index] 3810s - returns the element at index from the end of the array with [-index] 3810s - returns count elements starting from index with [index, count] 3810s - returns count elements starting at index from the end of array with [-index, count] 3810s - returns the first count elements with [0, count] 3810s - returns the subarray which is independent to self with [index,count] 3810s - tries to convert the passed argument to an Integer using #to_int 3810s - raises TypeError if to_int returns non-integer 3810s - returns the elements specified by Range indexes with [m..n] 3810s - returns elements specified by Range indexes except the element at index n with [m...n] 3810s - returns elements that exist if range start is in the array but range end is not with [m..n] 3810s - accepts Range instances having a negative m and both signs for n with [m..n] and [m...n] 3810s - returns the subarray which is independent to self with [m..n] 3810s - tries to convert Range elements to Integers using #to_int with [m..n] and [m...n] 3810s - returns the same elements as [m..n] and [m...n] with Range subclasses 3810s - returns nil for a requested index not in the array with [index] 3810s - returns [] if the index is valid but length is zero with [index, length] 3810s - returns nil if length is zero but index is invalid with [index, length] 3810s - returns [] if index == array.size with [index, length] 3810s - returns nil if index > array.size with [index, length] 3810s - returns nil if length is negative with [index, length] 3810s - returns nil if no requested index is in the array with [m..n] 3810s - returns nil if range start is not in the array with [m..n] 3810s - returns an empty array when m == n with [m...n] 3810s - returns an empty array with [0...0] 3810s - returns a subarray where m, n negatives and m < n with [m..n] 3810s - returns an array containing the first element with [0..0] 3810s - returns the entire array with [0..-1] 3810s - returns all but the last element with [0...-1] 3810s - returns [3] for [2..-1] out of [1, 2, 3] 3810s - returns an empty array when m > n and m, n are positive with [m..n] 3810s - returns an empty array when m > n and m, n are negative with [m..n] 3810s - does not expand array when the indices are outside of the array bounds 3810s - raises a RangeError when the length is out of range of Fixnum 3810s - raises a type error if a range is passed with a length 3810s - raises a RangeError if passed a range with a bound that is too large 3810s - can accept endless ranges 3810s - can accept beginless ranges 3810s - can accept nil...nil ranges 3810s 3810s Array#slice with a subclass of Array 3810s - returns a Array instance with [n, m] 3810s - returns a Array instance with [-n, m] 3810s - returns a Array instance with [n..m] 3810s - returns a Array instance with [n...m] 3810s - returns a Array instance with [-n..-m] 3810s - returns a Array instance with [-n...-m] 3810s - returns an empty array when m == n with [m...n] 3810s - returns an empty array with [0...0] 3810s - returns an empty array when m > n and m, n are positive with [m..n] 3810s - returns an empty array when m > n and m, n are negative with [m..n] 3810s - returns [] if index == array.size with [index, length] 3810s - returns [] if the index is valid but length is zero with [index, length] 3810s - does not call #initialize on the subclass instance 3810s 3810s Array#slice can be sliced with Enumerator::ArithmeticSequence 3810s - has endless range and positive steps 3810s - has beginless range and positive steps 3810s - has endless range and negative steps 3810s - has closed range and positive steps 3810s - has closed range and negative steps 3810s - has inverted closed range and positive steps 3810s - has range with bounds outside of array 3810s - has endless range with start outside of array's bounds 3810s 3810s Array#sort_by! 3810s - sorts array in place by passing each element to the given block 3810s - returns an Enumerator if not given a block 3810s - completes when supplied a block that always returns the same result 3810s - raises a FrozenError on a frozen array 3810s - raises a FrozenError on an empty frozen array 3810s - raises a FrozenError on a frozen array only during iteration if called without a block 3810s - returns the specified value when it would break in the given block 3810s - makes some modification even if finished sorting when it would break in the given block 3810s - changes nothing when called on a single element array 3810s - does not truncate the array is the block raises an exception 3810s - doesn't change array if error is raised 3810s 3810s Array#sort_by! when no block is given returned Enumerator 3810s - size returns the enumerable size 3810s 3810s Array#sort_by! 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#sort 3810s - returns a new array sorted based on comparing elements with <=> 3810s - does not affect the original Array 3810s - sorts already-sorted Arrays 3810s - sorts reverse-sorted Arrays 3810s - sorts Arrays that consist entirely of equal elements 3810s - sorts Arrays that consist mostly of equal elements 3810s - does not return self even if the array would be already sorted 3810s - properly handles recursive arrays 3810s - uses #<=> of elements in order to sort 3810s - does not deal with exceptions raised by unimplemented or incorrect #<=> 3810s - may take a block which is used to determine the order of objects a and b described as -1, 0 or +1 3810s - raises an error when a given block returns nil 3810s - does not call #<=> on contained objects when invoked with a block 3810s - does not call #<=> on elements when invoked with a block even if Array is large (Rubinius #412) 3810s - completes when supplied a block that always returns the same result 3810s - does not freezes self during being sorted 3810s - returns the specified value when it would break in the given block 3810s - uses the sign of Integer block results as the sort result 3810s - compares values returned by block with 0 3810s - sorts an array that has a value shifted off without a block 3810s - sorts an array that has a value shifted off with a block 3810s - raises an error if objects can't be compared 3810s - handles a large array that has been pruned 3810s - does not return subclass instance on Array subclasses 3810s 3810s Array#sort! 3810s - sorts array in place using <=> 3810s - sorts array in place using block value if a block given 3810s - returns self if the order of elements changed 3810s - returns self even if makes no modification 3810s - properly handles recursive arrays 3810s - uses #<=> of elements in order to sort 3810s - does not call #<=> on contained objects when invoked with a block 3810s - does not call #<=> on elements when invoked with a block even if Array is large (Rubinius #412) 3810s - completes when supplied a block that always returns the same result 3810s - raises a FrozenError on a frozen array 3810s - returns the specified value when it would break in the given block 3810s - makes some modification even if finished sorting when it would break in the given block 3810s 3810s Array#sum 3810s - returns the sum of elements 3810s - applies a block to each element before adding if it's given 3810s - doesn't apply the block init 3810s - uses Kahan's compensated summation algorithm for precise sum of float numbers 3810s - handles infinite values and NaN 3810s - returns init value if array is empty 3810s - returns 0 if array is empty and init is omitted 3810s - adds init value to the sum of elements 3810s - can be used for non-numeric objects by providing init value 3810s - raises TypeError if any element are not numeric 3810s - raises TypeError if any element cannot be added to init value 3810s - calls + to sum the elements 3810s - calls + on the init value 3810s 3810s Array#sum 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#take 3810s - returns the first specified number of elements 3810s - returns all elements when the argument is greater than the Array size 3810s - returns all elements when the argument is less than the Array size 3810s - returns an empty Array when passed zero 3810s - returns an empty Array when called on an empty Array 3810s - raises an ArgumentError when the argument is negative 3810s - returns a Array instance for Array subclasses 3810s 3810s Array#take_while 3810s - returns all elements until the block returns false 3810s - returns all elements until the block returns nil 3810s - returns all elements until the block returns false 3810s - returns a Array instance for Array subclasses 3810s 3810s Array#take_while 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#to_a 3810s - returns self 3810s - does not return subclass instance on Array subclasses 3810s - properly handles recursive arrays 3810s 3810s Array#to_ary 3810s - returns self 3810s - properly handles recursive arrays 3810s 3810s Array#to_h 3810s - converts empty array to empty hash 3810s - converts [key, value] pairs to a hash 3810s - uses the last value of a duplicated key 3810s - calls #to_ary on contents 3810s - raises TypeError if an element is not an array 3810s - raises ArgumentError if an element is not a [key, value] pair 3810s - does not accept arguments 3810s - produces a hash that returns nil for a missing element 3810s 3810s Array#to_h with block 3810s - converts [key, value] pairs returned by the block to a Hash 3810s - raises ArgumentError if block returns longer or shorter array 3810s - raises TypeError if block returns something other than Array 3810s - coerces returned pair to Array with #to_ary 3810s - does not coerce returned pair to Array with #to_a 3810s 3810s Array#to_h 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#to_s 3810s - returns a string 3810s - returns '[]' for an empty Array 3810s - calls inspect on its elements and joins the results with commas 3810s - does not call #to_s on a String returned from #inspect 3810s - calls #to_s on the object returned from #inspect if the Object isn't a String 3810s - does not call #to_str on the object returned from #inspect when it is not a String 3810s - does not call #to_str on the object returned from #to_s when it is not a String 3810s - does not swallow exceptions raised by #to_s 3810s - represents a recursive element with '[...]' 3810s 3810s Array#to_s with encoding 3810s - returns a US-ASCII string for an empty Array 3810s - use the default external encoding if it is ascii compatible 3810s - use US-ASCII encoding if the default external encoding is not ascii compatible 3810s - does not raise if inspected result is not default external encoding 3810s 3810s Array#transpose 3810s - assumes an array of arrays and returns the result of transposing rows and columns 3810s - tries to convert the passed argument to an Array using #to_ary 3810s - properly handles recursive arrays 3810s - raises a TypeError if the passed Argument does not respond to #to_ary 3810s - does not call to_ary on array subclass elements 3810s - raises an IndexError if the arrays are not of the same length 3810s - does not return subclass instance on Array subclasses 3810s 3810s Array.try_convert 3810s - returns the argument if it's an Array 3810s - returns the argument if it's a kind of Array 3810s - returns nil when the argument does not respond to #to_ary 3810s - sends #to_ary to the argument and returns the result if it's nil 3810s - sends #to_ary to the argument and returns the result if it's an Array 3810s - sends #to_ary to the argument and returns the result if it's a kind of Array 3810s - sends #to_ary to the argument and raises TypeError if it's not a kind of Array 3810s - does not rescue exceptions raised by #to_ary 3810s 3810s Array#| 3810s - returns an array of elements that appear in either array (union) 3810s - creates an array with no duplicates 3810s - creates an array with elements in order they are first encountered 3810s - properly handles recursive arrays 3810s - tries to convert the passed argument to an Array using #to_ary 3810s - acts as if using an intermediate hash to collect values 3810s - does not return subclass instances for Array subclasses 3810s - does not call to_ary on array subclasses 3810s - properly handles an identical item even when its #eql? isn't reflexive 3810s 3810s Array#union 3810s - returns an array of elements that appear in either array (union) 3810s - creates an array with no duplicates 3810s - creates an array with elements in order they are first encountered 3810s - properly handles recursive arrays 3810s - tries to convert the passed argument to an Array using #to_ary 3810s - acts as if using an intermediate hash to collect values 3810s - does not return subclass instances for Array subclasses 3810s - does not call to_ary on array subclasses 3810s - properly handles an identical item even when its #eql? isn't reflexive 3810s - returns unique elements when given no argument 3810s - does not return subclass instances for Array subclasses 3810s - accepts multiple arguments 3810s 3810s Array#uniq 3810s - returns an array with no duplicates 3810s - properly handles recursive arrays 3810s - uses eql? semantics 3810s - compares elements first with hash 3810s - does not compare elements with different hash codes via eql? 3810s - compares elements with matching hash codes with #eql? 3810s - compares elements based on the value returned from the block 3810s - yields items in order 3810s - handles nil and false like any other values 3810s - returns Array instance on Array subclasses 3810s - properly handles an identical item even when its #eql? isn't reflexive 3810s 3810s Array#uniq given an array of BasicObject subclasses that define ==, eql?, and hash 3810s - filters equivalent elements using those definitions 3810s 3810s Array#uniq 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#uniq! 3810s - modifies the array in place 3810s - returns self 3810s - properly handles recursive arrays 3810s - compares elements first with hash 3810s - does not compare elements with different hash codes via eql? 3810s - returns nil if no changes are made to the array 3810s - raises a FrozenError on a frozen array when the array is modified 3810s - raises a FrozenError on a frozen array when the array would not be modified 3810s - doesn't yield to the block on a frozen array 3810s - compares elements based on the value returned from the block 3810s - properly handles an identical item even when its #eql? isn't reflexive 3810s - does not truncate the array is the block raises an exception 3810s - doesn't change array if error is raised 3810s 3810s Array#uniq! 3810s - tolerates increasing an array size during iteration 3810s 3810s Array#unshift 3810s - prepends object to the original array 3810s - returns self 3810s - quietly ignores unshifting nothing 3810s - properly handles recursive arrays 3810s - raises a FrozenError on a frozen array when the array is modified 3810s - raises a FrozenError on a frozen array when the array would not be modified 3810s - doesn't rely on Array#[]= so it can be overridden 3810s 3810s Array#values_at 3810s - returns an array of elements at the indexes when passed indexes 3810s - calls to_int on its indices 3810s - properly handles recursive arrays 3810s - does not return subclass instance on Array subclasses 3810s - works when given endless ranges 3810s - works when given beginless ranges 3810s 3810s Array#values_at when passed ranges 3810s - returns an array of elements in the ranges 3810s - calls to_int on arguments of ranges 3810s 3810s Array#values_at when passed a range 3810s - fills with nil if the index is out of the range 3810s 3810s Array#values_at when passed a range on an empty array 3810s - fills with nils if the index is out of the range 3810s 3810s Array#zip 3810s - returns an array of arrays containing corresponding elements of each array 3810s - fills in missing values with nil 3810s - properly handles recursive arrays 3810s - calls #to_ary to convert the argument to an Array 3810s - uses #each to extract arguments' elements when #to_ary fails 3810s - stops at own size when given an infinite enumerator 3810s - fills nil when the given enumerator is shorter than self 3810s - calls block if supplied 3810s - does not return subclass instance on Array subclasses 3810s 3810s BasicObject#__id__ 3810s - returns an integer 3810s - returns the same value on all calls to id for a given object 3810s - returns different values for different objects 3810s - returns the same value for two Fixnums with the same value 3810s - returns the same value for two Symbol literals 3810s - returns the same value for two true literals 3810s - returns the same value for two false literals 3810s - returns the same value for two nil literals 3810s - returns a different value for two Bignum literals 3810s - returns a different value for two String literals 3810s - returns a different value for an object and its dup 3810s - returns a different value for two numbers near the 32 bit Fixnum limit 3810s - returns a different value for two numbers near the 64 bit Fixnum limit 3810s 3810s BasicObject#__send__ 3810s - is a public instance method 3810s - invokes the named method 3810s - accepts a String method name 3810s - invokes a class method if called on a class 3810s - raises a TypeError if the method name is not a string or symbol 3810s - raises a NameError if the corresponding method can't be found 3810s - raises a NameError if the corresponding singleton method can't be found 3810s - raises an ArgumentError if no arguments are given 3810s - raises an ArgumentError if called with more arguments than available parameters 3810s - raises an ArgumentError if called with fewer arguments than required parameters 3810s - succeeds if passed an arbitrary number of arguments as a splat parameter 3810s - succeeds when passing 1 or more arguments as a required and a splat parameter 3810s - succeeds when passing 0 arguments to a method with one parameter with a default 3810s - has a negative arity 3810s - invokes module methods with super correctly 3810s 3810s BasicObject 3813s - raises NoMethodError for nonexistent methods after #method_missing is removed 3813s - raises NameError when referencing built-in constants 3813s - does not define built-in constants (according to const_defined?) 3813s - does not define built-in constants (according to defined?) 3813s - is included in Object's list of constants 3813s - includes itself in its list of constants 3813s 3813s BasicObject metaclass 3813s - is an instance of Class 3813s - has Class as superclass 3813s - contains methods for the BasicObject class 3813s 3813s BasicObject instance metaclass 3813s - is an instance of Class 3813s - has BasicObject as superclass 3813s - contains methods defined for the BasicObject instance 3813s 3813s BasicObject subclass 3813s - contains Kernel methods when including Kernel 3813s 3813s BasicObject subclass BasicObject references 3813s - can refer to BasicObject from within itself 3813s 3813s BasicObject#equal? 3813s - is a public instance method 3813s - returns true if other is identical to self 3813s - returns false if other is not identical to self 3813s - returns true only if self and other are the same object 3813s - returns true for the same immediate object 3813s - returns false for nil and any other object 3813s - returns false for objects of different classes 3813s - returns true only if self and other are the same boolean 3813s - returns true for integers of initially different ranges 3813s - is unaffected by overriding __id__ 3813s - is unaffected by overriding object_id 3813s - is unaffected by overriding == 3813s - is unaffected by overriding eql? 3813s 3813s BasicObject#== 3813s - is a public instance method 3813s - returns true if other is identical to self 3813s - returns false if other is not identical to self 3813s - returns true only if self and other are the same object 3813s - returns true for the same immediate object 3813s - returns false for nil and any other object 3813s - returns false for objects of different classes 3813s - returns true only if self and other are the same boolean 3813s - returns true for integers of initially different ranges 3813s 3813s BasicObject#initialize 3813s - is a private instance method 3813s - does not accept arguments 3813s 3813s BasicObject#instance_eval 3813s - is a public instance method 3813s - sets self to the receiver in the context of the passed block 3813s - evaluates strings 3813s - raises an ArgumentError when no arguments and no block are given 3813s - raises an ArgumentError when a block and normal arguments are given 3813s - raises an ArgumentError when more than 3 arguments are given 3813s - yields the object to the block 3813s - returns the result of the block 3813s - only binds the eval to the receiver 3813s - preserves self in the original block when passed a block argument 3813s - binds self to the receiver 3813s - executes in the context of the receiver 3813s - has access to receiver's instance variables 3813s - treats block-local variables as local to the block 3813s - makes the receiver metaclass the scoped class when used with a string 3813s - doesn't get constants in the receiver if a block given 3813s - raises a TypeError when defining methods on an immediate 3813s - raises a TypeError when defining methods on numerics 3813s - evaluates procs originating from methods 3813s - evaluates string with given filename and linenumber 3813s - evaluates string with given filename and negative linenumber 3813s - has access to the caller's local variables 3813s - converts string argument with #to_str method 3813s - raises ArgumentError if returned value is not String 3813s - converts filename argument with #to_str method 3813s - raises ArgumentError if returned value is not String 3813s - converts lineno argument with #to_int method 3813s 3813s BasicObject#instance_eval constants lookup when a String given 3813s - looks in the receiver singleton class first 3813s - looks in the caller class next 3813s - looks in the caller outer scopes next 3813s - looks in the receiver class hierarchy next 3813s 3813s BasicObject#instance_eval class variables lookup 3813s - gets class variables in the caller class when called with a String 3813s - gets class variables in the block definition scope when called with a block 3813s - sets class variables in the caller class when called with a String 3813s - sets class variables in the block definition scope when called with a block 3813s - does not have access to class variables in the receiver class when called with a String 3813s - does not have access to class variables in the receiver's singleton class when called with a String 3813s 3813s BasicObject#instance_exec 3813s - is a public instance method 3813s - sets self to the receiver in the context of the passed block 3813s - passes arguments to the block 3813s - raises a LocalJumpError unless given a block 3813s - has an arity of -1 3813s - accepts arguments with a block 3813s - doesn't pass self to the block as an argument 3813s - passes any arguments to the block 3813s - only binds the exec to the receiver 3813s - binds self to the receiver 3813s - binds the block's binding self to the receiver 3813s - executes in the context of the receiver 3813s - has access to receiver's instance variables 3813s - sets class variables in the receiver 3813s - raises a TypeError when defining methods on an immediate 3813s - raises a TypeError when defining methods on numerics 3813s 3813s BasicObject#method_missing 3813s - is a private method 3813s 3813s BasicObject#method_missing for a Class 3813s - raises a NoMethodError when an undefined method is called 3813s - raises a NoMethodError when a protected method is called 3813s - raises a NoMethodError when a private method is called 3813s 3813s BasicObject#method_missing for an instance 3813s - raises a NoMethodError when an undefined method is called 3813s - raises a NoMethodError when a protected method is called 3813s - raises a NoMethodError when a private method is called 3813s - sets the receiver of the raised NoMethodError 3813s 3813s BasicObject#method_missing for a Module with #method_missing defined 3813s - is not called when a defined method is called 3813s - is called when a not defined method is called 3813s - is called when a protected method is called 3813s - is called when a private method is called 3813s 3813s BasicObject#method_missing for a Module 3813s - raises a NoMethodError when an undefined method is called 3813s - raises a NoMethodError when a protected method is called 3813s - raises a NoMethodError when a private method is called 3813s 3813s BasicObject#method_missing for a Class with #method_missing defined 3813s - is not called when a defined method is called 3813s - is called when an undefined method is called 3813s - is called when an protected method is called 3813s - is called when an private method is called 3813s 3813s BasicObject#method_missing for a Class 3813s - raises a NoMethodError when an undefined method is called 3813s - raises a NoMethodError when a protected method is called 3813s - raises a NoMethodError when a private method is called 3813s 3813s BasicObject#method_missing for an instance with #method_missing defined 3813s - is not called when a defined method is called 3813s - is called when an undefined method is called 3813s - is called when an protected method is called 3813s - is called when an private method is called 3813s 3813s BasicObject#method_missing for an instance 3813s - raises a NoMethodError when an undefined method is called 3813s - raises a NoMethodError when a protected method is called 3813s - raises a NoMethodError when a private method is called 3813s - sets the receiver of the raised NoMethodError 3813s 3813s BasicObject#!= 3813s - is a public instance method 3813s - returns true if other is not identical to self 3813s - returns true if other is an Object 3813s - returns false if other is identical to self 3813s - dispatches to #== 3813s 3813s BasicObject#!= when invoked using Kernel#send 3813s - returns true if other is not identical to self 3813s - returns false if other is identical to self 3813s - dispatches to #== 3813s 3813s BasicObject#! 3813s - is a public instance method 3813s - returns false 3813s 3813s BasicObject#singleton_method_added 3813s - is a private method 3813s - is called when a singleton method is defined on an object 3813s - is not called for instance methods 3813s - is called when a singleton method is defined on a module 3813s - is called when a method is defined in the singleton class 3813s - is called when a method is defined with alias_method in the singleton class 3813s - is called when a method is defined with syntax alias in the singleton class 3813s - is called when define_method is used in the singleton class 3813s 3813s BasicObject#singleton_method_added when singleton_method_added is undefined 3813s - raises NoMethodError for a metaclass 3813s - raises NoMethodError for a singleton instance 3813s - calls #method_missing 3813s 3813s BasicObject#singleton_method_removed 3813s - is a private method 3813s - is called when a method is removed on self 3813s 3813s BasicObject#singleton_method_undefined 3813s - is a private method 3813s - is called when a method is removed on self 3813s 3813s Binding#clone 3813s - returns a copy of the Binding object 3813s - is a shallow copy of the Binding object 3813s 3813s Binding#dup 3813s - returns a copy of the Binding object 3813s - is a shallow copy of the Binding object 3813s 3813s Binding#eval 3813s - behaves like Kernel.eval(..., self) 3813s - does not leak variables to cloned bindings 3813s - starts with line 1 if single argument is given 3813s - preserves __LINE__ across multiple calls to eval 3813s - increments __LINE__ on each line of a multiline eval 3813s - starts with line 1 if the Binding is created with #send 3813s - starts with a __LINE__ of 1 if a filename is passed 3813s - starts with a __LINE__ from the third argument if passed 3813s - uses (eval) as __FILE__ if single argument given 3813s - uses 1 as __LINE__ 3813s - uses the __FILE__ that is passed in 3813s - with __method__ returns the method where the Binding was created 3813s - with __method__ returns the method where the Binding was created, ignoring #send 3813s - reflects refinements activated in the binding scope 3813s 3813s Binding#eval with a file given 3813s - does not store the filename permanently 3813s 3813s Binding#irb 3818s - creates an IRB session with the binding in scope 3818s 3818s Binding#local_variable_defined? 3818s - returns false when a variable is not defined 3818s - returns true when a regular local variable is defined 3818s - returns true when a local variable is defined using eval() 3818s - returns true when a local variable is defined using Binding#local_variable_set 3818s - returns true when a local variable is defined in a parent scope 3818s - allows usage of a String as the variable name 3818s - allows usage of an object responding to #to_str as the variable name 3818s 3818s Binding#local_variable_get 3818s - reads local variables captured in the binding 3818s - raises a NameError for missing variables 3818s - reads variables added later to the binding 3818s - gets a local variable defined in a parent scope 3818s - gets a local variable defined using eval() 3818s - raises a NameError on global access 3818s - raises a NameError on special variable access 3818s 3818s Binding#local_variable_set 3818s - adds nonexistent variables to the binding's eval scope 3818s - sets a new local variable 3818s - sets a local variable using a String as the variable name 3818s - sets a local variable using an object responding to #to_str as the variable name 3818s - scopes new local variables to the receiving Binding 3818s - overwrites an existing local variable defined before a Binding 3818s - overwrites a local variable defined using eval() 3818s - raises a NameError on global access 3818s - raises a NameError on special variable access 3818s 3818s Binding#local_variables 3818s - returns an Array 3818s - includes local variables in the current scope 3818s - includes local variables defined after calling binding.local_variables 3818s - includes local variables of inherited scopes and eval'ed context 3818s - includes shadowed local variables only once 3818s - includes new variables defined in the binding 3818s 3818s Binding#receiver 3818s - returns the object to which binding is bound 3818s 3818s Binding#source_location 3818s - returns an [file, line] pair 3818s - works for eval with a given line 3818s 3818s RUBY_VERSION 3818s - is a String 3818s 3818s RUBY_PATCHLEVEL 3818s - is an Integer 3818s 3818s RUBY_COPYRIGHT 3818s - is a String 3818s 3818s RUBY_DESCRIPTION 3818s - is a String 3818s 3818s RUBY_ENGINE 3818s - is a String 3818s 3818s RUBY_PLATFORM 3818s - is a String 3818s 3818s RUBY_RELEASE_DATE 3818s - is a String 3818s 3818s RUBY_REVISION 3818s - is a String 3818s 3818s Class#allocate 3818s - returns an instance of self 3818s - returns a fully-formed instance of Module 3818s - throws an exception when calling a method on a new instance 3818s - does not call initialize on the new instance 3818s - raises TypeError for #superclass 3818s 3818s Class#dup 3818s - duplicates both the class and the singleton class 3818s - retains an included module in the ancestor chain for the singleton class 3818s - retains the correct ancestor chain for the singleton class 3818s - sets the name from the class to nil if not assigned to a constant 3818s - stores the new name if assigned to a constant 3818s - raises TypeError if called on BasicObject 3818s 3818s Class.inherited 3818s - is invoked with the child Class when self is subclassed 3818s - is invoked only once per subclass 3818s - is called when marked as a private class method 3818s - is called when marked as a protected class method 3818s - is called when marked as a public class method 3818s - is called by super from a method provided by an included module 3818s - is called by super even when marked as a private class method 3818s - will be invoked by child class regardless of visibility 3818s 3818s Class#initialize 3818s - is private 3818s - raises a TypeError when called on already initialized classes 3818s - raises a TypeError when called on BasicObject 3818s 3818s Class#initialize when given the Class 3818s - raises a TypeError 3818s 3818s Class.new with a block given 3818s - yields the new class as self in the block 3818s - uses the given block as the class' body 3818s - creates a subclass of the given superclass 3818s - runs the inherited hook after yielding the block 3818s 3818s Class.new 3818s - creates a new anonymous class 3818s - raises a TypeError if passed a metaclass 3818s - creates a class without a name 3818s - creates a class that can be given a name by assigning it to a constant 3818s - sets the new class' superclass to the given class 3818s - sets the new class' superclass to Object when no class given 3818s - raises a TypeError when given a non-Class 3818s 3818s Class#new 3818s - returns a new instance of self 3818s - invokes #initialize on the new instance with the given args 3818s - uses the internal allocator and does not call #allocate 3818s - passes the block to #initialize 3818s 3818s Class#subclasses 3818s - returns a list of classes directly inheriting from self 3818s - does not return included modules 3818s - does not return singleton classes 3818s - has 1 entry per module or class 3818s - works when creating subclasses concurrently 3818s 3818s Class#superclass 3818s - returns the superclass of self 3818s 3818s Class#superclass for a singleton class 3818s - of an object returns the class of the object 3818s - of a class returns the singleton class of its superclass 3818s 3818s Comparable#between? 3818s - returns true if self is greater than or equal to the first and less than or equal to the second argument 3818s 3818s Comparable#clamp 3818s - raises an Argument error unless the 2 parameters are correctly ordered 3818s - returns self if within the given parameters 3818s - returns the min parameter if smaller than it 3818s - returns the max parameter if greater than it 3818s - returns self if within the given range parameters 3818s - returns the minimum value of the range parameters if smaller than it 3818s - returns the maximum value of the range parameters if greater than it 3818s - raises an Argument error if the range parameter is exclusive 3818s 3818s Comparable#== 3818s - returns true if other is the same as self 3818s - calls #<=> on self with other and returns true if #<=> returns 0 3818s - calls #<=> on self with other and returns true if #<=> returns 0.0 3818s - returns false if calling #<=> on self returns a positive Integer 3818s - returns false if calling #<=> on self returns a negative Integer 3818s 3818s Comparable#== when #<=> returns nil 3818s - returns false 3818s 3818s Comparable#== when #<=> returns nor nil neither an Integer 3818s - raises an ArgumentError 3818s 3818s Comparable#== when #<=> raises an exception 3818s - lets it go through if it is not a StandardError 3818s 3818s Comparable#== when #<=> raises an exception if it is a StandardError 3818s - lets it go through 3818s 3818s Comparable#== when #<=> raises an exception if it is a subclass of StandardError 3818s - lets it go through 3818s 3818s Comparable#== when #<=> is not defined 3818s - returns true for identical objects 3818s - returns false and does not recurse infinitely 3818s 3818s Comparable#== when #<=> calls super 3818s - returns true for identical objects 3818s - calls the defined #<=> only once for different objects 3818s 3818s Comparable#> 3818s - calls #<=> on self with other and returns true if #<=> returns any Integer greater than 0 3818s - returns false if calling #<=> on self returns 0 or any Integer less than 0 3818s - raises an ArgumentError if calling #<=> on self returns nil 3818s 3818s Comparable#>= 3818s - calls #<=> on self with other and returns true if #<=> returns 0 or any Integer greater than 0 3818s - returns false if calling #<=> on self returns any Integer less than 0 3818s - raises an ArgumentError if calling #<=> on self returns nil 3818s 3818s Comparable#< 3818s - calls #<=> on self with other and returns true if #<=> returns any Integer less than 0 3818s - returns false if calling #<=> on self returns 0 or any Integer greater than 0 3818s - raises an ArgumentError if calling #<=> on self returns nil 3818s - raises an argument error with a message containing the value 3818s 3818s Comparable#<= 3818s - calls #<=> on self with other and returns true if #<=> returns 0 or any Integer less than 0 3818s - returns false if calling #<=> on self returns any Integer greater than 0 3818s - raises an ArgumentError if calling #<=> on self returns nil 3818s 3818s Complex#abs2 3818s - returns the sum of the squares of the real and imaginary parts 3818s 3818s Complex#abs 3818s - returns the modulus: |a + bi| = sqrt((a ^ 2) + (b ^ 2)) 3818s 3818s Complex#angle 3818s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 3818s 3818s Complex#arg 3818s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 3818s 3818s Complex#coerce 3818s - returns an array containing other and self as Complex when other is an Integer 3818s - returns an array containing other and self as Complex when other is a Float 3818s - returns an array containing other and self as Complex when other is a Bignum 3818s - returns an array containing other and self as Complex when other is a Rational 3818s - returns an array containing other and self when other is a Complex 3818s - returns an array containing other as Complex and self when other is a Numeric which responds to #real? with true 3818s - raises TypeError when other is a Numeric which responds to #real? with false 3818s - raises a TypeError when other is a String 3818s - raises a TypeError when other is nil 3818s - raises a TypeError when other is false 3818s 3818s Complex#<=> 3818s - returns nil if either self or argument has imaginary part 3818s - returns nil if argument is not numeric 3818s - returns 0, 1, or -1 if self and argument do not have imaginary part 3818s 3818s Complex#conj 3818s - returns the complex conjugate: conj a + bi = a - bi 3818s 3818s Complex#conjugate 3818s - returns the complex conjugate: conj a + bi = a - bi 3818s 3818s Complex::I 3818s - is Complex(0, 1) 3818s 3818s Complex#denominator 3818s - returns the least common multiple denominator of the real and imaginary parts 3818s 3818s Complex#/ with Complex 3818s - divides according to the usual rule for complex numbers 3818s 3818s Complex#/ with Fixnum 3818s - divides both parts of the Complex number 3818s - raises a ZeroDivisionError when given zero 3818s - produces Rational parts 3818s 3818s Complex#/ with Bignum 3818s - divides both parts of the Complex number 3818s 3818s Complex#/ with Float 3818s - divides both parts of the Complex number 3818s - returns Complex(Infinity, Infinity) when given zero 3818s 3818s Complex#/ with Object 3818s - tries to coerce self into other 3818s 3818s Complex#/ with a Numeric which responds to #real? with true 3818s - returns Complex(real.quo(other), imag.quo(other)) 3818s 3818s Complex#/ with a Numeric which responds to #real? with false 3818s - coerces the passed argument to Complex and divides the resulting elements 3818s 3818s Complex#eql? 3818s - returns false if other is not Complex 3818s - returns true when the respective parts are of the same classes and self == other 3818s - returns false when the real parts are of different classes 3818s - returns false when the imaginary parts are of different classes 3818s - returns false when self == other is false 3818s - does NOT send #eql? to real or imaginary parts 3818s 3818s Complex#== with Complex 3818s - returns true when self and other have numerical equality 3818s 3818s Complex#== with Numeric 3818s - returns true when self's imaginary part is 0 and the real part and other have numerical equality 3818s 3818s Complex#== with Object 3818s - calls other#== with self 3818s 3818s Complex#== with a Numeric which responds to #real? with true 3818s - returns real == other when the imaginary part is zero 3818s - returns false when when the imaginary part is not zero 3818s 3818s Complex#== with a Numeric which responds to #real? with false 3818s - returns other == self 3818s 3818s Complex#** with Integer 0 3818s - returns Complex(1) 3818s 3818s Complex#** with Float 0.0 3818s - returns Complex(1.0, 0.0) 3818s 3818s Complex#** with Complex 3818s - returns self raised to the given power 3818s 3818s Complex#** with Integer 3818s - returns self raised to the given power 3818s 3818s Complex#** with Rational 3818s - returns self raised to the given power 3818s 3818s Complex#** with Object 3818s - tries to coerce self into other 3818s 3818s Complex#fdiv 3818s - accepts a numeric argument 3818s - accepts a negative numeric argument 3818s - raises a TypeError if passed a non-numeric argument 3818s - sets the real part to NaN if self's real part is NaN 3818s - sets the imaginary part to NaN if self's imaginary part is NaN 3818s - sets the real and imaginary part to NaN if self's real and imaginary parts are NaN 3818s - sets the real and imaginary part to NaN if self's real part and the argument are both NaN 3818s - sets the real and imaginary part to NaN if self's real part, self's imaginary part, and the argument are NaN 3818s - sets the real part to Infinity if self's real part is Infinity 3818s - sets the imaginary part to Infinity if self's imaginary part is Infinity 3818s - sets the imaginary and real part to Infinity if self's imaginary and real parts are Infinity 3818s - 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 3818s 3818s Complex#fdiv with no imaginary part 3818s - returns a Complex number 3818s - sets the real part to self's real part fdiv'd with the argument 3818s - sets the imaginary part to 0.0 3818s 3818s Complex#fdiv with an imaginary part 3818s - returns a Complex number 3818s - sets the real part to self's real part fdiv'd with the argument 3818s - sets the imaginary part to the imaginary part fdiv'd with the argument 3818s 3818s Complex#finite? 3818s - returns true if magnitude is finite 3818s - returns false for positive infinity 3818s - returns false for positive complex with infinite imaginary 3818s - returns false for negative infinity 3818s - returns false for negative complex with infinite imaginary 3818s - returns false for NaN 3818s 3818s Complex#hash 3818s - is static 3818s - is different for different instances 3818s 3818s Complex#imag 3818s - returns the imaginary part of self 3818s 3818s Complex#imaginary 3818s - returns the imaginary part of self 3818s 3818s Complex#infinite? 3818s - returns nil if magnitude is finite 3818s - returns 1 for positive infinity 3818s - returns 1 for positive complex with infinite imaginary 3818s - returns -1 for negative infinity 3818s - returns -1 for negative complex with infinite imaginary 3818s - returns nil for NaN 3818s 3818s Complex#inspect 3818s - returns (${real}+${image}i) for positive imaginary parts 3818s - returns (${real}-${image}i) for negative imaginary parts 3818s - calls #inspect on real and imaginary 3818s - adds an `*' before the `i' if the last character of the imaginary part is not numeric 3818s 3818s Complex#integer? 3818s - returns false for a Complex with no imaginary part 3818s - returns false for a Complex with an imaginary part 3818s 3818s Complex#magnitude 3818s - returns the modulus: |a + bi| = sqrt((a ^ 2) + (b ^ 2)) 3818s 3818s Complex#marshal_dump 3818s - is a private method 3818s - dumps real and imaginary parts 3818s 3818s Complex#- with Complex 3818s - subtracts both the real and imaginary components 3818s 3818s Complex#- with Integer 3818s - subtracts the real number from the real component of self 3818s 3818s Complex#- with Object 3818s - tries to coerce self into other 3818s 3818s Complex#- passed Numeric which responds to #real? with true 3818s - coerces the passed argument to the type of the real part and subtracts the resulting elements 3818s 3818s Complex#- passed Numeric which responds to #real? with false 3818s - coerces the passed argument to Complex and subtracts the resulting elements 3818s 3818s Complex#* with Complex 3818s - multiplies according to the usual rule for complex numbers: (a + bi) * (c + di) = ac - bd + (ad + bc)i 3818s 3818s Complex#* with Integer 3818s - multiplies both parts of self by the given Integer 3818s 3818s Complex#* with Object 3818s - tries to coerce self into other 3818s 3818s Complex#* with a Numeric which responds to #real? with true 3818s - multiples both parts of self by other 3818s 3818s Complex#* with a Numeric which responds to #real? with true with a Numeric which responds to #real? with false 3818s - coerces the passed argument to Complex and multiplies the resulting elements 3818s 3818s Complex#negative? 3818s - is undefined 3818s 3818s Complex#numerator 3818s - returns self's numerator 3818s 3818s Complex#phase 3818s - returns the argument -- i.e., the angle from (1, 0) in the complex plane 3818s 3818s Complex#+ with Complex 3818s - adds both the real and imaginary components 3818s 3818s Complex#+ with Integer 3818s - adds the real number to the real component of self 3818s 3818s Complex#+ with Object 3818s - tries to coerce self into other 3818s 3818s Complex#+ passed Numeric which responds to #real? with true 3818s - coerces the passed argument to the type of the real part and adds the resulting elements 3818s 3818s Complex#+ passed Numeric which responds to #real? with false 3818s - coerces the passed argument to Complex and adds the resulting elements 3818s 3818s Complex.polar 3818s - returns a complex number in terms of radius and angle 3818s - raises a TypeError when given non real arguments 3818s - computes the real values of the real & imaginary parts from the polar form 3818s 3818s Complex#polar 3818s - returns the absolute value and the argument 3818s 3818s Complex#positive? 3818s - is undefined 3818s 3818s Complex#quo with Complex 3818s - divides according to the usual rule for complex numbers 3818s 3818s Complex#quo with Fixnum 3818s - divides both parts of the Complex number 3818s - raises a ZeroDivisionError when given zero 3818s - produces Rational parts 3818s 3818s Complex#quo with Bignum 3818s - divides both parts of the Complex number 3818s 3818s Complex#quo with Float 3818s - divides both parts of the Complex number 3818s - returns Complex(Infinity, Infinity) when given zero 3818s 3818s Complex#quo with Object 3818s - tries to coerce self into other 3818s 3818s Complex#quo with a Numeric which responds to #real? with true 3818s - returns Complex(real.quo(other), imag.quo(other)) 3818s 3818s Complex#quo with a Numeric which responds to #real? with false 3818s - coerces the passed argument to Complex and divides the resulting elements 3818s 3818s Complex#rationalize 3818s - raises RangeError if self has non-zero imaginary part 3818s - raises RangeError if self has 0.0 imaginary part 3818s - returns a Rational if self has zero imaginary part 3818s - sends #rationalize to the real part 3818s - ignores a single argument 3818s - raises ArgumentError when passed more than one argument 3818s 3818s Complex#real 3818s - returns the real part of self 3818s 3818s Complex#real? 3818s - returns false if there is an imaginary part 3818s - returns false if there is not an imaginary part 3818s - returns false if the real part is Infinity 3818s - returns false if the real part is NaN 3818s 3818s Complex#rect 3818s - returns an Array 3818s - returns a two-element Array 3818s - returns the real part of self as the first element 3818s - returns the imaginary part of self as the last element 3818s - raises an ArgumentError if given any arguments 3818s 3818s Complex.rect passed a Numeric n which responds to #real? with true 3818s - returns a Complex with real part n and imaginary part 0 3818s 3818s Complex.rect passed a Numeric which responds to #real? with false 3818s - raises TypeError 3818s 3818s Complex.rect passed Numerics n1 and n2 and at least one responds to #real? with false 3818s - raises TypeError 3818s - raises TypeError 3818s - raises TypeError 3818s 3818s Complex.rect passed Numerics n1 and n2 and both respond to #real? with true 3818s - returns a Complex with real part n1 and imaginary part n2 3818s 3818s Complex.rect passed a non-Numeric 3818s - raises TypeError 3818s 3818s Complex#rectangular 3818s - returns an Array 3818s - returns a two-element Array 3818s - returns the real part of self as the first element 3818s - returns the imaginary part of self as the last element 3818s - raises an ArgumentError if given any arguments 3818s 3818s Complex.rectangular passed a Numeric n which responds to #real? with true 3818s - returns a Complex with real part n and imaginary part 0 3818s 3818s Complex.rectangular passed a Numeric which responds to #real? with false 3818s - raises TypeError 3818s 3818s Complex.rectangular passed Numerics n1 and n2 and at least one responds to #real? with false 3818s - raises TypeError 3818s - raises TypeError 3818s - raises TypeError 3818s 3818s Complex.rectangular passed Numerics n1 and n2 and both respond to #real? with true 3818s - returns a Complex with real part n1 and imaginary part n2 3818s 3818s Complex.rectangular passed a non-Numeric 3818s - raises TypeError 3818s 3818s Complex#to_c 3818s - returns self 3818s - returns the same value 3818s 3818s Complex#to_f when the imaginary part is Integer 0 3818s - returns the result of sending #to_f to the real part 3818s 3818s Complex#to_f when the imaginary part is Rational 0 3818s - returns the result of sending #to_f to the real part 3818s 3818s Complex#to_f when the imaginary part responds to #== 0 with true 3818s - returns the result of sending #to_f to the real part 3818s 3818s Complex#to_f when the imaginary part is non-zero 3818s - raises RangeError 3818s 3818s Complex#to_f when the imaginary part is Float 0.0 3818s - raises RangeError 3818s 3818s Complex#to_i when the imaginary part is Integer 0 3818s - returns the result of sending #to_i to the real part 3818s 3818s Complex#to_i when the imaginary part is Rational 0 3818s - returns the result of sending #to_i to the real part 3818s 3818s Complex#to_i when the imaginary part responds to #== 0 with true 3818s - returns the result of sending #to_i to the real part 3818s 3818s Complex#to_i when the imaginary part is non-zero 3818s - raises RangeError 3818s 3818s Complex#to_i when the imaginary part is Float 0.0 3818s - raises RangeError 3818s 3818s Complex#to_r when the imaginary part is Integer 0 3818s - returns the result of sending #to_r to the real part 3818s 3818s Complex#to_r when the imaginary part is Rational 0 3818s - returns the result of sending #to_r to the real part 3818s 3818s Complex#to_r when the imaginary part responds to #== 0 with true 3818s - returns the result of sending #to_r to the real part 3818s 3818s Complex#to_r when the imaginary part is non-zero 3818s - raises RangeError 3818s 3818s Complex#to_r when the imaginary part is Float 0.0 3818s - raises RangeError 3818s 3818s Complex#to_s 3818s - returns self as String 3818s - returns 1+0.0i for Complex(1, 0.0) 3818s - returns 1-0.0i for Complex(1, -0.0) 3818s - returns 1+Infinity*i for Complex(1, Infinity) 3818s - returns 1-Infinity*i for Complex(1, -Infinity) 3818s - returns 1+NaN*i for Complex(1, NaN) 3818s - treats real and imaginary parts as strings 3818s 3818s Complex#to_s when self's real component is 0 3818s - returns both the real and imaginary component even when the real is 0 3818s 3818s Complex#-@ 3818s - sends #-@ to the real and imaginary parts and returns a Complex with the resulting respective parts 3818s 3818s ConditionVariable#broadcast 3818s - releases all threads waiting in line for this resource 3818s 3818s ConditionVariable#marshal_dump 3818s - raises a TypeError 3818s 3818s ConditionVariable#signal 3818s - releases the first thread waiting in line for this resource 3818s - allows control to be passed between a pair of threads 3818s 3818s ConditionVariable#wait 3818s - calls #sleep on the given object 3818s - can be woken up by ConditionVariable#signal 3818s - can be interrupted by Thread#run 3819s - can be interrupted by Thread#wakeup 3819s - reacquires the lock even if the thread is killed 3819s - reacquires the lock even if the thread is killed after being signaled 3819s - supports multiple Threads waiting on the same ConditionVariable and Mutex 3819s 3819s Data 3819s - does not exist anymore 3819s 3819s Dir.chdir 3819s - defaults to $HOME with no arguments 3819s - changes to the specified directory 3819s - returns 0 when successfully changing directory 3819s - calls #to_str on the argument if it's not a String 3819s - calls #to_str on the argument if it's not a String and a block is given 3819s - calls #to_path on the argument if it's not a String 3819s - prefers #to_path over #to_str 3819s - returns the value of the block when a block is given 3819s - defaults to the home directory when given a block but no argument 3819s - changes to the specified directory for the duration of the block 3819s - raises an Errno::ENOENT if the directory does not exist 3819s - raises an Errno::ENOENT if the original directory no longer exists 3819s - always returns to the original directory when given a block 3819s 3819s Dir.children 3819s - returns an Array of filenames in an existing directory including dotfiles 3819s - calls #to_path on non-String arguments 3819s - accepts an options Hash 3819s - returns children encoded with the filesystem encoding by default 3819s - returns children encoded with the specified encoding 3819s - returns children transcoded to the default internal encoding 3819s - raises a SystemCallError if called with a nonexistent directory 3819s 3819s Dir#children 3819s - returns an Array of filenames in an existing directory including dotfiles 3819s - accepts an encoding keyword for the encoding of the entries 3819s - returns children encoded with the filesystem encoding by default 3819s - returns children encoded with the specified encoding 3819s - returns children transcoded to the default internal encoding 3819s 3819s Dir#close 3819s - does not raise an IOError even if the Dir instance is closed 3819s 3819s Dir.delete 3819s - removes empty directories 3819s - calls #to_path on non-String arguments 3819s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 3819s - raises an Errno::ENOENT when trying to remove a non-existing directory 3819s - raises an Errno::ENOTDIR when trying to remove a non-directory 3819s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 3819s 3819s Dir 3819s - includes Enumerable 3819s 3819s Dir.each_child 3819s - accepts an encoding keyword for the encoding of the entries 3819s - yields all names in an existing directory to the provided block 3819s - returns nil when successful 3819s - calls #to_path on non-String arguments 3819s - raises a SystemCallError if passed a nonexistent directory 3819s 3819s Dir.each_child when no block is given 3819s - returns an Enumerator 3819s 3819s Dir.each_child when no block is given returned Enumerator size 3819s - should return nil 3819s 3819s Dir#each_child 3819s - yields all names in an existing directory to the provided block 3819s - returns self when successful 3819s 3819s Dir#each_child when no block is given 3819s - returns an Enumerator 3819s 3819s Dir#each_child when no block is given returned Enumerator size 3819s - should return nil 3819s 3819s Dir#each 3819s - yields each directory entry in succession 3819s - returns the directory which remains open 3819s 3819s Dir#each when no block is given 3819s - returns an Enumerator 3819s 3819s Dir#each when no block is given returned Enumerator size 3819s - should return nil 3819s 3819s Dir#each 3819s - raises an IOError when called on a closed Dir instance 3819s 3819s Dir.[] 3819s - raises an Encoding::CompatibilityError if the argument encoding is not compatible with US-ASCII 3819s - calls #to_path to convert a pattern 3819s - raises an ArgumentError if the string contains \0 3819s - result is sorted by default 3819s - result is sorted with sort: true 3819s - sort: false returns same files 3819s - raises an ArgumentError if sort: is not true or false 3819s - matches non-dotfiles with '*' 3819s - returns empty array when empty pattern provided 3819s - matches regexp special + 3819s - matches directories with special characters when escaped 3819s - matches regexp special * 3819s - matches regexp special ? 3819s - matches regexp special | 3819s - matches files with backslashes in their name 3819s - matches regexp special ^ 3819s - matches regexp special $ 3819s - matches regexp special ( 3819s - matches regexp special ) 3819s - matches regexp special [ 3819s - matches regexp special ] 3819s - matches regexp special { 3819s - matches regexp special } 3819s - matches paths with glob patterns 3819s - matches dotfiles except .. with '.*' 3819s - matches non-dotfiles with '*' 3819s - matches dotfiles with '.*' 3819s - matches files with any ending with '*' 3819s - matches files with any middle with '*' 3819s - handles directories with globs 3819s - matches files with multiple '*' special characters 3819s - matches non-dotfiles in the current directory with '**' 3819s - matches dotfiles in the current directory except .. with '.**' 3819s - recursively matches any nondot subdirectories with '**/' 3819s - recursively matches any subdirectories except './' or '../' with '**/' from the base directory if that is specified 3819s - recursively matches any subdirectories including ./ with '.**/' 3819s - matches a single character except leading '.' with '?' 3819s - accepts multiple '?' characters in a pattern 3819s - matches any characters in a set with '[]' 3819s - matches any characters in a range with '[-]' 3819s - matches any characters except those in a set with '[^]' 3819s - matches any characters except those in a range with '[^-,,...}' 3819s - matches a set '{,,...}' which also uses a glob 3819s - accepts string sets with empty strings with {,,} 3819s - matches dot or non-dotfiles with '{,.}*' 3819s - respects the order of {} expressions, expanding left most first 3819s - respects the optional nested {} expressions 3819s - matches special characters by escaping with a backslash with '\' 3819s - recursively matches directories with '**/' 3819s - ignores matching through directories that doesn't exist 3819s - ignores matching only directories under an nonexistent path 3819s - matches UTF-8 paths 3819s 3819s Dir.[] :base option passed 3819s - matches entries only from within the specified directory 3819s - accepts both relative and absolute paths 3819s - returns [] if specified path does not exist 3819s - returns [] if specified path is a file 3819s - raises TypeError when cannot convert value to string 3819s - handles '' as current directory path 3819s - handles nil as current directory path 3819s 3819s Dir.[] 3819s - matches multiple recursives 3819s - ignores symlinks 3819s 3819s Dir.[] 3819s - calls #to_path to convert multiple patterns 3819s 3819s Dir.empty? 3819s - returns true for empty directories 3819s - returns false for non-empty directories 3819s - returns false for a non-directory 3819s - raises ENOENT for nonexistent directories 3819s 3819s Dir.entries 3819s - returns an Array of filenames in an existing directory including dotfiles 3819s - calls #to_path on non-String arguments 3819s - accepts an encoding keyword for the encoding of the entries 3819s - returns entries encoded with the filesystem encoding by default 3819s - returns entries encoded with the specified encoding 3819s - returns entries transcoded to the default internal encoding 3819s - raises a SystemCallError if called with a nonexistent directory 3819s 3819s Dir.exist? 3819s - returns true if the given directory exists 3819s - returns true for '.' 3819s - returns true for '..' 3819s - understands non-ASCII paths 3819s - understands relative paths 3819s - returns false if the given directory doesn't exist 3819s - doesn't require the name to have a trailing slash 3819s - doesn't expand paths 3819s - returns false if the argument exists but is a file 3819s - doesn't set $! when file doesn't exist 3819s - calls #to_path on non String arguments 3819s 3819s Dir#fileno 3819s - raises an error when not implemented on the platform 3819s 3819s Dir.foreach 3819s - yields all names in an existing directory to the provided block 3819s - returns nil when successful 3819s - calls #to_path on non-String arguments 3819s - raises a SystemCallError if passed a nonexistent directory 3819s - returns an Enumerator if no block given 3819s - accepts an encoding keyword for the encoding of the entries 3819s 3819s Dir.foreach when no block is given 3819s - returns an Enumerator 3819s 3819s Dir.foreach when no block is given returned Enumerator size 3819s - should return nil 3819s 3819s Dir.getwd 3819s - returns the current working directory 3819s - returns an absolute path 3819s - returns an absolute path even when chdir to a relative path 3819s - returns a String with the filesystem encoding 3819s 3819s Dir.glob 3819s - raises an Encoding::CompatibilityError if the argument encoding is not compatible with US-ASCII 3819s - calls #to_path to convert a pattern 3819s - raises an ArgumentError if the string contains \0 3819s - result is sorted by default 3819s - result is sorted with sort: true 3819s - sort: false returns same files 3819s - raises an ArgumentError if sort: is not true or false 3819s - matches non-dotfiles with '*' 3819s - returns empty array when empty pattern provided 3819s - matches regexp special + 3819s - matches directories with special characters when escaped 3819s - matches regexp special * 3819s - matches regexp special ? 3819s - matches regexp special | 3819s - matches files with backslashes in their name 3819s - matches regexp special ^ 3819s - matches regexp special $ 3819s - matches regexp special ( 3819s - matches regexp special ) 3819s - matches regexp special [ 3819s - matches regexp special ] 3819s - matches regexp special { 3819s - matches regexp special } 3819s - matches paths with glob patterns 3819s - matches dotfiles except .. with '.*' 3819s - matches non-dotfiles with '*' 3819s - matches dotfiles with '.*' 3819s - matches files with any ending with '*' 3819s - matches files with any middle with '*' 3819s - handles directories with globs 3819s - matches files with multiple '*' special characters 3819s - matches non-dotfiles in the current directory with '**' 3819s - matches dotfiles in the current directory except .. with '.**' 3819s - recursively matches any nondot subdirectories with '**/' 3819s - recursively matches any subdirectories except './' or '../' with '**/' from the base directory if that is specified 3819s - recursively matches any subdirectories including ./ with '.**/' 3819s - matches a single character except leading '.' with '?' 3819s - accepts multiple '?' characters in a pattern 3819s - matches any characters in a set with '[]' 3819s - matches any characters in a range with '[-]' 3819s - matches any characters except those in a set with '[^]' 3819s - matches any characters except those in a range with '[^-,,...}' 3819s - matches a set '{,,...}' which also uses a glob 3819s - accepts string sets with empty strings with {,,} 3819s - matches dot or non-dotfiles with '{,.}*' 3819s - respects the order of {} expressions, expanding left most first 3819s - respects the optional nested {} expressions 3819s - matches special characters by escaping with a backslash with '\' 3819s - recursively matches directories with '**/' 3819s - ignores matching through directories that doesn't exist 3819s - ignores matching only directories under an nonexistent path 3819s - matches UTF-8 paths 3819s 3819s Dir.glob :base option passed 3819s - matches entries only from within the specified directory 3819s - accepts both relative and absolute paths 3819s - returns [] if specified path does not exist 3819s - returns [] if specified path is a file 3819s - raises TypeError when cannot convert value to string 3819s - handles '' as current directory path 3819s - handles nil as current directory path 3819s 3819s Dir.glob 3819s - matches multiple recursives 3819s - ignores symlinks 3819s 3819s Dir.glob 3819s - can take an array of patterns 3819s - returns matching file paths when supplied :base keyword argument 3820s - calls #to_path to convert multiple patterns 3820s - matches both dot and non-dotfiles with '*' and option File::FNM_DOTMATCH 3820s - matches files with any beginning with '*' and option File::FNM_DOTMATCH 3820s - matches any files in the current directory with '**' and option File::FNM_DOTMATCH 3820s - recursively matches any subdirectories except './' or '../' with '**/' from the current directory and option File::FNM_DOTMATCH 3820s - recursively matches files and directories in nested dot subdirectory except . with 'nested/**/*' from the current directory and option File::FNM_DOTMATCH 3820s - recursively matches any subdirectories except './' or '../' with '**/' and option File::FNM_DOTMATCH 3820s - matches a list of paths by concatenating their individual results 3820s - preserves multiple /s before a ** 3820s - accepts a block and yields it with each elements 3820s - ignores non-dirs when traversing recursively 3820s - matches nothing when given an empty list of paths 3820s - handles infinite directory wildcards 3820s - handles **/** with base keyword argument 3820s - handles **/nondotfile with base keyword argument 3820s - handles **/nondotfile with base keyword argument and FNM_DOTMATCH 3820s - handles **/.dotfile with base keyword argument 3820s - handles **/.dotfile with base keyword argument and FNM_DOTMATCH 3820s - handles **/.* with base keyword argument and FNM_DOTMATCH 3820s - handles **/** with base keyword argument and FNM_DOTMATCH 3820s - handles **/*pattern* with base keyword argument and FNM_DOTMATCH 3820s - handles **/glob with base keyword argument and FNM_EXTGLOB 3820s - handles simple filename patterns 3820s - handles simple directory patterns 3820s - handles simple directory patterns applied to non-directories 3820s - matches the literal character '\' with option File::FNM_NOESCAPE 3820s - returns nil for directories current user has no permission to read 3820s - will not follow symlinks when recursively traversing directories 3820s 3820s Dir.home 3820s - raises an ArgumentError if the named user doesn't exist 3820s 3820s Dir.home when called without arguments 3820s - returns the current user's home directory, reading $HOME first 3820s - returns a non-frozen string 3820s - returns a string with the filesystem encoding 3820s - works even if HOME is unset 3820s 3820s Dir.home when called with the current user name 3820s - returns the named user's home directory, from the user database 3820s - returns a non-frozen string 3820s - returns a string with the filesystem encoding 3820s 3820s Dir.home when called with a nil user name 3820s - returns the current user's home directory, reading $HOME first 3820s 3820s Dir#initialize 3820s - calls #to_path on non-String arguments 3820s 3820s Dir#inspect 3820s - returns a String 3820s - includes the class name 3820s - includes the directory name 3820s 3820s Dir.mkdir 3820s - creates the named directory with the given permissions 3820s - calls #to_path on non-String path arguments 3820s - calls #to_int on non-Integer permissions argument 3820s - raises TypeError if non-Integer permissions argument does not have #to_int method 3820s - raises a SystemCallError if any of the directories in the path before the last does not exist 3820s - raises Errno::EEXIST if the specified directory already exists 3820s - raises Errno::EEXIST if the argument points to the existing file 3820s 3820s Dir.mkdir 3820s - raises a SystemCallError when lacking adequate permissions in the parent dir 3820s 3820s Dir.open 3820s - returns a Dir instance representing the specified directory 3820s - raises a SystemCallError if the directory does not exist 3820s - may take a block which is yielded to with the Dir instance 3820s - returns the value of the block if a block is given 3820s - closes the Dir instance when the block exits if given a block 3820s - closes the Dir instance when the block exits the block even due to an exception 3820s - calls #to_path on non-String arguments 3820s - accepts an options Hash 3820s - calls #to_hash to convert the options object 3820s - ignores the :encoding option if it is nil 3820s 3820s Dir#path 3820s - returns the path that was supplied to .new or .open 3820s - returns the path even when called on a closed Dir instance 3820s - returns a String with the same encoding as the argument to .open 3820s 3820s Dir#pos 3820s - returns an Integer representing the current position in the directory 3820s - returns a different Integer if moved from previous position 3820s 3820s Dir#pos 3820s - raises an IOError when called on a closed Dir instance 3820s 3820s Dir#pos= 3820s - moves the read position to a previously obtained position 3820s 3820s Dir.pwd 3820s - returns the current working directory 3820s - returns an absolute path 3820s - returns an absolute path even when chdir to a relative path 3820s - returns a String with the filesystem encoding 3820s 3820s Dir#read 3820s - returns the file name in the current seek position 3820s - returns nil when there are no more entries 3820s - returns each entry successively 3820s - returns all directory entries even when encoding conversion will fail 3820s - raises an IOError when called on a closed Dir instance 3820s 3820s Dir#rewind 3820s - resets the next read to start from the first entry 3820s - returns the Dir instance 3820s - raises an IOError when called on a closed Dir instance 3820s 3820s Dir.rmdir 3820s - removes empty directories 3820s - calls #to_path on non-String arguments 3820s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 3820s - raises an Errno::ENOENT when trying to remove a non-existing directory 3820s - raises an Errno::ENOTDIR when trying to remove a non-directory 3820s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 3820s 3820s Dir#seek 3820s - returns the Dir instance 3820s - moves the read position to a previously obtained position 3821s 3821s Dir#tell 3821s - returns an Integer representing the current position in the directory 3821s - returns a different Integer if moved from previous position 3821s - raises an IOError when called on a closed Dir instance 3821s 3821s Dir#to_path 3821s - returns the path that was supplied to .new or .open 3821s - returns the path even when called on a closed Dir instance 3821s - returns a String with the same encoding as the argument to .open 3821s 3821s Dir.unlink 3821s - removes empty directories 3821s - calls #to_path on non-String arguments 3821s - raises an Errno::ENOTEMPTY when trying to remove a nonempty directory 3821s - raises an Errno::ENOENT when trying to remove a non-existing directory 3821s - raises an Errno::ENOTDIR when trying to remove a non-directory 3821s - raises an Errno::EACCES if lacking adequate permissions to remove the directory 3821s 3821s Encoding#_dump 3821s - needs to be reviewed for spec completeness 3821s 3821s Encoding._load 3821s - needs to be reviewed for spec completeness 3821s 3821s Encoding.aliases 3821s - returns a Hash 3821s - has Strings as keys 3821s - has Strings as values 3821s - has alias names as its keys 3821s - has the names of the aliased encoding as its values 3821s - has an 'external' key with the external default encoding as its value 3821s - has a 'locale' key and its value equals the name of the encoding found by the locale charmap 3821s - only contains valid aliased encodings 3821s 3821s Encoding#ascii_compatible? 3821s - returns true if self represents an ASCII-compatible encoding 3821s - returns false if self does not represent an ASCII-compatible encoding 3821s 3821s Encoding.compatible? String, String when the first's Encoding is valid US-ASCII 3821s - returns US-ASCII when the second's is US-ASCII 3821s - returns US-ASCII if the second String is BINARY and ASCII only 3821s - returns BINARY if the second String is BINARY but not ASCII only 3821s - returns US-ASCII if the second String is UTF-8 and ASCII only 3821s - returns UTF-8 if the second String is UTF-8 but not ASCII only 3821s 3821s Encoding.compatible? String, String when the first's Encoding is ASCII compatible and ASCII only 3821s - returns the first's Encoding if the second is ASCII compatible and ASCII only 3821s - returns the first's Encoding if the second is ASCII compatible and ASCII only 3821s - returns the second's Encoding if the second is ASCII compatible but not ASCII only 3821s - returns nil if the second's Encoding is not ASCII compatible 3821s 3821s Encoding.compatible? String, String when the first's Encoding is ASCII compatible but not ASCII only 3821s - returns the first's Encoding if the second's is valid US-ASCII 3821s - returns the first's Encoding if the second's is UTF-8 and ASCII only 3821s - returns nil if the second encoding is ASCII compatible but neither String's encoding is ASCII only 3821s 3821s Encoding.compatible? String, String when the first's Encoding is not ASCII compatible 3821s - returns nil when the second String is US-ASCII 3821s - returns nil when the second String is BINARY and ASCII only 3821s - returns nil when the second String is BINARY but not ASCII only 3821s - returns the Encoding when the second's Encoding is not ASCII compatible but the same as the first's Encoding 3821s 3821s Encoding.compatible? String, String when the first's Encoding is invalid 3821s - returns the first's Encoding when the second's Encoding is US-ASCII 3821s - returns the first's Encoding when the second String is ASCII only 3821s - returns nil when the second's Encoding is BINARY but not ASCII only 3821s - returns nil when the second's Encoding is invalid and ASCII only 3821s - returns nil when the second's Encoding is invalid and not ASCII only 3821s - returns the Encoding when the second's Encoding is invalid but the same as the first 3821s 3821s Encoding.compatible? String, String when the first String is empty and the second is not and the first's Encoding is ASCII compatible 3821s - returns the first's encoding when the second String is ASCII only 3821s - returns the second's encoding when the second String is not ASCII only 3821s 3821s Encoding.compatible? String, String when the first String is empty and the second is not when the first's Encoding is not ASCII compatible 3821s - returns the second string's encoding 3821s 3821s Encoding.compatible? String, String when the second String is empty 3821s - returns the first Encoding 3821s 3821s Encoding.compatible? String, Regexp 3821s - returns US-ASCII if both are US-ASCII 3821s - returns the String's Encoding if it is not US-ASCII but both are ASCII only 3821s - returns the String's Encoding if the String is not ASCII only 3821s 3821s Encoding.compatible? String, Symbol 3821s - returns US-ASCII if both are ASCII only 3821s - returns the String's Encoding if it is not US-ASCII but both are ASCII only 3821s - returns the String's Encoding if the String is not ASCII only 3821s 3821s Encoding.compatible? String, Encoding 3821s - returns nil if the String's encoding is not ASCII compatible 3821s - returns nil if the Encoding is not ASCII compatible 3821s - returns the String's encoding if the Encoding is US-ASCII 3821s - returns the Encoding if the String's encoding is ASCII compatible and the String is ASCII only 3821s - returns nil if the String's encoding is ASCII compatible but the string is not ASCII only 3821s 3821s Encoding.compatible? Regexp, String 3821s - returns US-ASCII if both are US-ASCII 3821s 3821s Encoding.compatible? Regexp, Regexp 3821s - returns US-ASCII if both are US-ASCII 3821s - returns the first's Encoding if it is not US-ASCII and not ASCII only 3821s 3821s Encoding.compatible? Regexp, Symbol 3821s - returns US-ASCII if both are US-ASCII 3821s - returns the first's Encoding if it is not US-ASCII and not ASCII only 3821s 3821s Encoding.compatible? Symbol, String 3821s - returns US-ASCII if both are ASCII only 3821s 3821s Encoding.compatible? Symbol, Regexp 3821s - returns US-ASCII if both are US-ASCII 3821s - returns the Regexp's Encoding if it is not US-ASCII and not ASCII only 3821s 3821s Encoding.compatible? Symbol, Symbol 3821s - returns US-ASCII if both are US-ASCII 3821s - returns the first's Encoding if it is not ASCII only 3821s 3821s Encoding.compatible? Encoding, Encoding 3821s - returns nil if one of the encodings is a dummy encoding 3821s - returns nil if one of the encodings is not US-ASCII 3821s - returns the first if the second is US-ASCII 3821s - returns the Encoding if both are the same 3821s 3821s Encoding.compatible? Object, Object 3821s - returns nil for Object, String 3821s - returns nil for Object, Regexp 3821s - returns nil for Object, Symbol 3821s - returns nil for String, Object 3821s - returns nil for Regexp, Object 3821s - returns nil for Symbol, Object 3821s 3821s Encoding::Converter.asciicompat_encoding 3821s - accepts an encoding name as a String argument 3821s - coerces non-String/Encoding objects with #to_str 3821s - accepts an Encoding object as an argument 3821s - returns a corresponding ASCII compatible encoding for ASCII-incompatible encodings 3821s - returns nil when the given encoding is ASCII compatible 3821s - handles encoding names who resolve to nil encodings 3821s 3821s Encoding::Converter::INVALID_MASK 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::INVALID_REPLACE 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::UNDEF_MASK 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::UNDEF_REPLACE 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::UNDEF_HEX_CHARREF 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::PARTIAL_INPUT 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::AFTER_OUTPUT 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::UNIVERSAL_NEWLINE_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::CRLF_NEWLINE_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::CR_NEWLINE_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::XML_TEXT_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::XML_ATTR_CONTENT_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter::XML_ATTR_QUOTE_DECORATOR 3821s - exists 3821s - has an Integer value 3821s 3821s Encoding::Converter#convert 3821s - returns a String 3821s - sets the encoding of the result to the target encoding 3821s - transcodes the given String to the target encoding 3821s - allows Strings of different encodings to the source encoding 3821s - reuses the given encoding pair if called multiple times 3821s - raises UndefinedConversionError if the String contains characters invalid for the target encoding 3821s - raises an ArgumentError if called on a finished stream 3821s 3821s Encoding::Converter#convpath 3821s - returns an Array with a single element if there is a direct converter 3821s - returns multiple encoding pairs when direct conversion is impossible 3821s - indicates if crlf_newline conversion would occur 3821s 3821s Encoding::Converter#destination_encoding 3821s - returns the destination encoding as an Encoding object 3821s 3821s Encoding::Converter#finish 3821s - returns a String 3821s - returns an empty String if there is nothing more to convert 3821s - returns the last part of the converted String if it hasn't already 3821s - returns a String in the destination encoding 3821s - returns an empty String if self was not given anything to convert 3821s - returns an empty String on subsequent invocations 3821s 3821s Encoding::Converter#insert_output 3821s - needs to be reviewed for spec completeness 3821s 3821s Encoding::Converter#inspect 3821s - includes the source and destination encodings in the return value 3821s 3821s Encoding::Converter#last_error 3821s - returns nil when the no conversion has been attempted 3821s - returns nil when the last conversion did not produce an error 3821s - returns nil when #primitive_convert last returned :destination_buffer_full 3821s - returns nil when #primitive_convert last returned :finished 3821s - returns nil if the last conversion succeeded but the penultimate failed 3821s - returns an Encoding::InvalidByteSequenceError when #primitive_convert last returned :invalid_byte_sequence 3821s - returns an Encoding::UndefinedConversionError when #primitive_convert last returned :undefined_conversion 3821s - returns an Encoding::InvalidByteSequenceError when #primitive_convert last returned :incomplete_input 3821s - returns an Encoding::InvalidByteSequenceError when the last call to #convert produced one 3821s - returns an Encoding::UndefinedConversionError when the last call to #convert produced one 3821s - returns the last error of #convert with a message showing the transcoding path 3821s 3821s Encoding::Converter.new 3821s - accepts a String for the source encoding 3821s - accepts a String for the destination encoding 3821s - accepts an Encoding object for the source encoding 3821s - accepts an Encoding object for the destination encoding 3821s - raises an Encoding::ConverterNotFoundError if both encodings are the same 3821s - calls #to_str to convert the source encoding argument to an encoding name 3821s - calls #to_str to convert the destination encoding argument to an encoding name 3821s - sets replacement from the options Hash 3821s - calls #to_hash to convert the options argument to a Hash if not an Integer 3821s - calls #to_str to convert the replacement object to a String 3821s - raises a TypeError if #to_str does not return a String 3821s - raises a TypeError if passed true for the replacement object 3821s - raises a TypeError if passed false for the replacement object 3821s - raises a TypeError if passed an Integer for the replacement object 3821s - accepts an empty String for the replacement object 3821s 3821s Encoding::Converter.new when passed nil for the replacement object when the destination encoding is not UTF-8 3821s - sets the replacement String to '?' 3821s - sets the replacement String encoding to US-ASCII 3821s - sets the replacement String to '\uFFFD' 3821s - sets the replacement String encoding to UTF-8 3821s 3821s Encoding::Converter#primitive_convert 3821s - accepts a nil source buffer 3821s - accepts a String as the source buffer 3821s - raises FrozenError when the destination buffer is a frozen String 3821s - accepts nil for the destination byte offset 3821s - accepts an integer for the destination byte offset 3821s - calls #to_int to convert the destination byte offset 3821s - raises an ArgumentError if the destination byte offset is greater than the bytesize of the destination buffer 3821s - uses the destination byte offset to determine where to write the result in the destination buffer 3821s - accepts nil for the destination bytesize 3821s - accepts an integer for the destination bytesize 3821s - allows a destination bytesize value greater than the bytesize of the source buffer 3821s - allows a destination bytesize value less than the bytesize of the source buffer 3821s - calls #to_int to convert the destination byte size 3821s - uses destination bytesize as the maximum bytesize of the destination buffer 3821s - allows a destination buffer of unlimited size if destination bytesize is nil 3821s - accepts an options hash 3821s - sets the destination buffer's encoding to the destination encoding if the conversion succeeded 3821s - sets the destination buffer's encoding to the destination encoding if the conversion failed 3821s - removes the undefined part from the source buffer when returning :undefined_conversion 3821s - returns :incomplete_input when source buffer ends unexpectedly and :partial_input isn't specified 3821s - clears the source buffer when returning :incomplete_input 3821s - returns :source_buffer_empty when source buffer ends unexpectedly and :partial_input is true 3821s - clears the source buffer when returning :source_buffer_empty 3821s - returns :undefined_conversion when a character in the source buffer is not representable in the output encoding 3821s - returns :invalid_byte_sequence when an invalid byte sequence was found in the source buffer 3821s - removes consumed and erroneous bytes from the source buffer when returning :invalid_byte_sequence 3821s - returns :finished when the conversion succeeded 3821s - clears the source buffer when returning :finished 3821s - returns :destination_buffer_full when the destination buffer is too small 3821s - clears the source buffer when returning :destination_buffer_full 3821s - keeps removing invalid bytes from the source buffer 3821s - reuses read-again bytes after the first error 3821s 3821s Encoding::Converter#primitive_errinfo 3821s - returns [:source_buffer_empty,nil,nil,nil,nil] when no conversion has been attempted 3821s - returns [:finished,nil,nil,nil,nil] when #primitive_convert last returned :finished 3821s - returns [:source_buffer_empty,nil,nil,nil, nil] when #convert last succeeded 3821s - returns [:destination_buffer_full,nil,nil,nil,nil] when #primitive_convert last returned :destination_buffer_full 3821s - returns the status of the last primitive conversion, even if it was successful and the previous one wasn't 3821s - returns the state, source encoding, target encoding, and the erroneous bytes when #primitive_convert last returned :undefined_conversion 3821s - returns the state, source encoding, target encoding, and erroneous bytes when #primitive_convert last returned :incomplete_input 3821s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #primitive_convert last returned :invalid_byte_sequence 3821s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #convert last raised InvalidByteSequenceError 3821s - returns the state, source encoding, target encoding, erroneous bytes, and the read-again bytes when #finish last raised InvalidByteSequenceError 3821s 3821s Encoding::Converter#putback 3821s - returns a String 3821s - returns a String in the source encoding 3821s - returns the bytes buffered due to an :invalid_byte_sequence error 3821s - allows conversion to be resumed after an :invalid_byte_sequence 3821s - returns an empty String when there are no more bytes to put back 3821s - returns the problematic bytes for UTF-16LE 3821s - accepts an integer argument corresponding to the number of bytes to be put back 3821s 3821s Encoding::Converter#replacement 3821s - returns '?' in US-ASCII when the destination encoding is not UTF-8 3821s - returns \uFFFD when the destination encoding is UTF-8 3821s 3821s Encoding::Converter#replacement= 3821s - accepts a String argument 3821s - accepts a String argument of arbitrary length 3821s - raises a TypeError if assigned a non-String argument 3821s - sets #replacement 3821s - raises an UndefinedConversionError is the argument cannot be converted into the destination encoding 3821s - does not change the replacement character if the argument cannot be converted into the destination encoding 3821s - uses the replacement character 3821s 3821s Encoding::Converter.search_convpath 3821s - returns an Array with a single element if there is a direct converter 3821s - returns multiple encoding pairs when direct conversion is impossible 3821s - indicates if crlf_newline conversion would occur 3821s - raises an Encoding::ConverterNotFoundError if no conversion path exists 3821s 3821s Encoding::Converter#source_encoding 3821s - returns the source encoding as an Encoding object 3821s 3821s Encoding#dummy? 3821s - returns false for proper encodings 3821s - returns true for dummy encodings 3821s 3821s Encoding.find 3821s - returns the corresponding Encoding object if given a valid encoding name 3821s - returns the corresponding Encoding object if given a valid alias name 3821s - raises a TypeError if passed a Symbol 3821s - returns the passed Encoding object 3821s - accepts encoding names as Strings 3821s - accepts any object as encoding name, if it responds to #to_str 3821s - is case insensitive 3821s - raises an ArgumentError if the given encoding does not exist 3821s - supports the 'locale' encoding alias 3821s - returns default external encoding for the 'external' encoding alias 3821s - returns default internal encoding for the 'internal' encoding alias 3821s - uses default external encoding for the 'filesystem' encoding alias 3821s 3821s Encoding#inspect 3821s - returns a String 3821s - returns # for a non-dummy encoding named 'name' 3821s - returns # for a dummy encoding named 'name' 3821s 3821s Encoding::InvalidByteSequenceError#destination_encoding_name 3821s - returns a String 3821s - is equal to the destination encoding name of the object that raised it 3821s 3821s Encoding::InvalidByteSequenceError#destination_encoding 3821s - returns an Encoding object 3821s - is equal to the destination encoding of the object that raised it 3821s 3821s Encoding::InvalidByteSequenceError#error_bytes 3821s - returns a String 3821s - returns the bytes that caused the exception 3821s - uses BINARY as the encoding 3821s 3821s Encoding::InvalidByteSequenceError#incomplete_input? 3821s - returns nil by default 3821s - returns true if #primitive_convert returned :incomplete_input for the same data 3821s - returns false if #primitive_convert returned :invalid_byte_sequence for the same data 3821s 3821s Encoding::InvalidByteSequenceError#readagain_bytes 3821s - returns a String 3821s - returns the bytes to be read again 3821s - uses BINARY as the encoding 3821s 3821s Encoding::UndefinedConversionError#source_encoding_name 3821s - returns a String 3821s - is equal to the source encoding name of the object that raised it 3821s - is equal to the source encoding at the stage of the conversion path where the error occurred 3821s 3821s Encoding::InvalidByteSequenceError#source_encoding 3821s - returns an Encoding object 3821s - is equal to the source encoding of the object that raised it 3821s - is equal to the source encoding at the stage of the conversion path where the error occurred 3821s 3821s Encoding.list 3821s - returns an Array 3821s - returns an Array of Encoding objects 3821s - returns each encoding only once 3821s - includes the default external encoding 3821s - does not include any alias names 3821s - includes all aliased encodings 3821s - includes dummy encodings 3821s - includes UTF-8 encoding 3821s - includes CESU-8 encoding 3821s - updates the list when #find is used to load a new encoding 3821s 3821s Encoding.locale_charmap 3821s - returns a String 3821s - is unaffected by assigning to ENV['LC_ALL'] in the same process 3821s 3821s Encoding.name_list 3821s - returns an Array 3821s - returns encoding names as Strings 3821s - includes all aliases 3821s - includes all non-dummy encodings 3821s 3821s Encoding#name 3821s - returns a String 3821s - uniquely identifies an encoding 3821s 3821s Encoding#names 3821s - returns an Array 3821s - returns names as Strings 3821s - returns #name as the first value 3821s - includes any aliases the encoding has 3821s 3821s Encoding#to_s 3821s - returns a String 3821s - uniquely identifies an encoding 3821s 3821s Encoding::UndefinedConversionError#destination_encoding_name 3821s - returns a String 3821s - is equal to the destination encoding name of the object that raised it 3821s 3821s Encoding::UndefinedConversionError#destination_encoding 3821s - returns an Encoding object 3821s - is equal to the destination encoding of the object that raised it 3821s 3821s Encoding::UndefinedConversionError#error_char 3821s - returns a String 3821s - returns the one-character String that caused the exception 3821s - uses the source encoding 3821s 3821s Encoding::UndefinedConversionError#source_encoding_name 3821s - returns a String 3821s - is equal to the source encoding name of the object that raised it 3821s - is equal to the source encoding at the stage of the conversion path where the error occurred 3821s 3821s Encoding::UndefinedConversionError#source_encoding 3821s - returns an Encoding object 3821s - is equal to the source encoding of the object that raised it 3821s - is equal to the source encoding at the stage of the conversion path where the error occurred 3821s 3821s Enumerable#all? 3821s - always returns true on empty enumeration 3821s - raises an ArgumentError when more than 1 argument is provided 3821s - does not hide exceptions out of #each 3821s 3821s Enumerable#all? with no block 3821s - returns true if no elements are false or nil 3821s - returns false if there are false or nil elements 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#all? with block 3821s - returns true if the block never returns false or nil 3821s - returns false if the block ever returns false or nil 3821s - stops iterating once the return value is determined 3821s - does not hide exceptions out of the block 3821s - gathers initial args as elements when each yields multiple 3821s - yields multiple arguments when each yields multiple 3821s 3821s Enumerable#all? when given a pattern argument 3821s - calls `===` on the pattern the return value 3821s - always returns true on empty enumeration 3821s - does not hide exceptions out of #each 3821s - returns true if the pattern never returns false or nil 3821s - returns false if the pattern ever returns false or nil 3821s - does not hide exceptions out of pattern#=== 3821s - calls the pattern with gathered array when yielded with multiple arguments 3821s - ignores the block if there is an argument 3821s 3821s Enumerable#any? 3821s - always returns false on empty enumeration 3821s - raises an ArgumentError when more than 1 argument is provided 3821s - does not hide exceptions out of #each 3821s 3821s Enumerable#any? with no block 3821s - returns true if any element is not false or nil 3821s - returns false if all elements are false or nil 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#any? with block 3821s - returns true if the block ever returns other than false or nil 3821s - returns false if the block never returns other than false or nil 3821s - stops iterating once the return value is determined 3821s - does not hide exceptions out of the block 3821s - gathers initial args as elements when each yields multiple 3821s - yields multiple arguments when each yields multiple 3821s 3821s Enumerable#any? when given a pattern argument 3821s - calls `===` on the pattern the return value 3821s - always returns false on empty enumeration 3821s - does not hide exceptions out of #each 3821s - returns true if the pattern ever returns a truthy value 3821s - returns false if the block never returns other than false or nil 3821s - does not hide exceptions out of pattern#=== 3821s - calls the pattern with gathered array when yielded with multiple arguments 3821s - ignores the block if there is an argument 3821s 3821s Enumerable#chain 3821s - returns a chain of self and provided enumerables 3821s - returns an Enumerator::Chain if given a block 3821s 3821s Enumerable#chunk 3821s - returns an Enumerator if called without a block 3821s - returns an Enumerator if given a block 3821s - yields the current element and the current chunk to the block 3821s - 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' 3821s - returns a partitioned Array of values 3821s - returns elements for which the block returns :_alone in separate Arrays 3821s - yields Arrays as a single argument to a rest argument 3821s - does not return elements for which the block returns :_separator 3821s - does not return elements for which the block returns nil 3821s - raises a RuntimeError if the block returns a Symbol starting with an underscore other than :_alone or :_separator 3821s - does not accept arguments 3821s - returned Enumerator size returns nil 3821s 3821s Enumerable#chunk_while when given a block 3821s - returns an enumerator 3821s - splits chunks between adjacent elements i and j where the block returns false 3821s - calls the block for length of the receiver enumerable minus one times 3821s 3821s Enumerable#chunk_while when not given a block 3821s - raises an ArgumentError 3821s 3821s Enumerable#chunk_while on a single-element array 3821s - ignores the block and returns an enumerator that yields [element] 3821s 3821s Enumerable#collect_concat 3821s - yields elements to the block and flattens one level 3821s - appends non-Array elements that do not define #to_ary 3821s - concatenates the result of calling #to_ary if it returns an Array 3821s - does not call #to_a 3821s - appends an element that defines #to_ary that returns nil 3821s - raises a TypeError if an element defining #to_ary does not return an Array or nil 3821s - returns an enumerator when no block given 3821s 3821s Enumerable#collect_concat Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#collect_concat Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#collect 3821s - returns a new array with the results of passing each element to block 3821s - passes through the values yielded by #each_with_index 3821s - gathers initial args as elements when each yields multiple 3821s - only yields increasing values for a Range 3821s - returns an enumerator when no block given 3821s - reports the same arity as the given block 3821s - yields an Array of 2 elements for a Hash when block arity is 1 3821s - yields 2 arguments for a Hash when block arity is 2 3821s - raises an error for a Hash when an arity enforcing block of arity >2 is passed in 3821s - calls the each method on sub-classes 3821s 3821s Enumerable#collect Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#collect Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#compact 3821s - returns array without nil elements 3821s 3821s Enumerable#count 3821s - counts nils if given nil as an argument 3821s - accepts an argument for comparison using == 3821s - uses a block for comparison 3821s - ignores the block when given an argument 3821s 3821s Enumerable#count when no argument or a block 3821s - returns size 3821s 3821s Enumerable#count when no argument or a block with a custom size method 3821s - ignores the custom size method 3821s 3821s Enumerable#count when each yields multiple values 3821s - gathers initial args as elements 3821s - accepts an argument for comparison using == 3821s 3821s Enumerable#cycle passed no argument or nil 3821s - loops indefinitely 3821s - returns nil if there are no elements 3821s - yields successive elements of the array repeatedly 3821s - calls each at most once 3821s - yields only when necessary 3821s 3821s Enumerable#cycle passed a number n as an argument 3821s - returns nil and does nothing for non positive n 3821s - calls each at most once 3821s - yields only when necessary 3821s - tries to convert n to an Integer using #to_int 3821s - raises a TypeError when the passed n cannot be coerced to Integer 3821s - raises an ArgumentError if more arguments are passed 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#cycle Enumerable with size when no block is given returned Enumerator size 3821s - should be the result of multiplying the enumerable size by the argument passed 3821s - should be zero when the argument passed is 0 or less 3821s - should be Float::INFINITY when no argument is passed 3821s 3821s Enumerable#cycle Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#detect 3821s - passes each entry in enum to block while block when block is false 3821s - returns nil when the block is false and there is no ifnone proc given 3821s - returns the first element for which the block is not false 3821s - returns the value of the ifnone proc if the block is false 3821s - doesn't call the ifnone proc if an element is found 3821s - calls the ifnone proc only once when the block is false 3821s - calls the ifnone proc when there are no elements 3821s - ignores the ifnone argument when nil 3821s - passes through the values yielded by #each_with_index 3821s - returns an enumerator when no block given 3821s - passes the ifnone proc to the enumerator 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#detect Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#detect Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#drop 3821s - requires exactly one argument 3821s 3821s Enumerable#drop passed a number n as an argument 3821s - raises ArgumentError if n < 0 3821s - tries to convert n to an Integer using #to_int 3821s - returns [] for empty enumerables 3821s - returns [] if dropping all 3821s - raises a TypeError when the passed n cannot be coerced to Integer 3821s 3821s Enumerable#drop_while 3821s - returns an Enumerator if no block given 3821s - returns no/all elements for {true/false} block 3821s - accepts returns other than true/false 3821s - passes elements to the block until the first false 3821s - will only go through what's needed 3821s - doesn't return self when it could 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#drop_while Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#drop_while Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#each_cons 3821s - passes element groups to the block 3821s - raises an ArgumentError if there is not a single parameter > 0 3821s - tries to convert n to an Integer using #to_int 3821s - works when n is >= full length 3821s - yields only as much as needed 3821s - gathers whole arrays as elements when each yields multiple 3821s - returns self when a block is given 3821s 3821s Enumerable#each_cons when no block is given 3821s - returns an enumerator 3821s 3821s Enumerable#each_cons when no block is given Enumerable with size returned Enumerator size 3821s - returns enum size - each_cons argument + 1 3821s - returns 0 when the argument is larger than self 3821s - returns 0 when the enum is empty 3821s 3821s Enumerable#each_cons when no block is given Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#each_entry 3821s - yields multiple arguments as an array 3821s - returns an enumerator if no block 3821s - passes through the values yielded by #each_with_index 3821s - raises an ArgumentError when extra arguments 3821s - passes extra arguments to #each 3821s 3821s Enumerable#each_entry Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#each_entry Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#each_slice 3821s - passes element groups to the block 3821s - raises an ArgumentError if there is not a single parameter > 0 3821s - tries to convert n to an Integer using #to_int 3821s - works when n is >= full length 3821s - yields only as much as needed 3821s - returns an enumerator if no block 3821s - returns self when a block is given 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#each_slice when no block is given 3821s - returns an enumerator 3821s 3821s Enumerable#each_slice when no block is given Enumerable with size returned Enumerator size 3821s - returns the ceil of Enumerable size divided by the argument value 3821s - returns 0 when the Enumerable is empty 3821s 3821s Enumerable#each_slice when no block is given Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#each_with_index 3821s - passes each element and its index to block 3821s - provides each element to the block 3821s - provides each element to the block and its index 3821s - binds splat arguments properly 3821s - returns an enumerator if no block 3821s - passes extra parameters to each 3821s 3821s Enumerable#each_with_index Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#each_with_index Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#each_with_object 3821s - passes each element and its argument to the block 3821s - returns an enumerator if no block 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#each_with_object Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#each_with_object Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#entries 3821s - returns an array containing the elements 3821s - passes through the values yielded by #each_with_index 3821s - passes arguments to each 3821s 3821s Enumerable#filter_map 3821s - returns an empty array if there are no elements 3821s - returns an array with truthy results of passing each element to block 3821s - returns an enumerator when no block given 3821s 3821s Enumerable#filter 3821s - returns all elements for which the block is not false 3821s - returns an enumerator when no block given 3821s - passes through the values yielded by #each_with_index 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#filter Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#filter Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#find_all 3821s - returns all elements for which the block is not false 3821s - returns an enumerator when no block given 3821s - passes through the values yielded by #each_with_index 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#find_all Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#find_all Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#find_index 3821s - passes each entry in enum to block while block when block is false 3821s - returns nil when the block is false 3821s - returns the first index for which the block is not false 3821s - returns the first index found 3821s - returns nil when the element not found 3821s - ignores the block if an argument is given 3821s - returns an Enumerator if no block given 3821s - uses #== for testing equality 3821s 3821s Enumerable#find_index without block 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#find_index with block given a single yield parameter 3821s - passes first element to the parameter 3821s 3821s Enumerable#find_index with block given a greedy yield parameter 3821s - passes a gathered array to the parameter 3821s 3821s Enumerable#find_index Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#find_index Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#find 3821s - passes each entry in enum to block while block when block is false 3821s - returns nil when the block is false and there is no ifnone proc given 3821s - returns the first element for which the block is not false 3821s - returns the value of the ifnone proc if the block is false 3821s - doesn't call the ifnone proc if an element is found 3821s - calls the ifnone proc only once when the block is false 3821s - calls the ifnone proc when there are no elements 3821s - ignores the ifnone argument when nil 3821s - passes through the values yielded by #each_with_index 3821s - returns an enumerator when no block given 3821s - passes the ifnone proc to the enumerator 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#find Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#find Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#first 3821s - returns the first element 3821s - returns nil if self is empty 3821s - returns a gathered array from yield parameters 3821s - raises a RangeError when passed a Bignum 3821s 3821s Enumerable#first when passed an argument 3821s - returns the first count elements if given a count 3821s - returns an empty array when passed count on an empty array 3821s - returns an empty array when passed count == 0 3821s - returns an array containing the first element when passed count == 1 3821s - raises an ArgumentError when count is negative 3821s - returns the entire array when count > length 3821s - tries to convert the passed argument to an Integer using #to_int 3821s - raises a TypeError if the passed argument is not numeric 3821s - gathers whole arrays as elements when each yields multiple 3821s - consumes only what is needed 3821s 3821s Enumerable#flat_map 3821s - yields elements to the block and flattens one level 3821s - appends non-Array elements that do not define #to_ary 3821s - concatenates the result of calling #to_ary if it returns an Array 3821s - does not call #to_a 3821s - appends an element that defines #to_ary that returns nil 3821s - raises a TypeError if an element defining #to_ary does not return an Array or nil 3821s - returns an enumerator when no block given 3821s 3821s Enumerable#flat_map Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#flat_map Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#grep 3821s - grep without a block should return an array of all elements === pattern 3821s - grep with a block should return an array of elements === pattern passed through block 3821s - grep the enumerable (rubycon legacy) 3821s - can use $~ in the block when used with a Regexp 3821s - sets $~ in the block 3821s - does not set $~ when given no block 3821s - does not modify Regexp.last_match without block 3821s - correctly handles non-string elements 3821s 3821s Enumerable#grep with a block 3821s - returns an Array of matched elements that mapped by the block 3821s - calls the block with gathered array when yielded with multiple arguments 3821s - raises an ArgumentError when not given a pattern 3821s 3821s Enumerable#grep_v 3821s - sets $~ in the block 3821s - does not set $~ when given no block 3821s - does not modify Regexp.last_match without block 3821s - correctly handles non-string elements 3821s 3821s Enumerable#grep_v without block 3821s - returns an Array of matched elements 3821s - compares pattern with gathered array when yielded with multiple arguments 3821s - raises an ArgumentError when not given a pattern 3821s 3821s Enumerable#grep_v with block 3821s - returns an Array of matched elements that mapped by the block 3821s - calls the block with gathered array when yielded with multiple arguments 3821s - raises an ArgumentError when not given a pattern 3821s 3821s Enumerable#group_by 3821s - returns a hash with values grouped according to the block 3821s - returns an empty hash for empty enumerables 3821s - returns a hash without default_proc 3821s - returns an Enumerator if called without a block 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#group_by Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#group_by Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#include? 3821s - returns true if any element == argument for numbers 3821s - returns true if any element == argument for other objects 3821s - returns true if any member of enum equals obj when == compare different classes (legacy rubycon) 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#inject 3821s - with argument takes a block with an accumulator (with argument as initial value) and the current element. Value of block becomes new accumulator 3821s - produces an array of the accumulator and the argument when given a block with a *arg 3821s - can take two argument 3821s - ignores the block if two arguments 3821s - does not warn when given a Symbol with $VERBOSE true 3821s - can take a symbol argument 3821s - without argument takes a block with an accumulator (with first element as initial value) and the current element. Value of block becomes new accumulator 3821s - gathers whole arrays as elements when each yields multiple 3821s - with inject arguments(legacy rubycon) 3821s - without inject arguments(legacy rubycon) 3821s - returns nil when fails(legacy rubycon) 3821s - tolerates increasing a collection size during iterating Array 3821s 3821s Enumerable#lazy 3821s - returns an instance of Enumerator::Lazy 3821s 3821s Enumerable#map 3821s - returns a new array with the results of passing each element to block 3821s - passes through the values yielded by #each_with_index 3821s - gathers initial args as elements when each yields multiple 3821s - only yields increasing values for a Range 3821s - returns an enumerator when no block given 3821s - reports the same arity as the given block 3821s - yields an Array of 2 elements for a Hash when block arity is 1 3821s - yields 2 arguments for a Hash when block arity is 2 3821s - raises an error for a Hash when an arity enforcing block of arity >2 is passed in 3821s - calls the each method on sub-classes 3821s 3821s Enumerable#map Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#map Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#max_by 3821s - returns an enumerator if no block 3821s - returns nil if #each yields no objects 3821s - returns the object for whom the value returned by block is the largest 3821s - returns the object that appears first in #each in case of a tie 3821s - uses max.<=>(current) to determine order 3821s - is able to return the maximum for enums that contain nils 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#max_by Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#max_by Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#max_by when called with an argument n without a block 3821s - returns an enumerator 3821s 3821s Enumerable#max_by when called with an argument n with a block 3821s - returns an array containing the maximum n elements based on the block's value 3821s 3821s Enumerable#max_by when called with an argument n with a block on a enumerable of length x where x < n 3821s - returns an array containing the maximum n elements of length n 3821s 3821s Enumerable#max_by when called with an argument n with a block when n is negative 3821s - raises an ArgumentError 3821s 3821s Enumerable#max_by when called with an argument n when n is nil 3821s - returns the maximum element 3821s 3821s Enumerable#max 3821s - returns the maximum element 3821s - returns the maximum element (basics cases) 3821s - returns nil for an empty Enumerable 3821s - raises a NoMethodError for elements without #<=> 3821s - raises an ArgumentError for incomparable elements 3821s - returns the maximum for enumerables that contain nils 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#max when passed a block 3821s - returns the maximum element 3821s 3821s Enumerable#max when called with an argument n without a block 3821s - returns an array containing the maximum n elements 3821s 3821s Enumerable#max when called with an argument n with a block 3821s - returns an array containing the maximum n elements 3821s 3821s Enumerable#max when called with an argument n on a enumerable of length x where x < n 3821s - returns an array containing the maximum n elements of length x 3821s 3821s Enumerable#max when called with an argument n that is negative 3821s - raises an ArgumentError 3821s 3821s Enumerable#max that is nil 3821s - returns the maximum element 3821s 3821s Enumerable#member? 3821s - returns true if any element == argument for numbers 3821s - returns true if any element == argument for other objects 3821s - returns true if any member of enum equals obj when == compare different classes (legacy rubycon) 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#min_by 3821s - returns an enumerator if no block 3821s - returns nil if #each yields no objects 3821s - returns the object for whom the value returned by block is the smallest 3821s - returns the object that appears first in #each in case of a tie 3821s - uses min.<=>(current) to determine order 3821s - is able to return the minimum for enums that contain nils 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#min_by Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#min_by Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#min_by when called with an argument n without a block 3821s - returns an enumerator 3821s 3821s Enumerable#min_by when called with an argument n with a block 3821s - returns an array containing the minimum n elements based on the block's value 3821s 3821s Enumerable#min_by when called with an argument n with a block on a enumerable of length x where x < n 3821s - returns an array containing the minimum n elements of length n 3821s 3821s Enumerable#min_by when called with an argument n with a block when n is negative 3821s - raises an ArgumentError 3821s 3821s Enumerable#min_by when called with an argument n when n is nil 3821s - returns the minimum element 3821s 3821s Enumerable#min 3821s - min should return the minimum element 3821s - returns the minimum (basic cases) 3821s - returns nil for an empty Enumerable 3821s - raises a NoMethodError for elements without #<=> 3821s - raises an ArgumentError for incomparable elements 3821s - returns the minimum when using a block rule 3821s - returns the minimum for enumerables that contain nils 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#min when called with an argument n without a block 3821s - returns an array containing the minimum n elements 3821s 3821s Enumerable#min when called with an argument n with a block 3821s - returns an array containing the minimum n elements 3821s 3821s Enumerable#min when called with an argument n on a enumerable of length x where x < n 3821s - returns an array containing the minimum n elements of length x 3821s 3821s Enumerable#min when called with an argument n that is negative 3821s - raises an ArgumentError 3821s 3821s Enumerable#min that is nil 3821s - returns the minimum element 3821s 3821s Enumerable#minmax_by 3821s - returns an enumerator if no block 3821s - returns nil if #each yields no objects 3821s - returns the object for whom the value returned by block is the largest 3821s - returns the object that appears first in #each in case of a tie 3821s - uses min/max.<=>(current) to determine order 3821s - is able to return the maximum for enums that contain nils 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#minmax_by Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#minmax_by Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#minmax 3821s - min should return the minimum element 3821s - returns the minimum when using a block rule 3821s - returns [nil, nil] for an empty Enumerable 3821s - raises a NoMethodError for elements without #<=> 3821s - raises an ArgumentError when elements are incompatible 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#none? 3821s - always returns true on empty enumeration 3821s - raises an ArgumentError when more than 1 argument is provided 3821s - does not hide exceptions out of #each 3821s 3821s Enumerable#none? with no block 3821s - returns true if none of the elements in self are true 3821s - returns false if at least one of the elements in self are true 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#none? with a block 3821s - passes each element to the block in turn until it returns true 3821s - stops passing elements to the block when it returns true 3821s - returns true if the block never returns true 3821s - returns false if the block ever returns true 3821s - does not hide exceptions out of the block 3821s - gathers initial args as elements when each yields multiple 3821s - yields multiple arguments when each yields multiple 3821s 3821s Enumerable#none? when given a pattern argument 3821s - calls `===` on the pattern the return value 3821s - always returns true on empty enumeration 3821s - does not hide exceptions out of #each 3821s - returns true if the pattern never returns a truthy value 3821s - returns false if the pattern ever returns other than false or nil 3821s - does not hide exceptions out of pattern#=== 3821s - calls the pattern with gathered array when yielded with multiple arguments 3821s - ignores the block if there is an argument 3821s 3821s Enumerable#one? 3821s - always returns false on empty enumeration 3821s - raises an ArgumentError when more than 1 argument is provided 3821s - does not hide exceptions out of #each 3821s 3821s Enumerable#one? with no block 3821s - returns true if only one element evaluates to true 3821s - returns false if two elements evaluate to true 3821s - returns false if all elements evaluate to false 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#one? with a block 3821s - returns true if block returns true once 3821s - returns false if the block returns true more than once 3821s - returns false if the block only returns false 3821s - does not hide exceptions out of the block 3821s - gathers initial args as elements when each yields multiple 3821s - yields multiple arguments when each yields multiple 3821s 3821s Enumerable#one? when given a pattern argument 3821s - calls `===` on the pattern the return value 3821s - always returns false on empty enumeration 3821s - does not hide exceptions out of #each 3821s - returns true if the pattern returns a truthy value only once 3821s - returns false if the pattern returns a truthy value more than once 3821s - returns false if the pattern never returns a truthy value 3821s - does not hide exceptions out of pattern#=== 3821s - calls the pattern with gathered array when yielded with multiple arguments 3821s - ignores the block if there is an argument 3821s 3821s Enumerable#partition 3821s - returns two arrays, the first containing elements for which the block is true, the second containing the rest 3821s - returns an Enumerator if called without a block 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#partition Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#partition Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#reduce 3821s - with argument takes a block with an accumulator (with argument as initial value) and the current element. Value of block becomes new accumulator 3821s - produces an array of the accumulator and the argument when given a block with a *arg 3821s - can take two argument 3821s - ignores the block if two arguments 3821s - does not warn when given a Symbol with $VERBOSE true 3821s - can take a symbol argument 3821s - without argument takes a block with an accumulator (with first element as initial value) and the current element. Value of block becomes new accumulator 3821s - gathers whole arrays as elements when each yields multiple 3821s - with inject arguments(legacy rubycon) 3821s - without inject arguments(legacy rubycon) 3821s - returns nil when fails(legacy rubycon) 3821s - tolerates increasing a collection size during iterating Array 3821s 3821s Enumerable#reject 3821s - returns an array of the elements for which block is false 3821s - returns an Enumerator if called without a block 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#reject Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#reject Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#reverse_each 3821s - traverses enum in reverse order and pass each element to block 3821s - returns an Enumerator if no block given 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#reverse_each Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#reverse_each Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#select 3821s - returns all elements for which the block is not false 3821s - returns an enumerator when no block given 3821s - passes through the values yielded by #each_with_index 3821s - gathers whole arrays as elements when each yields multiple 3821s 3821s Enumerable#select Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#select Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#slice_after 3821s - raises an ArgumentError when given an incorrect number of arguments 3821s 3821s Enumerable#slice_after when given an argument and no block 3821s - calls === on the argument to determine when to yield 3821s - doesn't yield an empty array if the filter matches the first entry or the last entry 3821s - uses standard boolean as a test 3821s 3821s Enumerable#slice_after when given a block and no argument 3821s - calls the block to determine when to yield 3821s 3821s Enumerable#slice_after when given a block and an argument 3821s - raises an ArgumentError 3821s 3821s when an iterator method yields more than one value 3821s - processes all yielded values 3821s 3821s Enumerable#slice_before 3821s - raises an ArgumentError when given an incorrect number of arguments 3821s 3821s Enumerable#slice_before when given an argument and no block 3821s - calls === on the argument to determine when to yield 3821s - doesn't yield an empty array if the filter matches the first entry or the last entry 3821s - uses standard boolean as a test 3821s 3821s Enumerable#slice_before when given a block 3821s - does not accept arguments 3821s 3821s Enumerable#slice_before when given a block and no argument 3821s - calls the block to determine when to yield 3821s 3821s Enumerable#slice_before when an iterator method yields more than one value 3821s - processes all yielded values 3821s 3821s Enumerable#slice_before Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#slice_before Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#slice_when when given a block 3821s - returns an enumerator 3821s - splits chunks between adjacent elements i and j where the block returns true 3821s - calls the block for length of the receiver enumerable minus one times 3821s - doesn't yield an empty array if the block matches the first or the last time 3821s - doesn't yield an empty array on a small enumerable 3821s 3821s Enumerable#slice_when when not given a block 3821s - raises an ArgumentError 3821s 3821s Enumerable#slice_when when an iterator method yields more than one value 3821s - processes all yielded values 3821s 3821s Enumerable#sort_by 3821s - returns an array of elements ordered by the result of block 3821s - sorts the object by the given attribute 3821s - returns an Enumerator when a block is not supplied 3821s - gathers whole arrays as elements when each yields multiple 3821s - returns an array of elements when a block is supplied and #map returns an enumerable 3821s - calls #each to iterate over the elements to be sorted 3821s 3821s Enumerable#sort_by Enumerable with size when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerable#sort_by Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#sort 3821s - sorts by the natural order as defined by <=> 3821s - yields elements to the provided block 3821s - raises a NoMethodError if elements do not define <=> 3821s - sorts enumerables that contain nils 3821s - compare values returned by block with 0 3821s - raises an error if objects can't be compared 3821s - gathers whole arrays as elements when each yields multiple 3821s - doesn't raise an error if #to_a returns a frozen Array 3821s 3821s Enumerable#sum 3821s - returns amount of the elements with taking an argument as the initial value 3821s - gives 0 as a default argument 3821s - uses Kahan's compensated summation algorithm for precise sum of float numbers 3821s 3821s Enumerable#sum with a block 3821s - transforms the elements 3821s - does not destructure array elements 3821s 3821s Enumerable#take 3821s - requires an argument 3821s 3821s Enumerable#take when passed an argument 3821s - returns the first count elements if given a count 3821s - returns an empty array when passed count on an empty array 3821s - returns an empty array when passed count == 0 3821s - returns an array containing the first element when passed count == 1 3821s - raises an ArgumentError when count is negative 3821s - returns the entire array when count > length 3821s - tries to convert the passed argument to an Integer using #to_int 3821s - raises a TypeError if the passed argument is not numeric 3821s - gathers whole arrays as elements when each yields multiple 3821s - consumes only what is needed 3821s 3821s Enumerable#take_while 3821s - returns an Enumerator if no block given 3821s - returns no/all elements for {true/false} block 3821s - accepts returns other than true/false 3821s - passes elements to the block until the first false 3821s - will only go through what's needed 3821s - doesn't return self when it could 3821s - calls the block with initial args when yielded with multiple arguments 3821s 3821s Enumerable#take_while Enumerable with size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#take_while Enumerable with no size when no block is given returned Enumerator 3821s - size returns nil 3821s 3821s Enumerable#tally 3821s - returns a hash with counts according to the value 3821s - returns a hash without default 3821s - returns an empty hash for empty enumerables 3821s - counts values as gathered array when yielded with multiple arguments 3821s - does not call given block 3821s 3821s Enumerable#tally with a hash 3821s - returns a hash with counts according to the value 3821s - returns the given hash 3821s - calls #to_hash to convert argument to Hash implicitly if passed not a Hash 3821s - raises a FrozenError and does not update the given hash when the hash is frozen 3821s - raises a FrozenError even if enumerable is empty 3821s - does not call given block 3821s - ignores the default value 3821s - ignores the default proc 3821s - needs the values counting each elements to be an integer 3821s 3821s Enumerable#to_a 3821s - returns an array containing the elements 3821s - passes through the values yielded by #each_with_index 3821s - passes arguments to each 3821s 3821s Enumerable#to_h 3821s - converts empty enumerable to empty hash 3821s - converts yielded [key, value] pairs to a hash 3821s - uses the last value of a duplicated key 3821s - calls #to_ary on contents 3821s - forwards arguments to #each 3821s - raises TypeError if an element is not an array 3821s - raises ArgumentError if an element is not a [key, value] pair 3821s 3821s Enumerable#to_h with block 3821s - converts [key, value] pairs returned by the block to a hash 3821s - raises ArgumentError if block returns longer or shorter array 3821s - raises TypeError if block returns something other than Array 3821s - coerces returned pair to Array with #to_ary 3821s - does not coerce returned pair to Array with #to_a 3821s 3821s Enumerable#uniq 3821s - returns an array that contains only unique elements 3821s - uses eql? semantics 3821s - compares elements first with hash 3821s - does not compare elements with different hash codes via eql? 3821s - compares elements with matching hash codes with #eql? 3821s 3821s Enumerable#uniq when yielded with multiple arguments 3821s - returns all yield arguments as an array 3821s 3821s Enumerable#zip 3821s - combines each element of the receiver with the element of the same index in arrays given as arguments 3821s - passes each element of the result array to a block and return nil if a block is given 3821s - fills resulting array with nils if an argument array is too short 3821s - converts arguments to arrays using #to_ary 3821s - converts arguments to enums using #to_enum 3821s - gathers whole arrays as elements when each yields multiple 3821s - raises TypeError when some argument isn't Array and doesn't respond to #to_ary and #to_enum 3821s 3821s Enumerator::ArithmeticSequence#begin 3821s - returns the begin of the sequence 3821s 3821s Enumerator::ArithmeticSequence#begin with beginless 3821s - returns nil as begin of the sequence 3821s 3821s Enumerator::ArithmeticSequence#each 3821s - calls given block on each item of the sequence 3821s - returns self 3821s 3821s Enumerator::ArithmeticSequence#end 3821s - returns the end of the sequence 3821s 3821s Enumerator::ArithmeticSequence#end with endless 3821s - returns nil as end of the sequence 3821s 3821s Enumerator::ArithmeticSequence#== 3821s - returns true if begin, end, step and exclude_end? are equal 3821s 3821s Enumerator::ArithmeticSequence#exclude_end? when created using Numeric#step 3821s - always returns false 3821s 3821s Enumerator::ArithmeticSequence#exclude_end? when created using Range#step 3821s - mirrors range.exclude_end? 3821s 3821s Enumerator::ArithmeticSequence#first 3821s - returns the first element of the sequence 3821s 3821s Enumerator::ArithmeticSequence#hash 3821s - is based on begin, end, step and exclude_end? 3821s 3821s Enumerator::ArithmeticSequence#inspect when Numeric#step is used 3821s - returns '(begin.step(end{, step}))' 3821s 3821s Enumerator::ArithmeticSequence#inspect when Range#step is used 3821s - returns '((range).step{(step)})' 3821s 3821s Enumerator::ArithmeticSequence#last 3821s - returns the last element of the sequence 3821s 3821s Enumerator::ArithmeticSequence.new 3821s - is not defined 3821s 3821s Enumerator::ArithmeticSequence.allocate 3821s - is not defined 3821s 3821s Enumerator::ArithmeticSequence#size for finite sequence 3821s - returns the number of elements in this arithmetic sequence 3821s 3821s Enumerator::ArithmeticSequence#size for infinite sequence 3821s - returns Infinity 3821s 3821s Enumerator::ArithmeticSequence#step 3821s - returns the original value given to step method 3821s 3821s Enumerator::Chain#each 3821s - calls each on its constituents as needed 3821s 3821s Enumerator::Chain#initialize 3821s - is a private method 3821s - returns self 3821s - accepts many arguments 3821s - accepts arguments that are not Enumerable nor responding to :each 3821s 3821s Enumerator::Chain#initialize on frozen instance 3821s - raises a FrozenError 3821s 3821s Enumerator::Chain#inspect 3821s - shows a representation of the Enumerator 3821s - calls inspect on its chain elements 3821s - returns a not initialized representation if #initialized is not called yet 3821s 3821s Enumerator::Chain#rewind 3821s - returns self 3821s - does nothing if receiver has not been iterated 3821s - does nothing on objects that don't respond_to rewind 3821s - calls_rewind its objects 3821s - calls_rewind in reverse order 3821s - calls rewind only for objects that have actually been iterated on 3821s 3821s Enumerator::Chain#size 3821s - returns the sum of the sizes of the elements 3821s - returns nil or Infinity for the first element of such a size 3821s 3821s Enumerator#each 3821s - yields each element of self to the given block 3821s - calls #each on the object given in the constructor by default 3821s - calls #each on the underlying object until it's exhausted 3821s - calls the method given in the constructor instead of #each 3821s - calls the method given in the constructor until it's exhausted 3821s - raises a NoMethodError if the object doesn't respond to #each 3821s - returns self if not given arguments and not given a block 3821s - returns the same value from receiver.each if block is given 3821s - passes given arguments at initialized to receiver.each 3821s - requires multiple arguments 3821s - appends given arguments to receiver.each 3821s - returns the same value from receiver.each if block and arguments are given 3821s - returns new Enumerator if given arguments but not given a block 3821s 3821s Enumerator#each_with_index 3821s - passes each element and its index to block 3821s - returns the object being enumerated when given a block 3821s - binds splat arguments properly 3821s - returns an enumerator if no block is supplied 3821s - returns a new Enumerator when no block is given 3821s - raises an ArgumentError if passed extra arguments 3821s - passes on the given block's return value 3821s - returns the iterator's return value 3821s - returns the correct value if chained with itself 3821s 3821s Enumerator#each_with_index when no block is given returned Enumerator 3821s - size returns the enumerable size 3821s 3821s Enumerator#each_with_object 3821s - receives an argument 3821s 3821s Enumerator#each_with_object with block 3821s - returns the given object 3821s 3821s Enumerator#each_with_object with block the block parameter 3821s - passes each element to first parameter 3821s - passes the given object to last parameter 3821s 3821s Enumerator#each_with_object without block 3821s - returns new Enumerator 3821s 3821s Enumerator#enum_for 3821s - is defined in Kernel 3821s - returns a new enumerator 3821s - defaults the first argument to :each 3821s - sets regexp matches in the caller 3821s - exposes multi-arg yields as an array 3821s - uses the passed block's value to calculate the size of the enumerator 3821s - defers the evaluation of the passed block until #size is called 3821s 3821s Enumerator 3821s - includes Enumerable 3821s 3821s Enumerator#feed 3821s - sets the future return value of yield if called before advancing the iterator 3821s - causes yield to return the value if called during iteration 3821s - can be called for each iteration 3821s - returns nil 3821s - raises a TypeError if called more than once without advancing the enumerator 3821s - sets the return value of Yielder#yield 3821s 3821s Enumerator#first 3821s - returns arrays correctly when calling #first (2376) 3821s 3821s Enumerator::Generator#each 3821s - is an enumerable 3821s - supports enumeration with a block 3821s - raises a LocalJumpError if no block given 3821s - returns the block returned value 3821s - requires multiple arguments 3821s - appends given arguments to receiver.each 3821s 3821s Enumerator::Generator#initialize 3821s - is a private method 3821s - returns self when given a block 3821s 3821s Enumerator#initialize 3821s - is a private method 3821s - returns self when given a block 3821s - accepts a block 3821s - sets size to nil if size is not given 3821s - sets size to nil if the given size is nil 3821s - sets size to the given size if the given size is Float::INFINITY 3821s - sets size to the given size if the given size is an Integer 3821s - sets size to the given size if the given size is a Proc 3821s 3821s Enumerator#initialize on frozen instance 3821s - raises a FrozenError 3821s 3821s Enumerator#inspect shows a representation of the Enumerator 3821s - including receiver and method 3821s - including receiver and method and arguments 3821s - including the nested Enumerator 3821s 3821s Enumerator::Lazy#chunk 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - returns an Enumerator if called without a block 3821s - calls the block with gathered values when yield with multiple arguments 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#chunk when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#chunk on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#chunk on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#chunk_while 3821s - works with an infinite enumerable 3821s - should return a lazy enumerator 3821s 3821s Enumerator::Lazy#collect_concat 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - calls the block with initial values when yield with multiple arguments 3821s - raises an ArgumentError when not given a block 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#collect_concat when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s - flattens elements when the given block returned an array or responding to .each and .force 3821s 3821s Enumerator::Lazy#collect_concat on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#collect_concat on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s - flattens elements when the given block returned an array or responding to .each and .force 3821s 3821s Enumerator::Lazy#collect 3821s - returns a new instance of Enumerator::Lazy 3821s - keeps size 3821s - calls the block with initial values when yield with multiple arguments 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#collect when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#collect on a nested Lazy 3821s - keeps size 3821s 3821s Enumerator::Lazy#collect on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#compact 3821s - returns array without nil elements 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#drop 3821s - returns a new instance of Enumerator::Lazy 3821s - sets difference of given count with old size to new size 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#drop when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#drop on a nested Lazy 3821s - sets difference of given count with old size to new size 3821s 3821s Enumerator::Lazy#drop on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#drop_while 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - calls the block with initial values when yield with multiple arguments 3821s - raises an ArgumentError when not given a block 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#drop_while when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#drop_while on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#drop_while on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#eager 3821s - returns a non-lazy Enumerator converted from the lazy enumerator 3821s - does not enumerate an enumerator 3821s 3821s Enumerator::Lazy#enum_for 3821s - requires multiple arguments 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil when not given a block 3821s - sets given block to size when given a block 3821s - generates a lazy enumerator from the given name 3821s - passes given arguments to wrapped method 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#filter_map 3821s - maps only truthy results 3821s - does not map false results 3821s 3821s Enumerator::Lazy#filter 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - calls the block with a gathered array when yield with multiple arguments 3821s - raises an ArgumentError when not given a block 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#filter when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#filter on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#filter on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#find_all 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - calls the block with a gathered array when yield with multiple arguments 3821s - raises an ArgumentError when not given a block 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#find_all when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#find_all on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#find_all on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s 3821s Enumerator::Lazy#flat_map 3821s - returns a new instance of Enumerator::Lazy 3821s - sets #size to nil 3821s - calls the block with initial values when yield with multiple arguments 3821s - raises an ArgumentError when not given a block 3821s - works with an infinite enumerable 3821s - properly unwraps nested yields 3821s 3821s Enumerator::Lazy#flat_map when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s - flattens elements when the given block returned an array or responding to .each and .force 3821s 3821s Enumerator::Lazy#flat_map on a nested Lazy 3821s - sets #size to nil 3821s 3821s Enumerator::Lazy#flat_map on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3821s - stops after specified times 3821s - flattens elements when the given block returned an array or responding to .each and .force 3821s 3821s Enumerator::Lazy#force 3821s - passes given arguments to receiver.each 3821s - works with an infinite enumerable 3821s 3821s Enumerator::Lazy#force on a nested Lazy 3821s - calls all block and returns an Array 3821s 3821s Enumerator::Lazy#grep 3821s - requires an argument 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil 3822s - calls the block with a gathered array when yield with multiple arguments 3822s - works with an infinite enumerable 3822s 3822s Enumerator::Lazy#grep when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times when not given a block 3822s - stops after specified times when given a block 3822s 3822s Enumerator::Lazy#grep on a nested Lazy 3822s - sets #size to nil 3822s 3822s Enumerator::Lazy#grep on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times when not given a block 3822s - stops after specified times when given a block 3822s 3822s Enumerator::Lazy#grep_v 3822s - requires an argument 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil 3822s - calls the block with a gathered array when yield with multiple arguments 3822s - works with an infinite enumerable 3822s 3822s Enumerator::Lazy#grep_v when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times when not given a block 3822s - stops after specified times when given a block 3822s 3822s Enumerator::Lazy#grep_v on a nested Lazy 3822s - sets #size to nil 3822s 3822s Enumerator::Lazy#grep_v on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times when not given a block 3822s - stops after specified times when given a block 3822s 3822s Enumerator::Lazy#initialize 3822s - is a private method 3822s - returns self 3822s - sets #size to nil if not given a size 3822s - sets #size to nil if given size is nil 3822s - sets given size to own size if the given size is Float::INFINITY 3822s - sets given size to own size if the given size is an Integer 3822s - sets given size to own size if the given size is a Proc 3822s - raises an ArgumentError when block is not given 3822s 3822s Enumerator::Lazy#initialize when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#initialize on frozen instance 3822s - raises a FrozenError 3822s 3822s Enumerator::Lazy 3822s - is a subclass of Enumerator 3822s - defines lazy versions of a whitelist of Enumerator methods 3822s 3822s Enumerator::Lazy#lazy 3822s - returns self 3822s 3822s Enumerator::Lazy#map 3822s - returns a new instance of Enumerator::Lazy 3822s - keeps size 3822s - calls the block with initial values when yield with multiple arguments 3822s - works with an infinite enumerable 3822s - doesn't unwrap Arrays 3822s 3822s Enumerator::Lazy#map when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#map on a nested Lazy 3822s - keeps size 3822s 3822s Enumerator::Lazy#map on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#reject 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil 3822s - lets exceptions raised in the block go through 3822s - calls the block with a gathered array when yield with multiple arguments 3822s - raises an ArgumentError when not given a block 3822s - works with an infinite enumerable 3822s 3822s Enumerator::Lazy#reject when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#reject on a nested Lazy 3822s - sets #size to nil 3822s 3822s Enumerator::Lazy#reject on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#select 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil 3822s - calls the block with a gathered array when yield with multiple arguments 3822s - raises an ArgumentError when not given a block 3822s - works with an infinite enumerable 3822s - doesn't pre-evaluate the next element 3822s - doesn't over-evaluate when peeked 3822s - doesn't re-evaluate after peek 3822s 3822s Enumerator::Lazy#select when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#select on a nested Lazy 3822s - sets #size to nil 3822s 3822s Enumerator::Lazy#select on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#slice_after 3822s - works with an infinite enumerable 3822s - should return a lazy enumerator 3822s 3822s Enumerator::Lazy#slice_before 3822s - works with an infinite enumerable 3822s - should return a lazy enumerator 3822s 3822s Enumerator::Lazy#slice_when 3822s - works with an infinite enumerable 3822s - should return a lazy enumerator 3822s 3822s Enumerator::Lazy#take 3822s - returns a new instance of Enumerator::Lazy 3822s - sets given count to size if the given count is less than old size 3822s - sets given count to size if the old size is Infinity 3822s 3822s Enumerator::Lazy#take when the returned lazy enumerator is evaluated by .force 3822s - stops after specified times 3822s - stops without iterations if the given argument is 0 3822s 3822s Enumerator::Lazy#take on a nested Lazy 3822s - sets given count to size if the given count is less than old size 3822s 3822s Enumerator::Lazy#take on a nested Lazy when the returned lazy enumerator is evaluated by .force 3822s - stops after specified times 3822s - stops without iterations if the given argument is 0 3822s 3822s Enumerator::Lazy#take_while 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil 3822s - calls the block with initial values when yield with multiple arguments 3822s - raises an ArgumentError when not given a block 3822s 3822s Enumerator::Lazy#take_while when the returned lazy enumerator is evaluated by .force 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#take_while on a nested Lazy 3822s - sets #size to nil 3822s 3822s Enumerator::Lazy#take_while on a nested Lazy when the returned lazy enumerator is evaluated by .force 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#to_enum 3822s - requires multiple arguments 3822s - returns a new instance of Enumerator::Lazy 3822s - sets #size to nil when not given a block 3822s - sets given block to size when given a block 3822s - generates a lazy enumerator from the given name 3822s - passes given arguments to wrapped method 3822s - works with an infinite enumerable 3822s 3822s Enumerator::Lazy#uniq 3822s - works with an infinite enumerable 3822s 3822s Enumerator::Lazy#uniq without block 3822s - returns a lazy enumerator 3822s - return same value after rewind 3822s - sets the size to nil 3822s 3822s Enumerator::Lazy#uniq when yielded with an argument 3822s - returns a lazy enumerator 3822s - return same value after rewind 3822s - sets the size to nil 3822s 3822s Enumerator::Lazy#uniq when yielded with multiple arguments 3822s - return same value after rewind 3822s - returns all yield arguments as an array 3822s 3822s Enumerator::Lazy#with_index 3822s - enumerates with an index 3822s - enumerates with an index starting at a given offset 3822s - enumerates with an index starting at 0 when offset is nil 3822s - raises TypeError when offset does not convert to Integer 3822s - resets after a new call to each 3822s 3822s Enumerator::Lazy#zip 3822s - returns a new instance of Enumerator::Lazy 3822s - keeps size 3822s - calls the block with a gathered array when yield with multiple arguments 3822s - returns a Lazy when no arguments given 3822s - raises a TypeError if arguments contain non-list object 3822s - works with an infinite enumerable and an array 3822s - works with two infinite enumerables 3822s 3822s Enumerator::Lazy#zip when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator::Lazy#zip on a nested Lazy 3822s - keeps size 3822s - behaves as Enumerable#zip when given a block 3822s 3822s Enumerator::Lazy#zip on a nested Lazy when the returned lazy enumerator is evaluated by Enumerable#first 3822s - stops after specified times 3822s 3822s Enumerator.new no block given 3822s - raises 3822s 3822s Enumerator.new when passed a block 3822s - defines iteration with block, yielder argument and calling << method 3822s - defines iteration with block, yielder argument and calling yield method 3822s - defines iteration with block, yielder argument and treating it as a proc 3822s 3822s Enumerator.new when passed a block yielded values 3822s - handles yield arguments properly 3822s - handles << arguments properly 3822s 3822s Enumerator#next 3822s - returns the next element of the enumeration 3822s - raises a StopIteration exception at the end of the stream 3822s - cannot be called again until the enumerator is rewound 3822s - restarts the enumerator if an exception terminated a previous iteration 3822s 3822s Enumerator#next_values 3822s - returns the next element in self 3822s - advances the position of the current element 3822s - advances the position of the enumerator each time when called multiple times 3822s - works in concert with #rewind 3822s - returns an empty array if yield is called without arguments 3822s - raises StopIteration if called on a finished enumerator 3822s 3822s Enumerator#peek 3822s - returns the next element in self 3822s - does not advance the position of the current element 3822s - can be called repeatedly without advancing the position of the current element 3822s - works in concert with #rewind 3822s - raises StopIteration if called on a finished enumerator 3822s 3822s Enumerator#peek_values 3822s - returns the next element in self 3822s - does not advance the position of the current element 3822s - can be called repeatedly without advancing the position of the current element 3822s - works in concert with #rewind 3822s - returns an empty array if yield is called without arguments 3822s - raises StopIteration if called on a finished enumerator 3822s 3822s Enumerator#+ 3822s - returns a chain of self and provided enumerators 3822s - calls #each on each argument 3822s 3822s Enumerator.produce 3822s - creates an infinite enumerator 3822s - terminates iteration when block raises StopIteration exception 3822s 3822s Enumerator.produce when initial value skipped 3822s - uses nil instead 3822s - starts enumerable from result of first block call 3822s 3822s Enumerator#rewind 3822s - resets the enumerator to its initial state 3822s - returns self 3822s - has no effect on a new enumerator 3822s - has no effect if called multiple, consecutive times 3822s - works with peek to reset the position 3822s - calls the enclosed object's rewind method if one exists 3822s - does nothing if the object doesn't have a #rewind method 3822s 3822s Enumerator#rewind 3822s - clears a pending #feed value 3822s 3822s Enumerator#size 3822s - returns same value if set size is an Integer 3822s - returns nil if set size is nil 3822s - returns returning value from size.call if set size is a Proc 3822s - returns the result from size.call if the size respond to call 3822s 3822s Enumerator#to_enum 3822s - is defined in Kernel 3822s - returns a new enumerator 3822s - defaults the first argument to :each 3822s - sets regexp matches in the caller 3822s - exposes multi-arg yields as an array 3822s - uses the passed block's value to calculate the size of the enumerator 3822s - defers the evaluation of the passed block until #size is called 3822s 3822s Enumerator#with_index 3822s - passes each element and its index to block 3822s - returns the object being enumerated when given a block 3822s - binds splat arguments properly 3822s - returns an enumerator if no block is supplied 3822s - returns a new Enumerator when no block is given 3822s - accepts an optional argument when given a block 3822s - accepts an optional argument when not given a block 3822s - numbers indices from the given index when given an offset but no block 3822s - numbers indices from the given index when given an offset and block 3822s - raises a TypeError when the argument cannot be converted to numeric 3822s - converts non-numeric arguments to Integer via #to_int 3822s - coerces the given numeric argument to an Integer 3822s - treats nil argument as no argument 3822s - accepts negative argument 3822s 3822s Enumerator#with_index when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s Enumerator#with_object 3822s - receives an argument 3822s 3822s Enumerator#with_object with block 3822s - returns the given object 3822s 3822s Enumerator#with_object with block the block parameter 3822s - passes each element to first parameter 3822s - passes the given object to last parameter 3822s 3822s Enumerator#with_object without block 3822s - returns new Enumerator 3822s 3822s Enumerator::Yielder#<< 3822s - yields the value to the block 3822s - doesn't double-wrap Arrays 3822s - returns self 3822s 3822s Enumerator::Yielder#initialize 3822s - is a private method 3822s - returns self when given a block 3822s 3822s Enumerator::Yielder#to_proc 3822s - returns a Proc object that takes an argument and yields it to the block 3822s 3822s Enumerator::Yielder#yield 3822s - yields the value to the block 3822s - yields with passed arguments 3822s - returns the result of the block for the given value 3822s 3822s Enumerator::Yielder#yield when multiple arguments passed 3822s - yields the arguments list to the block 3822s 3822s ENV.assoc 3822s - returns an array of the key and value of the environment variable with the given key 3822s - returns nil if no environment variable with the given key exists 3822s - returns the key element coerced with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.clear 3822s - deletes all environment variables 3822s 3822s ENV#clone 3822s - raises ArgumentError when keyword argument 'freeze' is neither nil nor boolean 3822s - raises ArgumentError when keyword argument is not 'freeze' 3822s 3822s ENV.delete_if 3822s - deletes pairs if the block returns true 3822s - returns ENV when block given 3822s - returns ENV even if nothing deleted 3822s - returns an Enumerator if no block given 3822s - deletes pairs through enumerator 3822s - returns ENV from enumerator 3822s - returns ENV from enumerator even if nothing deleted 3822s 3822s ENV.delete_if when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.delete 3822s - removes the variable from the environment 3822s - returns the previous value 3822s - returns nil if the named environment variable does not exist and no block given 3822s - yields the name to the given block if the named environment variable does not exist 3822s - returns the result of given block if the named environment variable does not exist 3822s - does not evaluate the block if the environment variable exists 3822s - removes the variable coerced with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV#dup 3822s - raises TypeError 3822s 3822s ENV.each_key 3822s - returns each key 3822s - returns an Enumerator if called without a block 3822s - returns keys in the locale encoding 3822s 3822s ENV.each_key when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.each_pair 3822s - returns each pair 3822s - returns an Enumerator if called without a block 3822s 3822s ENV.each_pair when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.each_pair with encoding 3822s - uses the locale encoding when Encoding.default_internal is nil 3822s - transcodes from the locale encoding to Encoding.default_internal if set 3822s 3822s ENV.each 3822s - returns each pair 3822s - returns an Enumerator if called without a block 3822s 3822s ENV.each when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.each with encoding 3822s - uses the locale encoding when Encoding.default_internal is nil 3822s - transcodes from the locale encoding to Encoding.default_internal if set 3822s 3822s ENV.each_value 3822s - returns each value 3822s - returns an Enumerator if called without a block 3822s - uses the locale encoding 3822s 3822s ENV.each_value when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.[] 3822s - returns nil if the variable isn't found 3822s - returns only frozen values 3822s - coerces a non-string name with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.[] 3822s - uses the locale encoding if Encoding.default_internal is nil 3822s - transcodes from the locale encoding to Encoding.default_internal if set 3822s 3822s ENV.[]= 3822s - sets the environment variable to the given value 3822s - returns the value 3822s - deletes the environment variable when the value is nil 3822s - coerces the key argument with #to_str 3822s - coerces the value argument with #to_str 3822s - raises TypeError when the key is not coercible to String 3822s - raises TypeError when the value is not coercible to String 3822s - raises Errno::EINVAL when the key contains the '=' character 3822s - raises Errno::EINVAL when the key is an empty string 3822s - does nothing when the key is not a valid environment variable key and the value is nil 3822s 3822s ENV.empty? 3822s - returns true if the Environment is empty 3822s - returns false if not empty 3822s 3822s ENV.except 3822s - returns the ENV as a hash 3822s - uses the locale encoding for keys 3822s - uses the locale encoding for values 3822s - duplicates the ENV when converting to a Hash 3822s - returns a hash without the requested subset 3822s - ignores keys not present in the original hash 3822s 3822s ENV.fetch 3822s - returns a value 3822s - raises a TypeError if the key is not a String 3822s - provides the given default parameter 3822s - does not insist that the default be a String 3822s - provides a default value from a block 3822s - does not insist that the block return a String 3822s - warns on block and default parameter given 3822s - does not evaluate the block when key found 3822s - uses the locale encoding 3822s 3822s ENV.fetch when the key is not found 3822s - raises a KeyError 3822s - sets the Hash as the receiver of KeyError 3822s - sets the unmatched key as the key of KeyError 3822s - formats the object with #inspect in the KeyError message 3822s 3822s ENV.filter! 3822s - removes environment variables for which the block returns true 3822s - returns self if any changes were made 3822s - returns nil if no changes were made 3822s - returns an Enumerator if called without a block 3822s - selects via the enumerator 3822s 3822s ENV.filter! when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.filter 3822s - returns a Hash of names and values for which block return true 3822s - returns an Enumerator when no block is given 3822s - selects via the enumerator 3822s 3822s ENV.filter when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.has_key? 3822s - returns true if ENV has the key 3822s - returns false if ENV doesn't include the key 3822s - coerces the key with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.has_value? 3822s - returns true if ENV has the value 3822s - returns false if ENV doesn't have the value 3822s - coerces the value element with #to_str 3822s - returns nil if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.include? 3822s - returns true if ENV has the key 3822s - returns false if ENV doesn't include the key 3822s - coerces the key with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.inspect 3822s - returns a String that looks like a Hash with real data 3822s 3822s ENV.invert 3822s - returns a hash with ENV.keys as the values and vice versa 3822s 3822s ENV.keep_if 3822s - deletes pairs if the block returns false 3822s - returns ENV when block given 3822s - returns ENV even if nothing deleted 3822s - returns an Enumerator if no block given 3822s - deletes pairs through enumerator 3822s - returns ENV from enumerator 3822s - returns ENV from enumerator even if nothing deleted 3822s 3822s ENV.keep_if when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.key? 3822s - returns true if ENV has the key 3822s - returns false if ENV doesn't include the key 3822s - coerces the key with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.key 3822s - returns the index associated with the passed value 3822s - returns nil if the passed value is not found 3822s - coerces the key element with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.keys 3822s - returns an array of the keys 3822s - returns the keys in the locale encoding 3822s 3822s ENV.length 3822s - returns the number of ENV entries 3822s 3822s ENV.member? 3822s - returns true if ENV has the key 3822s - returns false if ENV doesn't include the key 3822s - coerces the key with #to_str 3822s - raises TypeError if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.merge! 3822s - adds the parameter hash to ENV, returning ENV 3822s - returns ENV when no block given 3822s - yields key, the old value and the new value when replacing an entry 3822s - yields key, the old value and the new value when replacing an entry 3822s - does not evaluate the block when the name is new 3822s - does not use the block's return value as the value when the name is new 3822s - returns ENV when block given 3822s - raises TypeError when a name is not coercible to String 3822s - raises TypeError when a value is not coercible to String 3822s - raises Errno::EINVAL when a name contains the '=' character 3822s - raises Errno::EINVAL when a name is an empty string 3822s - updates good data preceding an error 3822s - does not update good data following an error 3822s 3822s ENV.rassoc 3822s - returns an array of the key and value of the environment variable with the given value 3822s - returns a single array even if there are multiple such environment variables 3822s - returns nil if no environment variable with the given value exists 3822s - returns the value element coerced with #to_str 3822s - returns nil if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.rehash 3822s - returns nil 3822s 3822s ENV.reject! 3822s - rejects entries based on key 3822s - rejects entries based on value 3822s - returns itself or nil 3822s - returns an Enumerator if called without a block 3822s - doesn't raise if empty 3822s 3822s ENV.reject! when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.reject 3822s - rejects entries based on key 3822s - rejects entries based on value 3822s - returns a Hash 3822s - returns an Enumerator if called without a block 3822s - doesn't raise if empty 3822s 3822s ENV.reject when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.replace 3822s - replaces ENV with a Hash 3822s - raises TypeError if the argument is not a Hash 3822s - raises TypeError if a key is not a String 3822s - raises TypeError if a value is not a String 3822s - raises Errno::EINVAL when the key contains the '=' character 3822s - raises Errno::EINVAL when the key is an empty string 3822s - does not accept good data preceding an error 3822s - does not accept good data following an error 3822s 3822s ENV.select! 3822s - removes environment variables for which the block returns true 3822s - returns self if any changes were made 3822s - returns nil if no changes were made 3822s - returns an Enumerator if called without a block 3822s - selects via the enumerator 3822s 3822s ENV.select! when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.select 3822s - returns a Hash of names and values for which block return true 3822s - returns an Enumerator when no block is given 3822s - selects via the enumerator 3822s 3822s ENV.select when no block is given returned Enumerator 3822s - size returns the enumerable size 3822s 3822s ENV.shift 3822s - returns a pair and deletes it 3822s - returns nil if ENV.empty? 3822s - uses the locale encoding if Encoding.default_internal is nil 3822s - transcodes from the locale encoding to Encoding.default_internal if set 3822s 3822s ENV.size 3822s - returns the number of ENV entries 3822s 3822s ENV.slice 3822s - returns a hash of the given environment variable names and their values 3822s - ignores each String that is not an environment variable name 3822s - returns the values for the keys coerced with #to_str, but keeps the original objects as result keys 3822s - raises TypeError if any argument is not a String and does not respond to #to_str 3822s 3822s ENV.store 3822s - sets the environment variable to the given value 3822s - returns the value 3822s - deletes the environment variable when the value is nil 3822s - coerces the key argument with #to_str 3822s - coerces the value argument with #to_str 3822s - raises TypeError when the key is not coercible to String 3822s - raises TypeError when the value is not coercible to String 3822s - raises Errno::EINVAL when the key contains the '=' character 3822s - raises Errno::EINVAL when the key is an empty string 3822s - does nothing when the key is not a valid environment variable key and the value is nil 3822s 3822s ENV.to_a 3822s - returns the ENV as an array 3822s - returns the entries in the locale encoding 3822s 3822s ENV.to_h 3822s - returns the ENV as a hash 3822s - uses the locale encoding for keys 3822s - uses the locale encoding for values 3822s - duplicates the ENV when converting to a Hash 3822s 3822s ENV.to_h with block 3822s - converts [key, value] pairs returned by the block to a hash 3822s - does not require the array elements to be strings 3822s - raises ArgumentError if block returns longer or shorter array 3822s - raises TypeError if block returns something other than Array 3822s - coerces returned pair to Array with #to_ary 3822s - does not coerce returned pair to Array with #to_a 3822s 3822s ENV.to_hash 3822s - returns the ENV as a hash 3822s - uses the locale encoding for keys 3822s - uses the locale encoding for values 3822s - duplicates the ENV when converting to a Hash 3822s 3822s ENV.to_s 3822s - returns "ENV" 3822s 3822s ENV.update 3822s - adds the parameter hash to ENV, returning ENV 3822s - returns ENV when no block given 3822s - yields key, the old value and the new value when replacing an entry 3822s - yields key, the old value and the new value when replacing an entry 3822s - does not evaluate the block when the name is new 3822s - does not use the block's return value as the value when the name is new 3822s - returns ENV when block given 3822s - raises TypeError when a name is not coercible to String 3822s - raises TypeError when a value is not coercible to String 3822s - raises Errno::EINVAL when a name contains the '=' character 3822s - raises Errno::EINVAL when a name is an empty string 3822s - updates good data preceding an error 3822s - does not update good data following an error 3822s 3822s ENV.value? 3822s - returns true if ENV has the value 3822s - returns false if ENV doesn't have the value 3822s - coerces the value element with #to_str 3822s - returns nil if the argument is not a String and does not respond to #to_str 3822s 3822s ENV.values_at 3822s - returns an array of the values corresponding to the given keys 3822s - returns an empty array if no keys specified 3822s - returns nil for each key that is not a name 3822s - uses the locale encoding 3822s - raises TypeError when a key is not coercible to String 3822s 3822s ENV.values 3822s - returns an array of the values 3822s - uses the locale encoding 3822s 3822s Exception#backtrace_locations 3822s - returns nil if no backtrace was set 3822s - returns an Array 3822s - sets each element to a Thread::Backtrace::Location 3822s - produces a backtrace for an exception captured using $! 3822s - returns an Array that can be updated 3822s 3822s Exception#backtrace 3822s - returns nil if no backtrace was set 3822s - returns an Array 3822s - sets each element to a String 3822s - includes the filename of the location where self raised in the first element 3822s - includes the line number of the location where self raised in the first element 3822s - includes the name of the method from where self raised in the first element 3822s - includes the filename of the location immediately prior to where self raised in the second element 3822s - includes the line number of the location immediately prior to where self raised in the second element 3822s - contains lines of the same format for each prior position in the stack 3822s - captures the backtrace for an exception into $! 3822s - captures the backtrace for an exception into $@ 3822s - returns an Array that can be updated 3822s - returns the same array after duping 3822s 3822s SystemCallError.=== 3822s - returns true for an instance of the same class 3822s - returns true if errnos same 3822s - returns false if errnos different 3822s - returns false if arg is not kind of SystemCallError 3822s - returns true if receiver is generic and arg is kind of SystemCallError 3822s - returns false if receiver is generic and arg is not kind of SystemCallError 3822s 3822s Exception#cause 3822s - returns the active exception when an exception is raised 3822s - is set for user errors caused by internal errors 3822s - is set for internal errors caused by user errors 3822s - is not set to the exception itself when it is re-raised 3822s 3822s Exception#dup 3822s - calls #initialize_copy on the new instance 3822s - copies instance variables 3822s - does not copy singleton methods 3822s - does not copy modules included in the singleton class 3822s - does not copy constants defined in the singleton class 3822s - does copy the message 3822s - does copy the backtrace 3822s 3822s Exception#== 3822s - returns true if both exceptions are the same object 3822s - returns true if one exception is the dup'd copy of the other 3822s - returns true if both exceptions have the same class, no message, and no backtrace 3822s - returns true if both exceptions have the same class, the same message, and no backtrace 3822s - returns true if both exceptions have the same class, the same message, and the same backtrace 3822s - returns false if the two exceptions inherit from Exception but have different classes 3822s - returns true if the two objects subclass Exception and have the same message and backtrace 3822s - returns false if the argument is not an Exception 3822s - returns false if the two exceptions differ only in their backtrace 3822s - returns false if the two exceptions differ only in their message 3822s 3822s Errno::EINVAL.new 3822s - can be called with no arguments 3822s - accepts an optional custom message 3822s 3822s Errno::EMFILE 3822s - can be subclassed 3822s 3822s Errno::EAGAIN 3822s - is the same class as Errno::EWOULDBLOCK if they represent the same errno value 3822s 3822s Errno::ENOTSUP 3822s - is defined 3822s - is the same class as Errno::EOPNOTSUPP if they represent the same errno value 3822s 3822s Errno::ENOENT 3822s - lets subclasses inherit the default error message 3822s 3822s Exception.exception 3822s - creates a new instance of Exception 3822s - sets the message of the Exception when passes a message 3822s - returns 'Exception' for message when no message given 3822s - returns the exception when it has a custom constructor 3822s 3822s Exception#exception 3822s - returns self when passed no argument 3822s - returns self when passed self as an argument 3822s - returns an exception of the same class as self with the message given as argument 3822s - when raised will be rescued as the new exception 3822s - captures an exception into $! 3822s - returns an exception of the same class as self with the message given as argument, but without reinitializing 3822s 3822s FrozenError.new 3822s - should take optional receiver argument 3822s 3822s FrozenError#receiver 3822s - should return frozen object that modification was attempted on 3822s 3822s Modifying a frozen object #inspect is redefined and modifies the object 3822s - returns ... instead of String representation of object 3822s 3822s Exception#full_message 3822s - returns formatted string of exception using the same format that is used to print an uncaught exceptions to stderr 3822s - supports :highlight option and adds escape sequences to highlight some strings 3822s - supports :order option and places the error message and the backtrace at the top or the bottom 3822s - shows the exception class at the end of the first line of the message when the message contains multiple lines 3822s - highlights the entire message when the message contains multiple lines 3822s - contains cause of exception 3822s - contains all the chain of exceptions 3822s 3822s Exception#full_message includes details about whether an exception was handled RuntimeError 3822s - should report as unhandled if message is empty 3822s - should not report as unhandled if the message is not empty 3822s - should not report as unhandled if the message is nil 3822s - should not report as unhandled if the message is not specified 3822s 3822s Exception#full_message includes details about whether an exception was handled generic Error 3822s - should not report as unhandled in any event 3822s 3822s Exception 3822s - has the right class hierarchy 3822s 3822s Exception#inspect 3822s - returns '#' when no message given 3822s - keeps message encoding 3822s - includes #to_s when the result is non-empty 3822s - returns the class name when #to_s returns an empty string 3822s - returns the derived class name with a subclassed Exception 3822s 3822s Interrupt.new 3822s - returns an instance of interrupt with no message given 3822s - takes an optional message argument 3822s 3822s IO::EAGAINWaitReadable 3822s - combines Errno::EAGAIN and IO::WaitReadable 3822s - is the same as IO::EWOULDBLOCKWaitReadable if Errno::EAGAIN is the same as Errno::EWOULDBLOCK 3822s 3822s IO::EWOULDBLOCKWaitReadable 3822s - combines Errno::EWOULDBLOCK and IO::WaitReadable 3822s 3822s IO::EAGAINWaitWritable 3822s - combines Errno::EAGAIN and IO::WaitWritable 3822s - is the same as IO::EWOULDBLOCKWaitWritable if Errno::EAGAIN is the same as Errno::EWOULDBLOCK 3822s 3822s IO::EWOULDBLOCKWaitWritable 3822s - combines Errno::EWOULDBLOCK and IO::WaitWritable 3822s 3822s KeyError 3822s - accepts :receiver and :key options 3822s 3822s LoadError#path 3822s - is nil when constructed directly 3822s 3822s LoadError raised by load or require 3822s - provides the failing path in its #path attribute 3822s 3822s Exception#message 3822s - returns the class name if there is no message 3822s - returns the message passed to #initialize 3822s - calls #to_s on self 3822s 3822s Exception#message when #backtrace is redefined 3822s - returns the Exception message 3822s 3822s NameError.new 3822s - should take optional name argument 3822s - accepts a :receiver keyword argument 3822s 3822s NameError#dup 3822s - copies the name and receiver 3822s 3822s NameError#name 3822s - returns a method name as a symbol 3822s - returns a constant name as a symbol 3822s - returns a constant name without namespace as a symbol 3822s - returns a class variable name as a symbol 3822s - returns the first argument passed to the method when a NameError is raised from #instance_variable_get 3822s - returns the first argument passed to the method when a NameError is raised from #class_variable_get 3822s 3822s Exception.new 3822s - creates a new instance of Exception 3822s - sets the message of the Exception when passes a message 3822s - returns 'Exception' for message when no message given 3822s - returns the exception when it has a custom constructor 3822s 3822s NoMethodError.new 3822s - allows passing method args 3822s - does not require a name 3822s - accepts a :receiver keyword argument 3822s 3822s NoMethodError#args 3822s - returns an empty array if the caller method had no arguments 3822s - returns an array with the same elements as passed to the method 3822s 3822s NoMethodError#message 3822s - for an undefined method match /undefined method/ 3822s - for an protected method match /protected method/ 3822s - for private method match /private method/ 3822s - calls receiver.inspect only when calling Exception#message 3822s - fallbacks to a simpler representation of the receiver when receiver.inspect raises an exception 3822s - uses #name to display the receiver if it is a class or a module 3822s 3822s NoMethodError#dup 3822s - copies the name, arguments and receiver 3822s 3822s LocalJumpError#reason 3822s - returns 'return' for a return 3822s 3822s NameError#receiver 3822s - returns the object that raised the exception 3822s - returns the Object class when an undefined constant is called without namespace 3822s - returns a class when an undefined constant is called 3822s - returns the Object class when an undefined class variable is called 3822s - returns a class when an undefined class variable is called in a subclass' namespace 3822s - returns the receiver when raised from #instance_variable_get 3822s - returns the receiver when raised from #class_variable_get 3822s - raises an ArgumentError when the receiver is none 3822s 3822s StopIteration#result 3822s - returns the method-returned-object from an Enumerator 3822s 3822s Exception#set_backtrace 3822s - accepts an Array of Strings 3822s - allows the user to set the backtrace from a rescued exception 3822s - accepts an empty Array 3822s - accepts a String 3822s - accepts nil 3822s - raises a TypeError when passed a Symbol 3822s - raises a TypeError when the Array contains a Symbol 3822s - raises a TypeError when the array contains nil 3822s - raises a TypeError when the argument is a nested array 3822s 3822s SignalException.new 3822s - takes a signal number as the first argument 3822s - raises an exception with an invalid signal number 3822s - takes a signal name without SIG prefix as the first argument 3822s - takes a signal name with SIG prefix as the first argument 3822s - raises an exception with an invalid signal name 3822s - raises an exception with an invalid first argument type 3822s - takes a signal symbol without SIG prefix as the first argument 3822s - takes a signal symbol with SIG prefix as the first argument 3822s - raises an exception with an invalid signal name 3822s - takes an optional message argument with a signal number 3822s - raises an exception for an optional argument with a signal name 3822s 3822s SignalException 3825s - can be rescued 3825s 3825s StandardError 3825s - rescues StandardError 3825s - rescues subclass of StandardError 3825s - does not rescue superclass of StandardError 3825s 3825s SystemExit#status 3825s - returns the exit status 3825s 3825s SystemExit#success? 3825s - returns true if the process exited successfully 3825s - returns false if the process exited unsuccessfully 3825s 3825s SystemCallError 3825s - can be subclassed 3825s 3825s SystemCallError.new 3825s - requires at least one argument 3825s - accepts single Integer argument as errno 3825s - constructs a SystemCallError for an unknown error number 3825s - constructs the appropriate Errno class 3825s - accepts an optional custom message preceding the errno 3825s - returns an arity of -1 for the initialize method 3825s - converts to Integer if errno is a Float 3825s - converts to Integer if errno is a Complex convertible to Integer 3825s - raises TypeError if message is not a String 3825s - raises TypeError if errno is not an Integer 3825s - raises RangeError if errno is a Complex not convertible to Integer 3825s 3825s SystemCallError#errno 3825s - returns nil when no errno given 3825s - returns the errno given as optional argument to new 3825s 3825s SystemCallError#message 3825s - returns the default message when no message is given 3825s - returns the message given as an argument to new 3825s 3825s SystemCallError#backtrace 3825s - is nil if not raised 3825s 3825s SystemExit 3828s - sets the exit status and exits silently when raised 3831s - sets the exit status and exits silently when raised when subclassed 3831s 3831s SystemExit #initialize 3831s - accepts a status and message 3831s - accepts a status only 3831s - accepts a message only 3831s - accepts no arguments 3831s 3831s Exception#to_s 3831s - returns the self's name if no message is set 3831s - returns self's message if set 3831s - calls #to_s on the message 3831s 3831s NameError#to_s 3831s - raises its own message for an undefined variable 3831s - raises its own message for an undefined constant 3831s 3831s An Exception reaching the top level 3835s - is printed on STDERR 3838s - the Exception#cause is printed to STDERR with backtraces 3838s 3838s An Exception reaching the top level with a custom backtrace 3840s - is printed on STDERR 3840s 3840s An Exception reaching the top level kills all threads and fibers, ensure clauses are only run for threads current fibers, not for suspended fibers 3843s - with ensure on the root fiber 3843s 3843s UncaughtThrowError#tag 3843s - returns the object thrown 3843s 3843s FalseClass#& 3843s - returns false 3843s 3843s FalseClass#=== 3843s - returns true for false 3843s - returns false for non-false object 3843s 3843s FalseClass#dup 3843s - returns self 3843s 3843s FalseClass 3843s - .allocate raises a TypeError 3843s - .new is undefined 3843s 3843s FalseClass#inspect 3843s - returns the string 'false' 3843s 3843s FalseClass#| 3843s - returns false if other is nil or false, otherwise true 3843s 3843s FalseClass#to_s 3843s - returns the string 'false' 3843s - returns a frozen string 3843s - always returns the same string 3843s 3843s FalseClass#^ 3843s - returns false if other is nil or false, otherwise true 3843s 3843s Fiber.blocking? root Fiber of the main thread 3843s - returns false 3843s - returns false for blocking: false 3843s 3843s Fiber.blocking? root Fiber of a new thread 3843s - returns false 3843s - returns false for blocking: false 3843s 3843s Fiber.blocking? when fiber is blocking root Fiber of the main thread 3843s - returns 1 for blocking: true 3843s 3843s Fiber.blocking? when fiber is blocking root Fiber of a new thread 3843s - returns 1 for blocking: true 3843s 3843s Fiber#blocking? root Fiber of the main thread 3843s - returns false 3843s - returns false for blocking: false 3843s 3843s Fiber#blocking? root Fiber of a new thread 3843s - returns false 3843s - returns false for blocking: false 3843s 3843s Fiber#blocking? when fiber is blocking root Fiber of the main thread 3843s - returns true for blocking: true 3843s 3843s Fiber#blocking? when fiber is blocking root Fiber of a new thread 3843s - returns true for blocking: true 3843s 3843s Fiber.new 3843s - creates a fiber from the given block 3843s - creates a fiber from a subclass 3843s - raises an ArgumentError if called without a block 3843s - does not invoke the block 3843s - closes over lexical environments 3843s 3843s Fiber#raise 3843s - aborts execution 3843s - accepts an exception that implements to_hash 3843s - allows the message parameter to be a hash 3843s - allows extra keyword arguments for compatibility 3843s - raises RuntimeError if no exception class is given 3843s - raises a given Exception instance 3843s - raises a RuntimeError if string given 3843s - passes no arguments to the constructor when given only an exception class 3843s - raises a TypeError when passed a non-Exception object 3843s - raises a TypeError when passed true 3843s - raises a TypeError when passed false 3843s - raises a TypeError when passed nil 3843s - allows Exception, message, and backtrace parameters 3843s 3843s Fiber#raise 3843s - raises RuntimeError by default 3843s - raises FiberError if Fiber is dead 3843s - accepts error class 3843s - accepts error message 3843s - does not accept array of backtrace information only 3843s - does not accept integer 3843s - accepts error class with error message 3843s - accepts error class with with error message and backtrace information 3843s - does not accept only error message and backtrace information 3843s - raises a FiberError if invoked from a different Thread 3843s - kills Fiber 3843s - returns to calling fiber after raise 3843s 3843s Fiber#raise 3843s - transfers and raises on a transferring fiber 3843s 3843s Fiber#resume 3843s - can be invoked from the root Fiber 3843s - raises a FiberError if invoked from a different Thread 3843s - passes control to the beginning of the block on first invocation 3843s - returns the last value encountered on first invocation 3843s - runs until the end of the block 3843s - accepts any number of arguments 3843s - raises a FiberError if the Fiber is dead 3843s - raises a LocalJumpError if the block includes a return statement 3843s - raises a LocalJumpError if the block includes a break statement 3843s 3843s Fiber#resume 3843s - runs until Fiber.yield 3843s - resumes from the last call to Fiber.yield on subsequent invocations 3843s - sets the block parameters to its arguments on the first invocation 3843s - raises a FiberError if the Fiber tries to resume itself 3843s - returns control to the calling Fiber if called from one 3846s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/fiber/yield_spec.rb:14: warning: unused literal ignored 3846s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/fiber/yield_spec.rb:20: warning: unused literal ignored 3846s - executes the ensure clause 3846s 3846s Fiber.yield 3846s - passes control to the Fiber's caller 3846s - returns its arguments to the caller 3846s - returns nil to the caller if given no arguments 3846s - returns to the Fiber the value of the #resume call that invoked it 3846s - does not propagate or reraise a rescued exception 3846s - raises a FiberError if called from the root Fiber 3846s 3846s File.absolute_path? 3846s - returns true if it's an absolute pathname 3846s - returns false if it's a relative path 3846s - returns false if it's a tricky relative path 3846s - does not expand '~' to a home directory. 3846s - does not expand '~user' to a home directory. 3846s - calls #to_path on its argument 3846s - takes into consideration the platform's root 3846s 3846s File.absolute_path 3846s - returns the argument if it's an absolute pathname 3846s - resolves paths relative to the current working directory 3846s - does not expand '~' to a home directory. 3846s - does not expand '~' when given dir argument 3846s - does not expand '~user' to a home directory. 3846s - accepts a second argument of a directory from which to resolve the path 3846s - calls #to_path on its argument 3846s 3846s File.atime 3846s - returns the last access time for the named file as a Time object 3846s - returns the last access time for the named file with microseconds 3846s - raises an Errno::ENOENT exception if the file is not found 3846s - accepts an object that has a #to_path method 3846s 3846s File#atime 3846s - returns the last access time to self 3846s 3846s File.basename 3846s - returns the basename of a path (basic cases) 3846s - returns the last component of the filename 3846s - returns an string 3846s - returns the basename for unix format 3846s - returns the basename for edge cases 3846s - ignores a trailing directory separator 3846s - returns the basename for unix suffix 3846s - takes into consideration the platform path separator(s) 3846s - raises a TypeError if the arguments are not String types 3846s - accepts an object that has a #to_path method 3846s - raises an ArgumentError if passed more than two arguments 3846s - returns the extension for a multibyte filename 3846s - returns the basename with the same encoding as the original 3846s - returns a new unfrozen String 3846s 3846s File.blockdev? 3846s - returns true/false depending if the named file is a block device 3846s - accepts an object that has a #to_path method 3846s 3846s File.chardev? 3846s - returns true/false depending if the named file is a char device 3846s - accepts an object that has a #to_path method 3846s 3846s File#chmod 3846s - returns 0 if successful 3846s - raises RangeError with too large values 3846s - invokes to_int on non-integer argument 3846s - with '0222' makes file writable but not readable or executable 3846s - with '0444' makes file readable but not writable or executable 3846s - with '0666' makes file readable and writable but not executable 3846s - with '0111' makes file executable but not readable or writable 3846s - modifies the permission bits of the files specified 3846s 3846s File.chmod 3846s - returns the number of files modified 3846s - raises RangeError with too large values 3846s - accepts an object that has a #to_path method 3846s - throws a TypeError if the given path is not coercible into a string 3846s - raises an error for a non existent path 3846s - invokes to_int on non-integer argument 3846s - invokes to_str on non-string file names 3846s - with '0222' makes file writable but not readable or executable 3846s - with '0444' makes file readable but not writable or executable 3846s - with '0666' makes file readable and writable but not executable 3846s - with '0111' makes file executable but not readable or writable 3846s - modifies the permission bits of the files specified 3846s 3846s File.chown 3846s - returns the number of files processed 3846s - raises an error for a non existent path 3846s - accepts an object that has a #to_path method 3846s 3846s File#chown 3846s - returns 0 3846s 3846s File::Constants::APPEND 3846s - is defined 3846s 3846s File::Constants::CREAT 3846s - is defined 3846s 3846s File::Constants::EXCL 3846s - is defined 3846s 3846s File::Constants::FNM_CASEFOLD 3846s - is defined 3846s 3846s File::Constants::FNM_DOTMATCH 3846s - is defined 3846s 3846s File::Constants::FNM_EXTGLOB 3846s - is defined 3846s 3846s File::Constants::FNM_NOESCAPE 3846s - is defined 3846s 3846s File::Constants::FNM_PATHNAME 3846s - is defined 3846s 3846s File::Constants::FNM_SYSCASE 3846s - is defined 3846s 3846s File::Constants::LOCK_EX 3846s - is defined 3846s 3846s File::Constants::LOCK_NB 3846s - is defined 3846s 3846s File::Constants::LOCK_SH 3846s - is defined 3846s 3846s File::Constants::LOCK_UN 3846s - is defined 3846s 3846s File::Constants::NONBLOCK 3846s - is defined 3846s 3846s File::Constants::RDONLY 3846s - is defined 3846s 3846s File::Constants::RDWR 3846s - is defined 3846s 3846s File::Constants::TRUNC 3846s - is defined 3846s 3846s File::Constants::WRONLY 3846s - is defined 3846s 3846s File::Constants::NOCTTY 3846s - is defined 3846s 3846s File::Constants::SYNC 3846s - is defined 3846s 3846s File::Constants 3846s - matches mode constants 3846s - the separator constant 3846s - the open mode constants 3846s - lock mode constants 3846s 3846s File::Constants 3846s - File::RDONLY 3846s - File::WRONLY 3846s - File::CREAT 3846s - File::RDWR 3846s - File::APPEND 3846s - File::TRUNC 3846s - File::NOCTTY 3846s - File::NONBLOCK 3846s - File::LOCK_EX 3846s - File::LOCK_NB 3846s - File::LOCK_SH 3846s - File::LOCK_UN 3846s - File::SEPARATOR 3846s - File::Separator 3846s - File::PATH_SEPARATOR 3846s - File::SEPARATOR 3846s - File::PATH_SEPARATOR 3846s 3846s File.ctime 3846s - returns the change time for the named file (the time at which directory information about the file was changed, not the file itself). 3846s - 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. 3846s - accepts an object that has a #to_path method 3846s - raises an Errno::ENOENT exception if the file is not found 3846s 3846s File#ctime 3846s - returns the change time for the named file (the time at which directory information about the file was changed, not the file itself). 3846s 3846s File.delete 3846s - returns 0 when called without arguments 3846s - deletes a single file 3846s - deletes multiple files 3846s - raises a TypeError if not passed a String type 3846s - raises an Errno::ENOENT when the given file doesn't exist 3846s - coerces a given parameter into a string if possible 3846s - accepts an object that has a #to_path method 3846s 3846s File.directory? 3846s - returns true if the argument is a directory 3846s - returns false if the argument is not a directory 3846s - accepts an object that has a #to_path method 3846s - raises a TypeError when passed an Integer 3846s - raises a TypeError when passed nil 3846s 3846s File.directory? 3846s - returns false if the argument is an IO that's not a directory 3846s - returns true if the argument is an IO that is a directory 3846s - calls #to_io to convert a non-IO object 3846s 3846s File.dirname 3846s - returns all the components of filename except the last one 3846s - returns a String 3846s - does not modify its argument 3846s - ignores a trailing / 3846s - returns the return all the components of filename except the last one (unix format) 3846s - returns all the components of filename except the last one (edge cases on all platforms) 3846s - returns all the components of filename except the last one (edge cases on non-windows) 3846s - accepts an object that has a #to_path method 3846s - raises a TypeError if not passed a String type 3846s 3846s File.dirname when level is passed 3846s - returns all the components of filename except the last parts by the level 3846s - returns the same String if the level is 0 3846s - raises ArgumentError if the level is negative 3846s - returns '/' when level exceeds the number of segments in the path 3846s - calls #to_int if passed not numeric value 3846s 3846s File.empty? 3846s - returns true if the file is empty 3846s - returns false if the file is not empty 3846s - accepts an object that has a #to_path method 3846s - returns true for /dev/null 3846s - raises an ArgumentError if not passed one argument 3846s - raises a TypeError if not passed a String type 3846s - returns true inside a block opening a file if it is empty 3846s - returns true or false for a directory 3846s - returns false if the file does not exist 3846s 3846s File.executable_real? 3846s - returns true if the file its an executable 3846s - accepts an object that has a #to_path method 3846s - returns true if named file is readable by the real user id of the process, otherwise false 3846s - raises an ArgumentError if not passed one argument 3846s - raises a TypeError if not passed a String type 3846s - returns false if the file does not exist 3846s 3846s File.executable? 3846s - returns true if named file is executable by the effective user id of the process, otherwise false 3846s - returns true if the argument is an executable file 3846s - accepts an object that has a #to_path method 3846s - raises an ArgumentError if not passed one argument 3846s - raises a TypeError if not passed a String type 3846s - returns false if the file does not exist 3846s 3846s File.exist? 3846s - returns true if the file exist 3846s - raises an ArgumentError if not passed one argument 3846s - raises a TypeError if not passed a String type 3846s - accepts an object that has a #to_path method 3846s 3846s File.expand_path 3846s - converts a pathname to an absolute pathname 3846s - converts a pathname to an absolute pathname, Ruby-Talk:18512 3846s - keeps trailing dots on absolute pathname 3846s - converts a pathname to an absolute pathname, using a complete path 3846s - expand path with 3846s - expand_path for common unix path gives a full path 3846s - does not replace multiple '/' at the beginning of the path 3846s - replaces multiple '/' with a single '/' 3846s - raises an ArgumentError if the path is not valid 3846s - expands ~ENV['USER'] to the user's home directory 3846s - expands ~ENV['USER']/a to a in the user's home directory 3846s - does not expand ~ENV['USER'] when it's not at the start 3846s - expands ../foo with ~/dir as base dir to /path/to/user/home/foo 3846s - accepts objects that have a #to_path method 3847s - raises a TypeError if not passed a String type 3847s - expands /./dir to /dir 3847s - returns a String in the same encoding as the argument 3847s - expands a path when the default external encoding is BINARY 3847s - expands a path with multi-byte characters 3847s - does not modify the string argument 3847s - does not modify a HOME string argument 3847s - returns a String when passed a String subclass 3847s 3847s File.expand_path when HOME is set 3847s - converts a pathname to an absolute pathname, using ~ (home) as base 3847s - does not return a frozen string 3847s 3847s File.expand_path when HOME is not set 3847s - raises an ArgumentError when passed '~' if HOME == '' 3847s 3847s File.expand_path with a non-absolute HOME 3847s - raises an ArgumentError 3847s 3847s File.extname 3847s - returns the extension (the portion of file name in path after the period) 3847s - returns unfrozen strings 3847s - returns the extension for edge cases 3847s - returns only the last extension of a file with several dots 3847s - accepts an object that has a #to_path method 3847s - raises a TypeError if not passed a String type 3847s - raises an ArgumentError if not passed one argument 3847s - returns the extension for a multibyte filename 3847s 3847s File.extname for a filename ending with a dot 3847s - returns '.' 3847s 3847s File 3847s - includes Enumerable 3847s - includes File::Constants 3847s 3847s File.file? 3847s - returns true if the named file exists and is a regular file. 3847s - accepts an object that has a #to_path method 3847s - returns true if the null device exists and is a regular file. 3847s - raises an ArgumentError if not passed one argument 3847s - raises a TypeError if not passed a String type 3847s 3847s File#flock 3847s - exclusively locks a file 3847s - non-exclusively locks a file 3849s - returns false if trying to lock an exclusively locked file 3849s - returns 0 if trying to lock a non-exclusively locked file 3849s 3849s File.fnmatch 3849s - matches entire strings 3849s - does not match partial strings 3849s - does not support { } patterns by default 3849s - supports some { } patterns when File::FNM_EXTGLOB is passed 3849s - doesn't support some { } patterns even when File::FNM_EXTGLOB is passed 3849s - doesn't match an extra } when File::FNM_EXTGLOB is passed 3849s - matches when both FNM_EXTGLOB and FNM_PATHNAME are passed 3849s - matches a single character for each ? character 3849s - matches zero or more characters for each * character 3849s - does not match unterminated range of characters 3849s - does not match unterminated range of characters as a literal 3849s - matches ranges of characters using bracket expression (e.g. [a-z]) 3849s - matches ranges of characters using bracket expression, taking case into account 3849s - does not match characters outside of the range of the bracket expression 3849s - matches ranges of characters using exclusive bracket expression (e.g. [^t] or [!t]) 3849s - matches characters with a case sensitive comparison 3849s - matches characters with case insensitive comparison when flags includes FNM_CASEFOLD 3849s - doesn't match case sensitive characters on platforms with case sensitive paths, when flags include FNM_SYSCASE 3849s - matches wildcard with characters when flags includes FNM_PATHNAME 3849s - does not match '/' characters with ? or * when flags includes FNM_PATHNAME 3849s - does not match '/' characters inside bracket expressions when flags includes FNM_PATHNAME 3849s - matches literal ? or * in path when pattern includes \? or \* 3849s - matches literal character (e.g. 'a') in path when pattern includes escaped character (e.g. \a) 3849s - matches '\' characters in path when flags includes FNM_NOESACPE 3849s - escapes special characters inside bracket expression 3849s - does not match leading periods in filenames with wildcards by default 3849s - matches patterns with leading periods to dotfiles 3849s - does not match directories with leading periods by default with FNM_PATHNAME 3849s - matches leading periods in filenames when flags includes FNM_DOTMATCH 3849s - matches multiple directories with ** and * 3849s - matches multiple directories with ** when flags includes File::FNM_PATHNAME 3849s - returns false if '/' in pattern do not match '/' in path when flags includes FNM_PATHNAME 3849s - returns true if '/' in pattern match '/' in path when flags includes FNM_PATHNAME 3849s - has special handling for ./ when using * and FNM_PATHNAME 3849s - matches **/* with FNM_PATHNAME to recurse directories 3849s - matches ** with FNM_PATHNAME only in current directory 3849s - accepts an object that has a #to_path method 3849s - raises a TypeError if the first and second arguments are not string-like 3849s - raises a TypeError if the third argument is not an Integer 3849s - does not raise a TypeError if the third argument can be coerced to an Integer 3849s - matches multibyte characters 3849s 3849s File.fnmatch? 3849s - matches entire strings 3849s - does not match partial strings 3849s - does not support { } patterns by default 3849s - supports some { } patterns when File::FNM_EXTGLOB is passed 3849s - doesn't support some { } patterns even when File::FNM_EXTGLOB is passed 3849s - doesn't match an extra } when File::FNM_EXTGLOB is passed 3849s - matches when both FNM_EXTGLOB and FNM_PATHNAME are passed 3849s - matches a single character for each ? character 3849s - matches zero or more characters for each * character 3849s - does not match unterminated range of characters 3849s - does not match unterminated range of characters as a literal 3849s - matches ranges of characters using bracket expression (e.g. [a-z]) 3849s - matches ranges of characters using bracket expression, taking case into account 3849s - does not match characters outside of the range of the bracket expression 3849s - matches ranges of characters using exclusive bracket expression (e.g. [^t] or [!t]) 3849s - matches characters with a case sensitive comparison 3849s - matches characters with case insensitive comparison when flags includes FNM_CASEFOLD 3849s - doesn't match case sensitive characters on platforms with case sensitive paths, when flags include FNM_SYSCASE 3849s - matches wildcard with characters when flags includes FNM_PATHNAME 3849s - does not match '/' characters with ? or * when flags includes FNM_PATHNAME 3849s - does not match '/' characters inside bracket expressions when flags includes FNM_PATHNAME 3849s - matches literal ? or * in path when pattern includes \? or \* 3849s - matches literal character (e.g. 'a') in path when pattern includes escaped character (e.g. \a) 3849s - matches '\' characters in path when flags includes FNM_NOESACPE 3849s - escapes special characters inside bracket expression 3849s - does not match leading periods in filenames with wildcards by default 3849s - matches patterns with leading periods to dotfiles 3849s - does not match directories with leading periods by default with FNM_PATHNAME 3849s - matches leading periods in filenames when flags includes FNM_DOTMATCH 3849s - matches multiple directories with ** and * 3849s - matches multiple directories with ** when flags includes File::FNM_PATHNAME 3849s - returns false if '/' in pattern do not match '/' in path when flags includes FNM_PATHNAME 3849s - returns true if '/' in pattern match '/' in path when flags includes FNM_PATHNAME 3849s - has special handling for ./ when using * and FNM_PATHNAME 3849s - matches **/* with FNM_PATHNAME to recurse directories 3849s - matches ** with FNM_PATHNAME only in current directory 3849s - accepts an object that has a #to_path method 3849s - raises a TypeError if the first and second arguments are not string-like 3849s - raises a TypeError if the third argument is not an Integer 3849s - does not raise a TypeError if the third argument can be coerced to an Integer 3849s - matches multibyte characters 3849s 3849s File.ftype 3849s - raises ArgumentError if not given exactly one filename 3849s - raises Errno::ENOENT if the file is not valid 3849s - returns a String 3849s - returns 'file' when the file is a file 3849s - returns 'directory' when the file is a dir 3849s - uses to_path to convert arguments 3849s - returns 'blockSpecial' when the file is a block 3849s - returns 'characterSpecial' when the file is a char 3849s - returns 'link' when the file is a link 3849s - returns fifo when the file is a fifo 3849s - returns 'socket' when the file is a socket 3849s 3849s File.grpowned? 3849s - returns true if the file exist 3849s - accepts an object that has a #to_path method 3849s - returns false if file the does not exist 3849s 3849s File.identical? 3849s - returns true for a file and its link 3849s - returns false if any of the files doesn't exist 3849s - accepts an object that has a #to_path method 3849s - raises an ArgumentError if not passed two arguments 3849s - raises a TypeError if not passed String types 3849s - returns true if both named files are identical 3849s 3849s File#initialize 3849s - accepts encoding options in mode parameter 3849s - accepts encoding options as a hash parameter 3849s 3849s File#inspect 3849s - returns a String 3849s 3849s File.join 3849s - changes only boundaries separators 3849s - respects the given separator if only one part has a boundary separator 3849s - joins parts using File::SEPARATOR if there are no boundary separators 3849s - prefers the separator of the right part if both parts have separators 3849s - does not treat \ as a separator on non-Windows 3849s - returns an empty string when given no arguments 3849s - returns a duplicate string when given a single argument 3849s - supports any number of arguments 3849s - flattens nested arrays 3849s - inserts the separator in between empty strings and arrays 3849s - handles leading parts edge cases 3849s - handles trailing parts edge cases 3849s - handles middle parts edge cases 3849s - raises an ArgumentError if passed a recursive array 3849s - raises a TypeError exception when args are nil 3849s - calls #to_str 3849s - doesn't mutate the object when calling #to_str 3849s - calls #to_path 3849s 3849s File.link 3849s - link a file with another 3849s - raises an Errno::EEXIST if the target already exists 3849s - raises an ArgumentError if not passed two arguments 3849s - raises a TypeError if not passed String types 3849s 3849s File.lstat 3849s - returns a File::Stat object if the given file exists 3849s - returns a File::Stat object when called on an instance of File 3849s - accepts an object that has a #to_path method 3849s - raises an Errno::ENOENT if the file does not exist 3849s 3849s File.lstat 3849s - returns a File::Stat object with symlink properties for a symlink 3849s 3849s File#lstat 3849s - needs to be reviewed for spec completeness 3849s 3849s File.lutime 3849s - sets the access and modification time for a regular file 3849s - sets the access and modification time for a symlink 3849s 3849s File.mkfifo 3849s - creates a FIFO file at the passed path 3849s - creates a FIFO file with passed mode & ~umask 3849s - creates a FIFO file with a default mode of 0666 & ~umask 3849s - returns 0 after creating the FIFO file 3849s 3849s File.mkfifo when path passed responds to :to_path 3849s - creates a FIFO file at the path specified 3849s 3849s File.mkfifo when path passed is not a String value 3849s - raises a TypeError 3849s 3849s File.mkfifo when path does not exist 3849s - raises an Errno::ENOENT exception 3849s 3849s File.mtime 3849s - returns the modification Time of the file 3849s - returns the modification Time of the file with microseconds 3849s - raises an Errno::ENOENT exception if the file is not found 3849s 3849s File#mtime 3849s - returns the modification Time of the file 3849s 3849s File.new 3849s - returns a new File with mode string 3849s - returns a new File with mode num 3849s - returns a new File with modus num and permissions 3849s - creates the file and returns writable descriptor when called with 'w' mode and r-o permissions 3849s - opens the existing file, does not change permissions even when they are specified 3849s - returns a new File with modus fd 3849s - returns a new read-only File when mode is not specified 3849s - returns a new read-only File when mode is not specified but flags option is present 3849s - creates a new file when use File::EXCL mode 3849s - raises an Errno::EEXIST if the file exists when create a new file with File::CREAT|File::EXCL 3849s - creates a new file when use File::WRONLY|File::APPEND mode 3849s - returns a new File when use File::APPEND mode 3849s - returns a new File when use File::RDONLY|File::APPEND mode 3849s - returns a new File when use File::RDONLY|File::WRONLY mode 3849s - creates a new file when use File::WRONLY|File::TRUNC mode 3849s - returns a new read-only File when use File::RDONLY|File::CREAT mode 3849s - returns a new read-only File when use File::CREAT mode 3849s - coerces filename using to_str 3849s - coerces filename using #to_path 3849s - bitwise-ORs mode and flags option 3849s - does not use the given block and warns to use File::open 3849s - raises a TypeError if the first parameter can't be coerced to a string 3849s - raises a TypeError if the first parameter is nil 3849s - raises an Errno::EBADF if the first parameter is an invalid file descriptor 3849s - can't alter mode or permissions when opening a file 3849s - opens directories 3849s 3849s File::NULL 3849s - returns /dev/null as a string 3849s 3849s File.open 3849s - opens the file (basic case) 3849s - opens the file with unicode characters 3849s - opens a file when called with a block 3849s - opens with mode string 3849s - opens a file with mode string and block 3849s - opens a file with mode num 3849s - opens a file with mode num and block 3849s - opens a file with mode and permission as nil 3849s - opens the file when passed mode, num and permissions 3849s - opens the file when passed mode, num, permissions and block 3849s - creates the file and returns writable descriptor when called with 'w' mode and r-o permissions 3849s - opens the existing file, does not change permissions even when they are specified 3849s - creates a new write-only file when invoked with 'w' and '0222' 3849s - opens the file when call with fd 3849s - opens a file that no exists when use File::WRONLY mode 3849s - opens a file that no exists when use File::RDONLY mode 3849s - opens a file that no exists when use 'r' mode 3849s - opens a file that no exists when use File::EXCL mode 3849s - opens a file that no exists when use File::NONBLOCK mode 3849s - opens a file that no exists when use File::TRUNC mode 3849s - opens a file that no exists when use File::NOCTTY mode 3849s - opens a file that no exists when use File::CREAT mode 3849s - opens a file that no exists when use 'a' mode 3849s - opens a file that no exists when use 'w' mode 3849s - raises an ArgumentError exception when call with an unknown mode 3849s - can read in a block when call open with RDONLY mode 3849s - can read in a block when call open with 'r' mode 3849s - raises an IO exception when write in a block opened with RDONLY mode 3849s - raises an IO exception when write in a block opened with 'r' mode 3849s - can't write in a block when call open with File::WRONLY||File::RDONLY mode 3849s - can't read in a block when call open with File::WRONLY||File::RDONLY mode 3849s - can write in a block when call open with WRONLY mode 3849s - can write in a block when call open with 'w' mode 3849s - raises an IOError when read in a block opened with WRONLY mode 3849s - raises an IOError when read in a block opened with 'w' mode 3849s - raises an IOError when read in a block opened with 'a' mode 3849s - raises an IOError when read in a block opened with 'a' mode 3849s - raises an IOError when read in a block opened with 'a' mode 3849s - raises an IOError when read in a block opened with File::WRONLY|File::APPEND mode 3849s - raises an IOError when write in a block opened with File::RDONLY|File::APPEND mode 3849s - can read and write in a block when call open with RDWR mode 3849s - can't read in a block when call open with File::EXCL mode 3849s - can read in a block when call open with File::EXCL mode 3849s - can read and write in a block when call open with File::RDWR|File::EXCL mode 3849s - raises an Errno::EEXIST if the file exists when open with File::CREAT|File::EXCL 3849s - creates a new file when use File::WRONLY|File::APPEND mode 3849s - opens a file when use File::WRONLY|File::APPEND mode 3849s - raises an IOError if the file exists when open with File::RDONLY|File::APPEND 3849s - truncates the file when passed File::TRUNC mode 3849s - can't read in a block when call open with File::TRUNC mode 3849s - opens a file when use File::WRONLY|File::TRUNC mode 3849s - can't write in a block when call open with File::TRUNC mode 3849s - raises an Errno::EEXIST if the file exists when open with File::RDONLY|File::TRUNC 3849s - raises an Errno::EACCES when opening non-permitted file 3849s - raises an Errno::EACCES when opening read-only file 3849s - opens a file for binary read 3849s - opens a file for binary write 3849s - opens a file for read-write and truncate the file 3849s - opens a file for binary read-write starting at the beginning of the file 3849s - opens a file for binary read-write and truncate the file 3849s - creates an unnamed temporary file with File::TMPFILE 3849s - raises a TypeError if passed a filename that is not a String or Integer type 3849s - raises a SystemCallError if passed an invalid Integer type 3849s - raises an ArgumentError if passed the wrong number of arguments 3849s - raises an ArgumentError if passed an invalid string for mode 3849s - defaults external_encoding to BINARY for binary modes 3849s - uses the second argument as an options Hash 3849s - calls #to_hash to convert the second argument to a Hash 3849s - accepts extra flags as a keyword argument and combine with a string mode 3849s - accepts extra flags as a keyword argument and combine with an integer mode 3849s - raises ArgumentError if mixing :newline and binary mode 3849s 3849s File.open with a block 3849s - does not raise error when file is closed inside the block 3849s - invokes close on an opened file when exiting the block 3849s - propagates non-StandardErrors produced by close 3849s - propagates StandardErrors produced by close 3849s - does not propagate IOError with 'closed stream' message produced by close 3849s 3849s File.open on a FIFO 3849s - opens it as a normal file 3849s 3849s File.open 'x' flag 3849s - does nothing if the file doesn't exist 3849s - throws a Errno::EEXIST error if the file exists 3849s - can't be used with 'r' and 'a' flags 3849s 3849s File.open when passed a file descriptor 3849s - opens a file 3849s - opens a file when passed a block 3849s 3849s File.open 3849s - opens directories 3849s 3849s File.owned? 3849s - accepts an object that has a #to_path method 3849s 3849s File.owned? 3849s - returns false if file does not exist 3849s - returns true if the file exist and is owned by the user 3849s - returns false when the file is not owned by the user 3849s 3849s File#path 3849s - returns a String 3849s - returns a different String on every call 3849s - returns a mutable String 3849s - calls to_str on argument and returns exact value 3849s - does not normalise the path it returns 3849s - does not canonicalize the path it returns 3849s - does not absolute-ise the path it returns 3849s 3849s File.path 3849s - returns the string argument without any change 3849s - returns path for File argument 3849s - returns path for Pathname argument 3849s - calls #to_path for non-string argument and returns result 3849s 3849s File.pipe? 3849s - accepts an object that has a #to_path method 3849s 3849s File.pipe? 3849s - returns false if file does not exist 3849s - returns false if the file is not a pipe 3849s - returns true if the file is a pipe 3849s 3849s File#printf 3849s - does not raise error when passed more arguments than needed 3849s 3849s File#printf integer formats 3849s - converts argument into Integer with to_int 3849s - converts argument into Integer with to_i if to_int isn't available 3849s - converts String argument with Kernel#Integer 3849s - raises TypeError exception if cannot convert to Integer 3849s 3849s File#printf integer formats b 3849s - converts argument as a binary number 3849s - displays negative number as a two's complement prefixed with '..1' 3849s - collapse negative number representation if it equals 1 3849s 3849s File#printf integer formats B 3849s - converts argument as a binary number 3849s - displays negative number as a two's complement prefixed with '..1' 3849s - collapse negative number representation if it equals 1 3849s 3849s File#printf integer formats d 3849s - converts argument as a decimal number 3849s - works well with large numbers 3849s 3849s File#printf integer formats i 3849s - converts argument as a decimal number 3849s - works well with large numbers 3849s 3849s File#printf integer formats u 3849s - converts argument as a decimal number 3849s - works well with large numbers 3849s 3849s File#printf integer formats o 3849s - converts argument as an octal number 3849s - displays negative number as a two's complement prefixed with '..7' 3849s - collapse negative number representation if it equals 7 3849s 3849s File#printf integer formats x 3849s - converts argument as a hexadecimal number 3849s - displays negative number as a two's complement prefixed with '..f' 3849s - collapse negative number representation if it equals f 3849s 3849s File#printf integer formats X 3849s - converts argument as a hexadecimal number with uppercase letters 3849s - displays negative number as a two's complement prefixed with '..f' 3849s - collapse negative number representation if it equals F 3849s 3849s File#printf float formats 3849s - converts argument into Float 3849s - raises TypeError exception if cannot convert to Float 3849s 3849s File#printf float formats e 3849s - converts argument into exponential notation [-]d.dddddde[+-]dd 3849s - cuts excessive digits and keeps only 6 ones 3849s - rounds the last significant digit to the closest one 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats E 3849s - converts argument into exponential notation [-]d.dddddde[+-]dd 3849s - cuts excessive digits and keeps only 6 ones 3849s - rounds the last significant digit to the closest one 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats f 3849s - converts floating point argument as [-]ddd.dddddd 3849s - cuts excessive digits and keeps only 6 ones 3849s - rounds the last significant digit to the closest one 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats g 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats g the exponent is less than -4 3849s - converts a floating point number using exponential form 3849s 3849s File#printf float formats g the exponent is greater than or equal to the precision (6 by default) 3849s - converts a floating point number using exponential form 3849s 3849s File#printf float formats g otherwise 3849s - converts a floating point number in dd.dddd form 3849s - cuts excessive digits in fractional part and keeps only 4 ones 3849s - rounds the last significant digit to the closest one in fractional part 3849s - cuts fraction part to have only 6 digits at all 3849s 3849s File#printf float formats G 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats G the exponent is less than -4 3849s - converts a floating point number using exponential form 3849s 3849s File#printf float formats G the exponent is greater than or equal to the precision (6 by default) 3849s - converts a floating point number using exponential form 3849s 3849s File#printf float formats G otherwise 3849s - converts a floating point number in dd.dddd form 3849s - cuts excessive digits in fractional part and keeps only 4 ones 3849s - rounds the last significant digit to the closest one in fractional part 3849s - cuts fraction part to have only 6 digits at all 3849s 3849s File#printf float formats a 3849s - converts floating point argument as [-]0xh.hhhhp[+-]dd 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf float formats A 3849s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 3849s - displays Float::INFINITY as Inf 3849s - displays Float::NAN as NaN 3849s 3849s File#printf other formats c 3849s - displays character if argument is a numeric code of character 3849s - displays character if argument is a single character string 3849s - raises ArgumentError if argument is a string of several characters 3849s - raises ArgumentError if argument is an empty string 3849s - raises TypeError if argument is not String or Integer and cannot be converted to them 3849s - raises TypeError if argument is nil 3849s - tries to convert argument to String with to_str 3849s - tries to convert argument to Integer with to_int 3849s - raises TypeError if converting to String with to_str returns non-String 3849s - raises TypeError if converting to Integer with to_int returns non-Integer 3849s 3849s File#printf other formats p 3849s - displays argument.inspect value 3849s 3849s File#printf other formats s 3849s - substitute argument passes as a string 3849s - substitutes '' for nil 3849s - converts argument to string with to_s 3849s - does not try to convert with to_str 3849s - formats a partial substring without including omitted characters 3849s - formats string with precision 3849s - formats string with width 3849s - formats string with width and precision 3849s - formats nil with width 3849s - formats nil with precision 3849s - formats nil with width and precision 3849s - formats multibyte string with precision 3849s - preserves encoding of the format string 3849s 3849s File#printf other formats % 3849s - alone raises an ArgumentError 3849s - is escaped by % 3849s 3849s File#printf flags space applies to numeric formats bBdiouxXeEfgGaA 3850s - leaves a space at the start of non-negative numbers 3850s - does not leave a space at the start of negative numbers 3850s - prevents converting negative argument to two's complement form 3850s - treats several white spaces as one 3850s 3850s File#printf flags (digit)$ 3850s - specifies the absolute argument number for this field 3850s - raises exception if argument number is bigger than actual arguments list 3850s - ignores '-' sign 3850s - raises ArgumentError exception when absolute and relative argument numbers are mixed 3850s 3850s File#printf flags # applies to format o 3850s - increases the precision until the first digit will be `0' if it is not formatted as complements 3850s - does nothing for negative argument 3850s 3850s File#printf flags # applies to formats bBxX 3850s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 3850s - does nothing for zero argument 3850s 3850s File#printf flags # applies to formats aAeEfgG 3850s - forces a decimal point to be added, even if no digits follow 3850s - changes format from dd.dddd to exponential form for gG 3850s 3850s File#printf flags # applies to gG 3850s - does not remove trailing zeros 3850s 3850s File#printf flags + applies to numeric formats bBdiouxXaAeEfgG 3850s - adds a leading plus sign to non-negative numbers 3850s - does not use two's complement form for negative numbers for formats bBoxX 3850s 3850s File#printf flags - 3850s - left-justifies the result of conversion if width is specified 3850s 3850s File#printf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 3850s - pads with zeros, not spaces 3850s - uses radix-1 when displays negative argument as a two's complement 3850s 3850s File#printf flags * 3850s - uses the previous argument as the field width 3850s - left-justifies the result if width is negative 3850s - uses the specified argument as the width if * is followed by a number and $ 3850s - left-justifies the result if specified with $ argument is negative 3850s - raises ArgumentError when is mixed with width 3850s 3850s File#printf width 3850s - specifies the minimum number of characters that will be written to the result 3850s - is ignored if argument's actual length is greater 3850s 3850s File#printf precision integer types 3850s - controls the number of decimal places displayed 3850s 3850s File#printf precision float types 3850s - controls the number of decimal places displayed in fraction part 3850s - does not affect G format 3850s 3850s File#printf precision string formats 3850s - determines the maximum number of characters to be copied from the string 3850s 3850s File#printf reference by name %s style 3850s - uses value passed in a hash argument 3850s - supports flags, width, precision and type 3850s - allows to place name in any position 3850s - cannot be mixed with unnamed style 3850s 3850s File#printf reference by name %{name} style 3850s - uses value passed in a hash argument 3850s - does not support type style 3850s - supports flags, width and precision 3850s - cannot be mixed with unnamed style 3850s - raises KeyError when there is no matching key 3850s - converts value to String with to_s 3850s 3850s File#printf faulty key 3850s - raises a KeyError 3850s - sets the Hash as the receiver of KeyError 3850s - sets the unmatched key as the key of KeyError 3850s 3850s File.read 3850s - raises an Errno::EISDIR when passed a path that is a directory 3850s 3850s File.readable_real? 3850s - returns true if named file is readable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s File.readable? 3850s - returns true if named file is readable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s File.readlink with absolute paths 3850s - returns the name of the file referenced by the given link 3850s - returns the name of the file referenced by the given link when the file does not exist 3850s - raises an Errno::ENOENT if there is no such file 3850s - raises an Errno::EINVAL if called with a normal file 3850s 3850s File.readlink with paths containing unicode characters 3850s - returns the name of the file referenced by the given link 3850s 3850s File.readlink when changing the working directory 3850s - returns the name of the file referenced by the given link 3850s - returns the name of the file referenced by the given link when the file does not exist 3850s 3850s File.realdirpath 3850s - returns '/' when passed '/' 3850s - returns the real (absolute) pathname not containing symlinks 3850s - uses base directory for interpreting relative pathname 3850s - uses current directory for interpreting relative pathname 3850s - uses link directory for expanding relative links 3850s - returns the real (absolute) pathname if the file is absent 3850s 3850s File.realpath 3850s - returns '/' when passed '/' 3850s - returns the real (absolute) pathname not containing symlinks 3850s - uses base directory for interpreting relative pathname 3850s - uses current directory for interpreting relative pathname 3850s - uses link directory for expanding relative links 3850s - removes the file element when going one level up 3850s - raises Errno::ENOENT if the file is absent 3850s - raises Errno::ENOENT if the symlink points to an absent file 3850s - converts the argument with #to_path 3850s 3850s File.rename 3850s - renames a file 3850s - raises an Errno::ENOENT if the source does not exist 3850s - raises an ArgumentError if not passed two arguments 3850s - raises a TypeError if not passed String types 3850s 3850s File#reopen 3850s - resets the stream to a new file path 3850s - calls #to_path to convert an Object 3850s 3850s File.setgid? 3850s - returns false if the file was just made 3850s - returns false if the file does not exist 3850s 3850s File.setuid? 3850s - returns false if the file was just made 3850s - returns false if the file does not exist 3850s - returns true when the gid bit is set 3850s 3850s File.size? 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s 3850s File.size? 3850s - calls #to_io to convert the argument to an IO 3850s 3850s File.size? 3850s - returns nil if file_name doesn't exist or has 0 size 3850s 3850s File.size? 3850s - returns nil if file_name is empty 3850s 3850s File.size? 3850s - accepts a File argument 3850s 3850s File.size 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s 3850s File.size 3850s - calls #to_io to convert the argument to an IO 3850s 3850s File.size 3850s - raises an error if file_name doesn't exist 3850s 3850s File.size 3850s - returns 0 if the file is empty 3850s 3850s File.size 3850s - accepts a File argument 3850s 3850s File#size 3850s - is an instance method 3850s - returns the file's size as an Integer 3850s - returns the file's size in bytes 3850s - returns the cached size of the file if subsequently deleted 3850s - returns the file's current size even if modified 3850s - raises an IOError on a closed file 3850s - follows symlinks if necessary 3850s 3850s File#size for an empty file 3850s - returns 0 3850s 3850s File.socket? 3850s - accepts an object that has a #to_path method 3850s 3850s File.socket? 3850s - returns false if file does not exist 3850s - returns false if the file is not a socket 3850s 3850s File.socket? 3850s - returns true if the file is a socket 3850s 3850s File.split 3850s - splits the string at the last '/' when the last component does not have an extension 3850s - splits the string at the last '/' when the last component has an extension 3850s - splits an empty string into a '.' and an empty string 3850s - collapses multiple '/' characters and strips trailing ones 3850s - does not split a string that contains '\' 3850s - raises an ArgumentError when not passed a single argument 3850s - raises a TypeError if the argument is not a String type 3850s - coerces the argument with to_str if it is not a String type 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#atime 3850s - returns the atime of a File::Stat object 3850s 3850s File::Stat#birthtime 3850s - raises an NotImplementedError 3850s 3850s File::Stat#blksize 3850s - returns the blksize of a File::Stat object 3850s 3850s File::Stat#blockdev? 3850s - returns true/false depending if the named file is a block device 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#blocks 3850s - returns a non-negative integer 3850s 3850s File::Stat#chardev? 3850s - returns true/false depending if the named file is a char device 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#<=> 3850s - is able to compare files by the same modification times 3850s - is able to compare files by different modification times 3850s - includes Comparable and #== shows mtime equality between two File::Stat objects 3850s 3850s File::Stat#ctime 3850s - returns the ctime of a File::Stat object 3850s 3850s File::Stat#dev_major 3850s - returns the major part of File::Stat#dev 3850s 3850s File::Stat#dev_minor 3850s - returns the minor part of File::Stat#dev 3850s 3850s File::Stat#dev 3850s - returns the number of the device on which the file exists 3850s 3850s File::Stat#directory? 3850s - returns true if the argument is a directory 3850s - returns false if the argument is not a directory 3850s - accepts an object that has a #to_path method 3850s - raises a TypeError when passed an Integer 3850s - raises a TypeError when passed nil 3850s 3850s File::Stat#executable_real? 3850s - returns true if the file its an executable 3850s - accepts an object that has a #to_path method 3850s - returns true if named file is readable by the real user id of the process, otherwise false 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s 3850s File::Stat#executable? 3850s - returns true if named file is executable by the effective user id of the process, otherwise false 3850s - returns true if the argument is an executable file 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s 3850s File::Stat#file? 3850s - returns true if the named file exists and is a regular file. 3850s - accepts an object that has a #to_path method 3850s - returns true if the null device exists and is a regular file. 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s 3850s File::Stat#ftype 3850s - returns a String 3850s - returns 'file' when the file is a file 3850s - returns 'directory' when the file is a dir 3850s - returns 'characterSpecial' when the file is a char 3850s - returns 'blockSpecial' when the file is a block 3850s - returns 'link' when the file is a link 3850s - returns fifo when the file is a fifo 3850s - returns 'socket' when the file is a socket 3850s 3850s File::Stat#gid 3850s - returns the group owner attribute of a File::Stat object 3850s 3850s File::Stat#grpowned? 3850s - returns true if the file exist 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#ino 3850s - returns the ino of a File::Stat object 3850s 3850s File::Stat#inspect 3850s - produces a nicely formatted description of a File::Stat object 3850s 3850s File::Stat#mode 3850s - returns the mode of a File::Stat object 3850s 3850s File::Stat#mtime 3850s - returns the mtime of a File::Stat object 3850s 3850s File::Stat#initialize 3850s - raises an exception if the file doesn't exist 3850s - creates a File::Stat object for the given file 3850s - calls #to_path on non-String arguments 3850s 3850s File::Stat#nlink 3850s - returns the number of links to a file 3850s 3850s File::Stat#owned? 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#owned? 3850s - returns true if the file is owned by the user 3850s - returns false if the file is not owned by the user 3850s 3850s File::Stat#pipe? 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#pipe? 3850s - returns false if the file is not a pipe 3850s - returns true if the file is a pipe 3850s 3850s File::Stat#rdev_major 3850s - returns the major part of File::Stat#rdev 3850s 3850s File::Stat#rdev_minor 3850s - returns the minor part of File::Stat#rdev 3850s 3850s File::Stat#rdev 3850s - returns the number of the device this file represents which the file exists 3850s 3850s File::Stat#readable_real? 3850s - returns true if named file is readable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#readable? 3850s - returns true if named file is readable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat.size? 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s - returns nil if file_name is empty 3850s 3850s File::Stat.size 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s - returns 0 if the file is empty 3850s 3850s File::Stat#size 3850s - needs to be reviewed for spec completeness 3850s 3850s File::Stat#size? 3850s - needs to be reviewed for spec completeness 3850s 3850s File::Stat#socket? 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#sticky? 3850s - returns true if the named file has the sticky bit, otherwise false 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#symlink? 3850s - returns true if the file is a link 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#uid 3850s - returns the owner attribute of a File::Stat object 3850s 3850s File::Stat.world_readable? 3850s - returns nil if the file is chmod 600 3850s - returns nil if the file is chmod 000 3850s - returns nil if the file is chmod 700 3850s - returns an Integer if the file is chmod 644 3850s - returns an Integer if the file is a directory and chmod 644 3850s - coerces the argument with #to_path 3850s 3850s File::Stat#world_readable? 3850s - needs to be reviewed for spec completeness 3850s 3850s File::Stat.world_writable? 3850s - returns nil if the file is chmod 600 3850s - returns nil if the file is chmod 000 3850s - returns nil if the file is chmod 700 3850s - returns an Integer if the file is chmod 777 3850s - returns an Integer if the file is a directory and chmod 777 3850s - coerces the argument with #to_path 3850s 3850s File::Stat#world_writable? 3850s - needs to be reviewed for spec completeness 3850s 3850s File::Stat#writable_real? 3850s - returns true if named file is writable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s 3850s File::Stat#writable? 3850s - returns true if named file is writable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s 3850s File::Stat#zero? 3850s - returns true if the file is empty 3850s - returns false if the file is not empty 3850s - accepts an object that has a #to_path method 3850s - returns true for /dev/null 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns true inside a block opening a file if it is empty 3850s - returns true or false for a directory 3850s 3850s File.stat 3850s - returns a File::Stat object if the given file exists 3850s - returns a File::Stat object when called on an instance of File 3850s - accepts an object that has a #to_path method 3850s - raises an Errno::ENOENT if the file does not exist 3850s 3850s File.stat 3850s - returns information for a file that has been deleted but is still open 3850s - returns a File::Stat object with file properties for a symlink 3850s 3850s File.sticky? 3850s - returns true if the named file has the sticky bit, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file dies not exist 3850s 3850s File.sticky? 3850s - returns false if file does not exist 3850s - returns false if the file has not sticky bit set 3850s - returns true if the file has sticky bit set 3850s 3850s File.symlink 3850s - creates a symlink between a source and target file 3850s - creates a symbolic link 3850s - accepts args that have #to_path methods 3850s - raises an Errno::EEXIST if the target already exists 3850s - raises an ArgumentError if not called with two arguments 3850s - raises a TypeError if not called with String types 3850s 3850s File.symlink? 3850s - returns true if the file is a link 3850s - accepts an object that has a #to_path method 3850s 3850s File.symlink? 3850s - returns false if the file does not exist 3850s 3850s File#to_path 3850s - returns a String 3850s - returns a different String on every call 3850s - returns a mutable String 3850s - calls to_str on argument and returns exact value 3850s - does not normalise the path it returns 3850s - does not canonicalize the path it returns 3850s - does not absolute-ise the path it returns 3850s 3850s File.truncate 3850s - truncates a file 3850s - truncate a file size to 0 3850s - truncate a file size to 5 3850s - truncates to a larger file size than the original file 3850s - truncates to the same size as the original file 3850s - raises an Errno::ENOENT if the file does not exist 3850s - raises an ArgumentError if not passed two arguments 3850s - raises an Errno::EINVAL if the length argument is not valid 3850s - raises a TypeError if not passed a String type for the first argument 3850s - raises a TypeError if not passed an Integer type for the second argument 3850s - accepts an object that has a #to_path method 3850s 3850s File#truncate 3850s - does not move the file write pointer to the specified byte offset 3850s - does not move the file read pointer to the specified byte offset 3850s - truncates a file 3850s - truncates a file size to 0 3850s - truncates a file size to 5 3850s - truncates a file to a larger size than the original file 3850s - truncates a file to the same size as the original file 3850s - raises an ArgumentError if not passed one argument 3850s - raises an Errno::EINVAL if the length argument is not valid 3850s - raises an IOError if file is closed 3850s - raises an IOError if file is not opened for writing 3850s - raises a TypeError if not passed an Integer type for the for the argument 3850s 3850s File.umask 3850s - returns an Integer 3850s - returns the current umask value for the process 3850s - invokes to_int on non-integer argument 3850s - raises RangeError with too large values 3850s - raises ArgumentError when more than one argument is provided 3850s 3850s File.unlink 3850s - returns 0 when called without arguments 3850s - deletes a single file 3850s - deletes multiple files 3850s - raises a TypeError if not passed a String type 3850s - raises an Errno::ENOENT when the given file doesn't exist 3850s - coerces a given parameter into a string if possible 3850s - accepts an object that has a #to_path method 3850s 3850s File.utime 3850s - sets the access and modification time of each file 3850s - uses the current times if two nil values are passed 3850s - accepts an object that has a #to_path method 3850s - accepts numeric atime and mtime arguments 3850s - may set nanosecond precision 3850s - returns the number of filenames in the arguments 3850s 3850s File.world_readable? 3850s - returns nil if the file is chmod 600 3850s - returns nil if the file is chmod 000 3850s - returns nil if the file is chmod 700 3850s - returns an Integer if the file is chmod 644 3850s - returns an Integer if the file is a directory and chmod 644 3850s - coerces the argument with #to_path 3850s - returns nil if the file does not exist 3850s 3850s File.world_writable? 3850s - returns nil if the file is chmod 600 3850s - returns nil if the file is chmod 000 3850s - returns nil if the file is chmod 700 3850s - returns an Integer if the file is chmod 777 3850s - returns an Integer if the file is a directory and chmod 777 3850s - coerces the argument with #to_path 3850s - returns nil if the file does not exist 3850s 3850s File.writable_real? 3850s - returns true if named file is writable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns false if the file does not exist 3850s 3850s File.writable? 3850s - returns true if named file is writable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s File.zero? 3850s - returns true if the file is empty 3850s - returns false if the file is not empty 3850s - accepts an object that has a #to_path method 3850s - returns true for /dev/null 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns true inside a block opening a file if it is empty 3850s - returns true or false for a directory 3850s - returns false if the file does not exist 3850s 3850s FileTest.blockdev? 3850s - returns true/false depending if the named file is a block device 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.chardev? 3850s - returns true/false depending if the named file is a char device 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.directory? 3850s - returns true if the argument is a directory 3850s - returns false if the argument is not a directory 3850s - accepts an object that has a #to_path method 3850s - raises a TypeError when passed an Integer 3850s - raises a TypeError when passed nil 3850s 3850s FileTest.directory? 3850s - returns false if the argument is an IO that's not a directory 3850s - returns true if the argument is an IO that is a directory 3850s - calls #to_io to convert a non-IO object 3850s 3850s FileTest.executable_real? 3850s - returns true if the file its an executable 3850s - accepts an object that has a #to_path method 3850s - returns true if named file is readable by the real user id of the process, otherwise false 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns false if the file does not exist 3850s 3850s FileTest.executable? 3850s - returns true if named file is executable by the effective user id of the process, otherwise false 3850s - returns true if the argument is an executable file 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns false if the file does not exist 3850s 3850s FileTest.exist? 3850s - returns true if the file exist 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - accepts an object that has a #to_path method 3850s 3850s File.file? 3850s - returns true if the named file exists and is a regular file. 3850s - accepts an object that has a #to_path method 3850s - returns true if the null device exists and is a regular file. 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s 3850s FileTest.file? 3850s - needs to be reviewed for spec completeness 3850s 3850s FileTest.grpowned? 3850s - returns true if the file exist 3850s - accepts an object that has a #to_path method 3850s - returns false if the file doesn't exist 3850s 3850s FileTest.identical? 3850s - returns true for a file and its link 3850s - returns false if any of the files doesn't exist 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed two arguments 3850s - raises a TypeError if not passed String types 3850s - returns true if both named files are identical 3850s 3850s FileTest.owned? 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.pipe? 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.readable_real? 3850s - returns true if named file is readable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s FileTest.readable? 3850s - returns true if named file is readable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s FileTest.size? 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.size? 3850s - returns nil if file_name doesn't exist or has 0 size 3850s 3850s FileTest.size? 3850s - returns nil if file_name is empty 3850s 3850s FileTest.size? 3850s - accepts a File argument 3850s 3850s FileTest.size 3850s - returns the size of the file if it exists and is not empty 3850s - accepts a String-like (to_str) parameter 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.size 3850s - raises an error if file_name doesn't exist 3850s 3850s FileTest.size 3850s - returns 0 if the file is empty 3850s 3850s FileTest.size 3850s - accepts a File argument 3850s 3850s FileTest.socket? 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.sticky? 3850s - returns true if the named file has the sticky bit, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file dies not exist 3850s 3850s FileTest.symlink? 3850s - returns true if the file is a link 3850s - accepts an object that has a #to_path method 3850s 3850s FileTest.symlink? 3850s - returns false if the file does not exist 3850s 3850s FileTest.world_readable? 3850s - needs to be reviewed for spec completeness 3850s 3850s FileTest.world_writable? 3850s - needs to be reviewed for spec completeness 3850s 3850s FileTest.writable_real? 3850s - returns true if named file is writable by the real user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns false if the file does not exist 3850s 3850s FileTest.writable? 3850s - returns true if named file is writable by the effective user id of the process, otherwise false 3850s - accepts an object that has a #to_path method 3850s - returns false if the file does not exist 3850s 3850s FileTest.zero? 3850s - returns true if the file is empty 3850s - returns false if the file is not empty 3850s - accepts an object that has a #to_path method 3850s - returns true for /dev/null 3850s - raises an ArgumentError if not passed one argument 3850s - raises a TypeError if not passed a String type 3850s - returns true inside a block opening a file if it is empty 3850s - returns true or false for a directory 3850s - returns false if the file does not exist 3850s 3850s Float#abs 3850s - returns the absolute value 3850s - returns 0.0 if -0.0 3850s - returns Infinity if -Infinity 3850s - returns NaN if NaN 3850s 3850s Float#angle 3850s - returns NaN if NaN 3850s - returns self if NaN 3850s - returns 0 if positive 3850s - returns 0 if +0.0 3850s - returns 0 if +Infinity 3850s - returns Pi if negative 3850s - returns Pi if -0.0 3850s - returns Pi if -Infinity 3850s 3850s Float#arg 3850s - returns NaN if NaN 3850s - returns self if NaN 3850s - returns 0 if positive 3850s - returns 0 if +0.0 3850s - returns 0 if +Infinity 3850s - returns Pi if negative 3850s - returns Pi if -0.0 3850s - returns Pi if -Infinity 3850s 3850s Float#=== 3850s - returns true if self has the same value as other 3850s - calls 'other == self' if coercion fails 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#ceil 3850s - returns the smallest Integer greater than or equal to self 3850s - returns the smallest number greater than or equal to self with an optionally given precision 3850s 3850s Float#coerce 3850s - returns [other, self] both as Floats 3850s 3850s Float#<=> 3850s - returns -1, 0, 1 when self is less than, equal, or greater than other 3850s - returns nil if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s - returns nil when the given argument is not a Float 3850s - compares using #coerce when argument is not a Float 3850s - raises TypeError when #coerce misbehaves 3850s - returns the correct result when one side is infinite 3850s - returns 0 when self is Infinity and other other is infinite?=1 3850s - returns 1 when self is Infinity and other is infinite?=-1 3850s - returns 1 when self is Infinity and other is infinite?=nil (which means finite) 3850s - returns 0 for -0.0 and 0.0 3850s - returns 0 for -0.0 and 0 3850s - returns 0 for 0.0 and 0 3850s 3850s Float constant 3850s - DIG is 15 3850s - EPSILON is 2.220446049250313e-16 3850s - MANT_DIG is 53 3850s - MAX_10_EXP is 308 3850s - MIN_10_EXP is -308 3850s - MAX_EXP is 1024 3850s - MIN_EXP is -1021 3850s - MAX is 1.7976931348623157e+308 3850s - MIN is 2.2250738585072014e-308 3850s - RADIX is 2 3850s - INFINITY is the positive infinity 3850s - NAN is 'not a number' 3850s 3850s Float#denominator 3850s - returns an Integer 3850s - converts self to a Rational and returns the denominator 3850s - returns 1 for NaN and Infinity 3850s 3850s Float#/ 3850s - does not rescue exception raised in other#coerce 3850s - returns self divided by other 3850s - properly coerces objects 3850s - returns +Infinity when dividing non-zero by zero of the same sign 3850s - returns -Infinity when dividing non-zero by zero of opposite sign 3850s - returns NaN when dividing zero by zero 3850s - raises a TypeError when given a non-Numeric 3850s - divides correctly by Rational numbers 3850s 3850s Float#divmod 3850s - returns an [quotient, modulus] from dividing self by other 3850s - raises a FloatDomainError if self is NaN 3850s - raises a FloatDomainError if other is NaN 3850s - raises a FloatDomainError if self is Infinity 3850s - raises a ZeroDivisionError if other is zero 3850s - returns the correct [quotient, modulus] even for large quotient 3850s 3850s Float#dup 3850s - returns self 3850s 3850s Float#eql? 3850s - returns true if other is a Float equal to self 3850s - returns false if other is a Float not equal to self 3850s - returns false if other is not a Float 3850s 3850s Float#== 3850s - returns true if self has the same value as other 3850s - calls 'other == self' if coercion fails 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#** 3850s - returns self raise to the other power 3850s - returns a complex number when negative and raised to a fractional power 3850s 3850s Float#fdiv 3850s - performs floating-point division between self and an Integer 3850s - performs floating-point division between self and an Integer 3850s - performs floating-point division between self and a Float 3850s - returns NaN when the argument is NaN 3850s - returns Infinity when the argument is 0.0 3850s - returns -Infinity when the argument is 0.0 and self is negative 3850s - returns Infinity when the argument is 0 3850s - returns -Infinity when the argument is 0 and self is negative 3850s - returns 0.0 when the argument is Infinity 3850s - returns -0.0 when the argument is -Infinity 3850s - performs floating-point division between self and a Rational 3850s - performs floating-point division between self and a Complex 3850s - raises a TypeError when argument isn't numeric 3850s - raises an ArgumentError when passed multiple arguments 3850s 3850s Float#finite? 3850s - returns true for finite values 3850s - returns false for positive infinity 3850s - returns false for negative infinity 3850s - returns false for NaN 3850s 3850s Float 3850s - includes Comparable 3850s - .allocate raises a TypeError 3850s - .new is undefined 3850s 3850s Float#floor 3850s - returns the largest Integer less than or equal to self 3850s - returns the largest number less than or equal to self with an optionally given precision 3850s 3850s Float#> 3850s - does not rescue exception raised in other#coerce 3850s - returns true if self is greater than other 3850s - raises an ArgumentError when given a non-Numeric 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#>= 3850s - does not rescue exception raised in other#coerce 3850s - returns true if self is greater than or equal to other 3850s - raises an ArgumentError when given a non-Numeric 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#hash 3850s - is provided 3850s - is stable 3850s 3850s Float#infinite? 3850s - returns nil for finite values 3850s - returns 1 for positive infinity 3850s - returns -1 for negative infinity 3850s - returns nil for NaN 3850s 3850s Float#inspect 3850s - returns 'NaN' for NaN 3850s - returns 'Infinity' for positive infinity 3850s - returns '-Infinity' for negative infinity 3850s - returns '0.0' for 0.0 3850s - emits '-' for -0.0 3850s - emits a '-' for negative values 3850s - emits a trailing '.0' for a whole number 3850s - emits a trailing '.0' for the mantissa in e format 3850s - uses non-e format for a positive value with fractional part having 5 significant figures 3850s - uses non-e format for a negative value with fractional part having 5 significant figures 3850s - uses e format for a positive value with fractional part having 6 significant figures 3850s - uses e format for a negative value with fractional part having 6 significant figures 3850s - uses non-e format for a positive value with whole part having 15 significant figures 3850s - uses non-e format for a negative value with whole part having 15 significant figures 3850s - uses non-e format for a positive value with whole part having 16 significant figures 3850s - uses non-e format for a negative value with whole part having 16 significant figures 3850s - outputs the minimal, unique form necessary to recreate the value 3850s - outputs the minimal, unique form to represent the value 3850s 3850s Float#inspect matches 3850s - random examples in all ranges 3850s - random examples in human ranges 3850s - random values from divisions 3850s 3850s Float#inspect encoding 3850s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 3850s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 3850s 3850s Float#< 3850s - does not rescue exception raised in other#coerce 3850s - returns true if self is less than other 3850s - raises an ArgumentError when given a non-Numeric 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#<= 3850s - does not rescue exception raised in other#coerce 3850s - returns true if self is less than or equal to other 3850s - raises an ArgumentError when given a non-Numeric 3850s - returns false if one side is NaN 3850s - handles positive infinity 3850s - handles negative infinity 3850s 3850s Float#magnitude 3850s - returns the absolute value 3850s - returns 0.0 if -0.0 3850s - returns Infinity if -Infinity 3850s - returns NaN if NaN 3850s 3850s Float#- 3850s - does not rescue exception raised in other#coerce 3850s - returns self minus other 3850s 3850s Float#% 3850s - returns self modulo other 3850s - returns self when modulus is +Infinity 3850s - returns -Infinity when modulus is -Infinity 3850s - returns NaN when called on NaN or Infinities 3850s - returns NaN when modulus is NaN 3850s - returns -0.0 when called on -0.0 with a non zero modulus 3850s - tries to coerce the modulus 3850s - raises a ZeroDivisionError if other is zero 3850s 3850s Float#modulo 3850s - returns self modulo other 3850s - returns self when modulus is +Infinity 3850s - returns -Infinity when modulus is -Infinity 3850s - returns NaN when called on NaN or Infinities 3850s - returns NaN when modulus is NaN 3850s - returns -0.0 when called on -0.0 with a non zero modulus 3850s - tries to coerce the modulus 3850s - raises a ZeroDivisionError if other is zero 3850s 3850s Float#* 3850s - does not rescue exception raised in other#coerce 3850s - returns self multiplied by other 3850s - raises a TypeError when given a non-Numeric 3850s 3850s Float#nan? 3850s - returns true if self is not a valid IEEE floating-point number 3850s 3850s Float#negative? on positive numbers 3850s - returns false 3850s 3850s Float#negative? on zero 3850s - returns false 3850s 3850s Float#negative? on negative zero 3850s - returns false 3850s 3850s Float#negative? on negative numbers 3850s - returns true 3850s 3850s Float#negative? on NaN 3850s - returns false 3850s 3850s Float#next_float 3850s - returns a float the smallest possible step greater than the receiver 3850s - returns Float::INFINITY for Float::INFINITY 3850s - steps directly between MAX and INFINITY 3850s - steps directly between 1.0 and 1.0 + EPSILON 3850s - steps directly between -1.0 and -1.0 + EPSILON/2 3850s - reverses the effect of prev_float for all Floats except INFINITY and +0.0 3850s - returns negative zero when stepping upward from just below zero 3850s - gives the same result for -0.0 as for +0.0 3850s - returns NAN if NAN was the receiver 3850s 3850s Float#numerator 3850s - converts self to a Rational object then returns its numerator 3850s - returns 0 for 0.0 3850s - returns NaN for NaN 3850s - returns Infinity for Infinity 3850s - returns -Infinity for -Infinity 3850s 3850s Float#phase 3850s - returns NaN if NaN 3850s - returns self if NaN 3850s - returns 0 if positive 3850s - returns 0 if +0.0 3850s - returns 0 if +Infinity 3850s - returns Pi if negative 3850s - returns Pi if -0.0 3850s - returns Pi if -Infinity 3850s 3850s Float#+ 3850s - does not rescue exception raised in other#coerce 3850s - returns self plus other 3850s 3850s Float#positive? on positive numbers 3850s - returns true 3850s 3850s Float#positive? on zero 3850s - returns false 3850s 3850s Float#positive? on negative zero 3850s - returns false 3850s 3850s Float#positive? on negative numbers 3850s - returns false 3850s 3850s Float#positive? on NaN 3850s - returns false 3850s 3850s Float#prev_float 3850s - returns a float the smallest possible step smaller than the receiver 3850s - returns -Float::INFINITY for -Float::INFINITY 3850s - steps directly between MAX and INFINITY 3850s - steps directly between 1.0 and 1.0 - EPSILON/2 3850s - steps directly between -1.0 and -1.0 - EPSILON 3850s - reverses the effect of next_float for all Floats except -INFINITY and -0.0 3850s - returns positive zero when stepping downward from just above zero 3850s - gives the same result for -0.0 as for +0.0 3850s - returns NAN if NAN was the receiver 3850s 3850s Float#quo 3850s - performs floating-point division between self and an Integer 3850s - performs floating-point division between self and an Integer 3850s - performs floating-point division between self and a Float 3850s - returns NaN when the argument is NaN 3850s - returns Infinity when the argument is 0.0 3850s - returns -Infinity when the argument is 0.0 and self is negative 3850s - returns Infinity when the argument is 0 3850s - returns -Infinity when the argument is 0 and self is negative 3850s - returns 0.0 when the argument is Infinity 3850s - returns -0.0 when the argument is -Infinity 3850s - performs floating-point division between self and a Rational 3850s - performs floating-point division between self and a Complex 3850s - raises a TypeError when argument isn't numeric 3850s - raises an ArgumentError when passed multiple arguments 3850s 3850s Float#rationalize 3850s - returns self as a simplified Rational with no argument 3850s - simplifies self to the degree specified by a Rational argument 3850s - simplifies self to the degree specified by a Float argument 3850s - raises a FloatDomainError for Infinity 3850s - raises a FloatDomainError for NaN 3850s - raises ArgumentError when passed more than one argument 3850s 3850s Float#round 3850s - returns the nearest Integer 3850s - returns the nearest Integer for Float near the limit 3850s - raises FloatDomainError for exceptional values 3850s - rounds self to an optionally given precision 3850s - returns zero when passed a negative argument with magnitude greater than magnitude of the whole number portion of the Float 3850s - raises a TypeError when its argument can not be converted to an Integer 3850s - raises FloatDomainError for exceptional values when passed a non-positive precision 3850s - raises RangeError for NAN when passed a non-positive precision 3850s - returns self for exceptional values when passed a non-negative precision 3850s - works for corner cases 3850s - returns rounded values for big argument 3850s - returns big values rounded to nearest 3850s - returns rounded values for big values 3850s - returns different rounded values depending on the half option 3850s - rounds self to an optionally given precision with a half option 3850s - preserves cases where neighbouring floating pointer number increase the decimal places 3850s - does not lose precision during the rounding process 3850s - raises FloatDomainError for exceptional values with a half option 3850s - raise for a non-existent round mode 3850s 3850s Float#round when 0.0 is given 3850s - returns self for positive ndigits 3850s - returns 0 for 0 or undefined ndigits 3850s 3850s Float#to_f 3850s - returns self 3850s 3850s Float#to_i 3850s - returns self truncated to an Integer 3850s - raises a FloatDomainError for NaN 3850s 3850s Float#to_int 3850s - returns self truncated to an Integer 3850s - raises a FloatDomainError for NaN 3850s 3850s Float#to_r 3850s - needs to be reviewed for spec completeness 3850s 3850s Float#to_s 3850s - returns 'NaN' for NaN 3850s - returns 'Infinity' for positive infinity 3850s - returns '-Infinity' for negative infinity 3850s - returns '0.0' for 0.0 3850s - emits '-' for -0.0 3850s - emits a '-' for negative values 3850s - emits a trailing '.0' for a whole number 3850s - emits a trailing '.0' for the mantissa in e format 3850s - uses non-e format for a positive value with fractional part having 5 significant figures 3850s - uses non-e format for a negative value with fractional part having 5 significant figures 3850s - uses e format for a positive value with fractional part having 6 significant figures 3850s - uses e format for a negative value with fractional part having 6 significant figures 3850s - uses non-e format for a positive value with whole part having 15 significant figures 3850s - uses non-e format for a negative value with whole part having 15 significant figures 3850s - uses non-e format for a positive value with whole part having 16 significant figures 3850s - uses non-e format for a negative value with whole part having 16 significant figures 3850s - outputs the minimal, unique form necessary to recreate the value 3850s - outputs the minimal, unique form to represent the value 3850s 3850s Float#to_s matches 3850s - random examples in all ranges 3850s - random examples in human ranges 3850s - random values from divisions 3850s 3850s Float#to_s encoding 3850s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 3850s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 3850s 3850s Float#truncate 3850s - returns self truncated to an Integer 3850s - raises a FloatDomainError for NaN 3850s - returns self truncated to an optionally given precision 3850s 3850s Float#-@ 3850s - negates self 3850s - negates self at Float boundaries 3850s - returns negative infinity for positive infinity 3850s - returns positive infinity for negative infinity 3850s - returns NaN for NaN 3850s 3850s Float#+@ 3850s - returns the same value with same sign (twos complement) 3850s 3850s Float#zero? 3850s - returns true if self is 0.0 3850s 3850s GC.auto_compact 3850s - can set and get a boolean value 3850s 3850s GC.count 3850s - returns an integer 3850s - increases as collections are run 3851s 3851s GC.disable 3851s - returns true if and only if the garbage collection was previously disabled 3851s 3851s GC.enable 3851s - returns true if and only if the garbage collection was already disabled 3851s 3851s GC#garbage_collect 3851s - always returns nil 3851s 3851s GC::Profiler.clear 3851s - needs to be reviewed for spec completeness 3851s 3851s GC::Profiler.disable 3851s - disables the profiler 3851s 3851s GC::Profiler.enable 3851s - enables the profiler 3851s 3851s GC::Profiler.enabled? 3851s - reports as enabled when enabled 3851s - reports as disabled when disabled 3851s 3851s GC::Profiler.report 3851s - needs to be reviewed for spec completeness 3851s 3851s GC::Profiler.total_time 3851s - returns an float 3851s 3851s GC.start 3851s - always returns nil 3851s - accepts keyword arguments 3851s 3851s GC.stat 3851s - returns hash of values 3851s - updates the given hash values 3851s - can return a single value 3851s - increases count after GC is run 3851s - provides some number for count 3851s - raises an error if argument is not nil, a symbol, or a hash 3851s - raises an error if an unknown key is given 3851s 3851s GC.stress 3851s - returns current status of GC stress mode 3851s 3851s GC.stress= 3851s - sets the stress mode 3851s 3851s Hash.allocate 3851s - returns an instance of Hash 3851s - returns a fully-formed instance of Hash 3851s 3851s Hash#any? with no block given 3851s - checks if there are any members of a Hash 3851s 3851s Hash#any? with a block given 3851s - is false if the hash is empty 3851s - is true if the block returns true for any member of the hash 3851s - is false if the block returns false for all members of the hash 3851s 3851s Hash#assoc 3851s - returns an Array if the argument is == to a key of the Hash 3851s - returns a 2-element Array if the argument is == to a key of the Hash 3851s - sets the first element of the Array to the located key 3851s - sets the last element of the Array to the value of the located key 3851s - only returns the first matching key-value pair for identity hashes 3851s - uses #== to compare the argument to the keys 3851s - returns nil if the argument is not a key of the Hash 3851s - returns nil if the argument is not a key of the Hash even when there is a default 3851s 3851s Hash#clear 3851s - removes all key, value pairs 3851s - does not remove default values 3851s - does not remove default procs 3851s - raises a FrozenError if called on a frozen instance 3851s 3851s Hash#clone 3851s - copies instance variable but not the objects they refer to 3851s 3851s Hash#compact 3851s - returns new object that rejects pair has nil value 3851s - keeps own pairs 3851s 3851s Hash#compact! 3851s - returns self 3851s - rejects own pair has nil value 3851s 3851s Hash#compact! when each pair does not have nil value 3851s - returns nil 3851s 3851s Hash#compact! on frozen instance 3851s - keeps pairs and raises a FrozenError 3851s 3851s Hash#compare_by_identity 3851s - causes future comparisons on the receiver to be made by identity 3851s - rehashes internally so that old keys can be looked up 3851s - returns self 3851s - has no effect on an already compare_by_identity hash 3851s - uses the semantics of BasicObject#equal? to determine key identity 3851s - uses #equal? semantics, but doesn't actually call #equal? to determine identity 3851s - does not call #hash on keys 3851s - regards #dup'd objects as having different identities 3851s - regards #clone'd objects as having different identities 3851s - regards references to the same object as having the same identity 3851s - raises a FrozenError on frozen hashes 3851s - persists over #dups 3851s - persists over #clones 3851s - does not copy string keys 3851s - gives different identity for string literals 3851s 3851s Hash#compare_by_identity? 3851s - returns false by default 3851s - returns true once #compare_by_identity has been invoked on self 3851s - returns true when called multiple times on the same ident hash 3851s 3851s Hash.[] 3851s - creates a Hash; values can be provided as the argument list 3851s - creates a Hash; values can be provided as one single hash 3851s - creates a Hash; values can be provided as a list of value-pairs in an array 3851s - coerces a single argument which responds to #to_ary 3851s - raises for elements that are not arrays 3851s - raises an ArgumentError for arrays of more than 2 elements 3851s - raises an ArgumentError when passed a list of value-invalid-pairs in an array 3851s - raises an ArgumentError when passed an odd number of arguments 3851s - calls to_hash 3851s - returns an instance of a subclass when passed an Array 3851s - returns instances of subclasses 3851s - returns an instance of the class it's called on 3851s - does not call #initialize on the subclass instance 3851s - removes the default value 3851s - removes the default_proc 3851s 3851s Hash.[] passed zero arguments 3851s - returns an empty hash 3851s 3851s Hash.[] passed an array 3851s - treats elements that are 2 element arrays as key and value 3851s - treats elements that are 1 element arrays as keys with value nil 3851s 3851s Hash.[] passed a single argument which responds to #to_hash 3851s - coerces it and returns a copy 3851s 3851s Hash#deconstruct_keys 3851s - returns self 3851s - requires one argument 3851s - ignores argument 3851s 3851s Hash#default_proc 3851s - returns the block passed to Hash.new 3851s - returns nil if no block was passed to proc 3851s 3851s Hash#default_proc= 3851s - replaces the block passed to Hash.new 3851s - uses :to_proc on its argument 3851s - overrides the static default 3851s - raises an error if passed stuff not convertible to procs 3851s - returns the passed Proc 3851s - clears the default proc if passed nil 3851s - returns nil if passed nil 3851s - accepts a lambda with an arity of 2 3851s - raises a TypeError if passed a lambda with an arity other than 2 3851s - raises a FrozenError if self is frozen 3851s 3851s Hash#default 3851s - returns the default value 3851s - uses the default proc to compute a default value, passing given key 3851s - calls default proc with nil arg if passed a default proc but no arg 3851s 3851s Hash#default= 3851s - sets the default value 3851s - unsets the default proc 3851s - raises a FrozenError if called on a frozen instance 3851s 3851s Hash#delete_if 3851s - yields two arguments: key and value 3851s - removes every entry for which block is true and returns self 3851s - removes all entries if the block is true 3851s - processes entries with the same order as each() 3851s - raises a FrozenError if called on a frozen instance 3851s - returns an Enumerator if called on a non-empty hash without a block 3851s - returns an Enumerator if called on an empty hash without a block 3851s - returns an Enumerator if called on a frozen instance 3851s 3851s Hash#delete_if when no block is given returned Enumerator 3851s - size returns the enumerable size 3851s 3851s Hash#delete 3851s - removes the entry and returns the deleted value 3851s - calls supplied block if the key is not found 3851s - returns nil if the key is not found when no block is given 3851s - allows removing a key while iterating 3851s - allows removing a key while iterating for big hashes 3851s - accepts keys with private #hash method 3851s - raises a FrozenError if called on a frozen instance 3851s 3851s Hash#dig 3851s - returns #[] with one arg 3851s - returns the nested value specified by the sequence of keys 3851s - returns the nested value specified if the sequence includes an index 3851s - returns nil if any intermediate step is nil 3851s - raises an ArgumentError if no arguments provided 3851s - handles type-mixed deep digging 3851s - raises TypeError if an intermediate element does not respond to #dig 3851s - calls #dig on the result of #[] with the remaining arguments 3851s - respects Hash's default 3851s 3851s Hash#each_key 3851s - calls block once for each key, passing key 3851s - processes keys in the same order as keys() 3851s - returns an Enumerator if called on a non-empty hash without a block 3851s - returns an Enumerator if called on an empty hash without a block 3851s - returns an Enumerator if called on a frozen instance 3851s 3851s Hash#each_key when no block is given returned Enumerator 3851s - size returns the enumerable size 3851s 3851s Hash#each_pair 3851s - yields a [[key, value]] Array for each pair to a block expecting |*args| 3851s - yields the key and value of each pair to a block expecting |key, value| 3851s - yields the key only to a block expecting |key,| 3851s - always yields an Array of 2 elements, even when given a callable of arity 2 3851s - yields an Array of 2 elements when given a callable of arity 1 3851s - raises an error for a Hash when an arity enforcing callable of arity >2 is passed in 3851s - uses the same order as keys() and values() 3851s - properly expands (or not) child class's 'each'-yielded args 3851s - returns an Enumerator if called on a non-empty hash without a block 3851s - returns an Enumerator if called on an empty hash without a block 3851s - returns an Enumerator if called on a frozen instance 3851s 3851s Hash#each_pair when no block is given returned Enumerator 3851s - size returns the enumerable size 3851s 3851s Hash#each 3851s - yields a [[key, value]] Array for each pair to a block expecting |*args| 3851s - yields the key and value of each pair to a block expecting |key, value| 3851s - yields the key only to a block expecting |key,| 3851s - always yields an Array of 2 elements, even when given a callable of arity 2 3851s - yields an Array of 2 elements when given a callable of arity 1 3851s - raises an error for a Hash when an arity enforcing callable of arity >2 is passed in 3851s - uses the same order as keys() and values() 3851s - properly expands (or not) child class's 'each'-yielded args 3851s - returns an Enumerator if called on a non-empty hash without a block 3851s - returns an Enumerator if called on an empty hash without a block 3851s - returns an Enumerator if called on a frozen instance 3851s 3851s Hash#each when no block is given returned Enumerator 3851s - size returns the enumerable size 3851s 3851s Hash#each_value 3851s - calls block once for each key, passing value 3851s - processes values in the same order as values() 3851s - returns an Enumerator if called on a non-empty hash without a block 3851s - returns an Enumerator if called on an empty hash without a block 3851s - returns an Enumerator if called on a frozen instance 3851s 3851s Hash#each_value when no block is given returned Enumerator 3851s - size returns the enumerable size 3851s 3851s Hash#[] 3851s - returns the value for key 3851s - returns nil as default default value 3851s - returns the default (immediate) value for missing keys 3851s - calls subclass implementations of default 3851s - does not create copies of the immediate default value 3851s - returns the default (dynamic) value for missing keys 3851s - does not return default values for keys with nil values 3851s - compares keys with eql? semantics 3851s - compares key via hash 3851s - does not compare keys with different #hash values via #eql? 3851s - compares keys with the same #hash value via #eql? 3851s - finds a value via an identical key even when its #eql? isn't reflexive 3851s - supports keys with private #hash method 3854s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 3854s 3854s Hash#[]= 3854s - associates the key with the value and return the value 3854s - duplicates string keys using dup semantics 3854s - stores unequal keys that hash to the same value 3854s - accepts keys with private #hash method 3854s - accepts keys with an Integer hash 3854s - duplicates and freezes string keys 3854s - doesn't duplicate and freeze already frozen string keys 3854s - keeps the existing key in the hash if there is a matching one 3854s - keeps the existing String key in the hash if there is a matching one 3854s - raises a FrozenError if called on a frozen instance 3854s - does not raise an exception if changing the value of an existing key during iteration 3857s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 3857s 3857s Hash#empty? 3857s - returns true if the hash has no entries 3857s - returns true if the hash has no entries and has a default value 3857s 3857s Hash#eql? 3857s - does not compare values when keys don't match 3857s - returns false when the numbers of keys differ without comparing any elements 3857s - first compares keys via hash 3857s - does not compare keys with different hash codes via eql? 3857s - computes equality for recursive hashes 3857s - doesn't call to_hash on objects 3857s - computes equality for complex recursive hashes 3857s - computes equality for recursive hashes & arrays 3857s - compares values when keys match 3857s - compares keys with eql? semantics 3857s - returns true if and only if other Hash has the same number of keys and each key-value pair matches 3857s - does not call to_hash on hash subclasses 3857s - ignores hash class differences 3857s - compares keys with matching hash codes via eql? 3857s - compares the values in self to values in other hash 3857s - 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 3857s 3857s Hash#== 3857s - does not compare values when keys don't match 3857s - returns false when the numbers of keys differ without comparing any elements 3857s - first compares keys via hash 3857s - does not compare keys with different hash codes via eql? 3857s - computes equality for recursive hashes 3857s - doesn't call to_hash on objects 3857s - computes equality for complex recursive hashes 3857s - computes equality for recursive hashes & arrays 3857s - compares values when keys match 3857s - compares keys with eql? semantics 3857s - returns true if and only if other Hash has the same number of keys and each key-value pair matches 3857s - does not call to_hash on hash subclasses 3857s - ignores hash class differences 3857s - compares keys with matching hash codes via eql? 3857s - compares the values in self to values in other hash 3857s - 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 3857s - compares values with == semantics 3857s 3857s Hash#except 3857s - returns a new duplicate hash without arguments 3857s - returns a hash without the requested subset 3857s - ignores keys not present in the original hash 3857s - always returns a Hash without a default 3857s 3857s Hash#fetch 3857s - returns the value for key 3857s - returns default if key is not found when passed a default 3857s - returns value of block if key is not found when passed a block 3857s - gives precedence to the default block over the default argument when passed both 3857s - raises an ArgumentError when not passed one or two arguments 3857s 3857s Hash#fetch when the key is not found 3857s - raises a KeyError 3857s - sets the Hash as the receiver of KeyError 3857s - sets the unmatched key as the key of KeyError 3857s - raises a KeyError 3857s - sets the Hash as the receiver of KeyError 3857s - sets the unmatched key as the key of KeyError 3857s - raises a KeyError 3857s - sets the Hash as the receiver of KeyError 3857s - sets the unmatched key as the key of KeyError 3857s - raises a KeyError 3857s - sets the Hash as the receiver of KeyError 3857s - sets the unmatched key as the key of KeyError 3857s - formats the object with #inspect in the KeyError message 3857s 3857s Hash#fetch_values with matched keys 3857s - returns the values for keys 3857s - returns the values for keys ordered in the order of the requested keys 3857s 3857s Hash#fetch_values with unmatched keys 3857s - raises a KeyError 3857s - sets the Hash as the receiver of KeyError 3857s - sets the unmatched key as the key of KeyError 3857s - returns the default value from block 3857s 3857s Hash#fetch_values without keys 3857s - returns an empty Array 3857s 3857s Hash#filter 3857s - yields two arguments: key and value 3857s - returns a Hash of entries for which block is true 3857s - processes entries with the same order as reject 3857s - returns an Enumerator when called on a non-empty hash without a block 3857s - returns an Enumerator when called on an empty hash without a block 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#filter when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#filter! 3857s - is equivalent to keep_if if changes are made 3857s - removes all entries if the block is false 3857s - returns nil if no changes were made 3857s - raises a FrozenError if called on an empty frozen instance 3857s - raises a FrozenError if called on a frozen instance that would not be modified 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#filter! when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#flatten 3857s - returns an Array 3857s - returns an empty Array for an empty Hash 3857s - sets each even index of the Array to a key of the Hash 3857s - sets each odd index of the Array to the value corresponding to the previous element 3857s - does not recursively flatten Array values when called without arguments 3857s - does not recursively flatten Hash values when called without arguments 3857s - recursively flattens Array values when called with an argument >= 2 3857s - recursively flattens Array values to the given depth 3857s - raises a TypeError if given a non-Integer argument 3857s 3857s Hash#> 3857s - raises a TypeError if the right operand is not a hash 3857s - returns false if both hashes have the same keys but different values 3857s - returns true if the other hash is a subset of self 3857s - returns false if the other hash is not a subset of self 3857s - converts the right operand to a hash before comparing 3857s - returns false if both hashes are identical 3857s 3857s Hash#> 3857s - returns false when receiver size is smaller than argument 3857s - returns false when receiver size is the same as argument 3857s - returns true when argument is a subset of receiver 3857s - returns false when keys match but values don't 3857s 3857s Hash#>= 3857s - raises a TypeError if the right operand is not a hash 3857s - returns false if both hashes have the same keys but different values 3857s - returns true if the other hash is a subset of self 3857s - returns false if the other hash is not a subset of self 3857s - converts the right operand to a hash before comparing 3857s - returns true if both hashes are identical 3857s 3857s Hash#>= 3857s - returns false when receiver size is smaller than argument 3857s - returns false when argument is not a subset or not equals to receiver 3857s - returns true when argument is a subset of receiver or equals to receiver 3857s - returns false when keys match but values don't 3857s 3857s Hash#has_key? 3857s - returns true if argument is a key 3857s - returns true if the key's matching value was nil 3857s - returns true if the key's matching value was false 3857s - returns true if the key is nil 3857s - compares keys with the same #hash value via #eql? 3857s 3857s Hash#has_value? 3857s - returns true if the value exists in the hash 3857s - uses == semantics for comparing values 3857s 3857s Hash 3857s - includes Enumerable 3857s 3857s Hash#hash 3857s - returns a value which doesn't depend on the hash order 3857s - returns a value in which element values do not cancel each other out 3857s - returns a value in which element keys and values do not cancel each other out 3857s - generates a hash for recursive hash structures 3857s - returns the same hash for recursive hashes 3857s - returns the same hash for recursive hashes through arrays 3857s - allows omitting values 3857s 3857s Hash#include? 3857s - returns true if argument is a key 3857s - returns true if the key's matching value was nil 3857s - returns true if the key's matching value was false 3857s - returns true if the key is nil 3857s - compares keys with the same #hash value via #eql? 3857s 3857s Hash#initialize 3857s - is private 3857s - can be used to reset default_proc 3857s - can be used to reset the default value 3857s - receives the arguments passed to Hash#new 3857s - does not change the storage, only the default value or proc 3857s - returns self 3857s - raises a FrozenError if called on a frozen instance 3857s 3857s Hash#inspect 3857s - returns a string representation with same order as each() 3857s - calls #inspect on keys and values 3857s - does not call #to_s on a String returned from #inspect 3857s - calls #to_s on the object returned from #inspect if the Object isn't a String 3857s - does not call #to_str on the object returned from #inspect when it is not a String 3857s - does not call #to_str on the object returned from #to_s when it is not a String 3857s - does not swallow exceptions raised by #to_s 3857s - handles hashes with recursive values 3857s - does not raise if inspected result is not default external encoding 3857s - works for keys and values whose #inspect return a frozen String 3857s 3857s Hash#invert 3857s - returns a new hash where keys are values and vice versa 3857s - handles collisions by overriding with the key coming later in keys() 3857s - compares new keys with eql? semantics 3857s - does not return subclass instances for subclasses 3857s 3857s Hash#keep_if 3857s - yields two arguments: key and value 3857s - keeps every entry for which block is true and returns self 3857s - removes all entries if the block is false 3857s - returns self even if unmodified 3857s - raises a FrozenError if called on a frozen instance 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#keep_if when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#key? 3857s - returns true if argument is a key 3857s - returns true if the key's matching value was nil 3857s - returns true if the key's matching value was false 3857s - returns true if the key is nil 3857s - compares keys with the same #hash value via #eql? 3857s 3857s Hash#key 3857s - returns the corresponding key for value 3857s - returns nil if the value is not found 3857s - doesn't return default value if the value is not found 3857s - compares values using == 3857s 3857s Hash#keys 3857s - returns an array with the keys in the order they were inserted 3857s - uses the same order as #values 3857s 3857s Hash#length 3857s - returns the number of entries 3857s 3857s Hash#< 3857s - raises a TypeError if the right operand is not a hash 3857s - returns false if both hashes have the same keys but different values 3857s - returns true if self is a subset of the other hash 3857s - returns false if self is not a subset of the other hash 3857s - converts the right operand to a hash before comparing 3857s - returns false if both hashes are identical 3857s 3857s Hash#< 3857s - returns false when receiver size is larger than argument 3857s - returns false when receiver size is the same as argument 3857s - returns true when receiver is a subset of argument 3857s - returns false when keys match but values don't 3857s 3857s Hash#<= 3857s - raises a TypeError if the right operand is not a hash 3857s - returns false if both hashes have the same keys but different values 3857s - returns true if self is a subset of the other hash 3857s - returns false if self is not a subset of the other hash 3857s - converts the right operand to a hash before comparing 3857s - returns true if both hashes are identical 3857s 3857s Hash#<= 3857s - returns false when receiver size is larger than argument 3857s - returns false when receiver size is the same as argument 3857s - returns true when receiver is a subset of argument or equals to argument 3857s - returns false when keys match but values don't 3857s 3857s Hash#member? 3857s - returns true if argument is a key 3857s - returns true if the key's matching value was nil 3857s - returns true if the key's matching value was false 3857s - returns true if the key is nil 3857s - compares keys with the same #hash value via #eql? 3857s 3857s Hash#merge 3857s - returns a new hash by combining self with the contents of other 3857s - sets any duplicate key to the value of block if passed a block 3857s - tries to convert the passed argument to a hash using #to_hash 3857s - does not call to_hash on hash subclasses 3857s - returns subclass instance for subclasses 3857s - processes entries with same order as each() 3857s - preserves the order of merged elements 3857s - preserves the order of merged elements for large hashes 3857s - accepts multiple hashes 3857s - accepts zero arguments and returns a copy of self 3857s 3857s Hash#merge! 3857s - adds the entries from other, overwriting duplicate keys. Returns self 3857s - sets any duplicate key to the value of block if passed a block 3857s - tries to convert the passed argument to a hash using #to_hash 3857s - does not call to_hash on hash subclasses 3857s - processes entries with same order as merge() 3857s - raises a FrozenError on a frozen instance that is modified 3857s - checks frozen status before coercing an object with #to_hash 3857s - raises a FrozenError on a frozen instance that would not be modified 3857s - does not raise an exception if changing the value of an existing key during iteration 3857s - accepts multiple hashes 3857s - accepts zero arguments 3857s 3857s Hash.new 3857s - creates an empty Hash if passed no arguments 3857s - creates a new Hash with default object if passed a default argument 3857s - does not create a copy of the default argument 3857s - creates a Hash with a default_proc if passed a block 3857s - raises an ArgumentError if more than one argument is passed 3857s - raises an ArgumentError if passed both default argument and default block 3857s 3857s Hash#rassoc 3857s - returns an Array if the argument is a value of the Hash 3857s - returns a 2-element Array if the argument is a value of the Hash 3857s - sets the first element of the Array to the key of the located value 3857s - sets the last element of the Array to the located value 3857s - only returns the first matching key-value pair 3857s - uses #== to compare the argument to the values 3857s - returns nil if the argument is not a value of the Hash 3857s - returns nil if the argument is not a value of the Hash even when there is a default 3857s 3857s Hash#rehash 3857s - reorganizes the Hash by recomputing all key hash codes 3857s - calls #hash for each key 3857s - removes duplicate keys 3857s - removes duplicate keys for large hashes 3857s - raises a FrozenError if called on a frozen instance 3857s 3857s Hash#reject 3857s - returns a new hash removing keys for which the block yields true 3857s - is equivalent to hsh.dup.delete_if 3857s - processes entries with the same order as reject! 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#reject with extra state 3857s - returns Hash instance for subclasses 3857s 3857s Hash#reject when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#reject! 3857s - removes keys from self for which the block yields true 3857s - removes all entries if the block is true 3857s - is equivalent to delete_if if changes are made 3857s - returns nil if no changes were made 3857s - processes entries with the same order as delete_if 3857s - raises a FrozenError if called on a frozen instance that is modified 3857s - raises a FrozenError if called on a frozen instance that would not be modified 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#reject! when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#replace 3857s - replaces the contents of self with other 3857s - tries to convert the passed argument to a hash using #to_hash 3857s - calls to_hash on hash subclasses 3857s - does not transfer default values 3857s - raises a FrozenError if called on a frozen instance that would not be modified 3857s - raises a FrozenError if called on a frozen instance that is modified 3857s 3857s Hash.ruby2_keywords_hash? 3857s - returns false if the Hash is not a keywords Hash 3857s - returns true if the Hash is a keywords Hash marked by Module#ruby2_keywords 3857s - raises TypeError for non-Hash 3857s 3857s Hash.ruby2_keywords_hash 3857s - returns a copy of a Hash and marks the copy as a keywords Hash 3857s - returns an instance of the subclass if called on an instance of a subclass of Hash 3857s - copies instance variables 3857s - copies the hash internals 3857s - raises TypeError for non-Hash 3857s - retains the default value 3857s - retains the default_proc 3857s 3857s Hash#select 3857s - yields two arguments: key and value 3857s - returns a Hash of entries for which block is true 3857s - processes entries with the same order as reject 3857s - returns an Enumerator when called on a non-empty hash without a block 3857s - returns an Enumerator when called on an empty hash without a block 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#select when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#select! 3857s - is equivalent to keep_if if changes are made 3857s - removes all entries if the block is false 3857s - returns nil if no changes were made 3857s - raises a FrozenError if called on an empty frozen instance 3857s - raises a FrozenError if called on a frozen instance that would not be modified 3857s - returns an Enumerator if called on a non-empty hash without a block 3857s - returns an Enumerator if called on an empty hash without a block 3857s - returns an Enumerator if called on a frozen instance 3857s 3857s Hash#select! when no block is given returned Enumerator 3857s - size returns the enumerable size 3857s 3857s Hash#shift 3857s - removes a pair from hash and return it 3857s - allows shifting entries while iterating 3857s - calls #default with nil if the Hash is empty 3857s - returns nil from an empty hash 3857s - returns (computed) default for empty hashes 3857s - preserves Hash invariants when removing the last item 3857s - raises a FrozenError if called on a frozen instance 3857s - works when the hash is at capacity 3857s 3857s Hash#size 3857s - returns the number of entries 3857s 3857s Hash#slice 3857s - returns a new empty hash without arguments 3857s - returns the requested subset 3857s - returns a hash ordered in the order of the requested keys 3857s - returns only the keys of the original hash 3857s - returns a Hash instance, even on subclasses 3857s - uses the regular Hash#[] method, even on subclasses that override it 3857s 3857s Hash#sort 3857s - converts self to a nested array of [key, value] arrays and sort with Array#sort 3857s - works when some of the keys are themselves arrays 3857s - uses block to sort array if passed a block 3857s 3857s Hash#store 3857s - associates the key with the value and return the value 3857s - duplicates string keys using dup semantics 3857s - stores unequal keys that hash to the same value 3857s - accepts keys with private #hash method 3857s - accepts keys with an Integer hash 3857s - duplicates and freezes string keys 3857s - doesn't duplicate and freeze already frozen string keys 3857s - keeps the existing key in the hash if there is a matching one 3857s - keeps the existing String key in the hash if there is a matching one 3857s - raises a FrozenError if called on a frozen instance 3857s - does not raise an exception if changing the value of an existing key during iteration 3860s - does not dispatch to hash for Boolean, Integer, Float, String, or Symbol 3860s 3860s Hash#to_a 3860s - returns a list of [key, value] pairs with same order as each() 3860s - is called for Enumerable#entries 3860s 3860s Hash#to_h 3860s - returns self for Hash instances 3860s 3860s Hash#to_h when called on a subclass of Hash 3860s - returns a new Hash instance 3860s - copies the default 3860s - copies the default_proc 3860s 3860s Hash#to_h with block 3860s - converts [key, value] pairs returned by the block to a hash 3860s - raises ArgumentError if block returns longer or shorter array 3860s - raises TypeError if block returns something other than Array 3860s - coerces returned pair to Array with #to_ary 3860s - does not coerce returned pair to Array with #to_a 3860s 3860s Hash#to_hash 3860s - returns self for Hash instances 3860s - returns self for instances of subclasses of Hash 3860s 3860s Hash#to_proc 3860s - returns an instance of Proc 3860s 3860s Hash#to_proc the returned proc 3860s - is a lambda 3860s - has an arity of 1 3860s - raises ArgumentError if not passed exactly one argument 3860s - raises an ArgumentError when calling #call on the Proc with no arguments 3860s 3860s Hash#to_proc the returned proc with a stored key 3860s - returns the paired value 3860s 3860s Hash#to_proc the returned proc passed as a block 3860s - retrieves the hash's values 3860s 3860s Hash#to_proc the returned proc passed as a block to instance_exec 3860s - always retrieves the original hash's values 3860s 3860s Hash#to_proc the returned proc with no stored key 3860s - returns nil 3860s 3860s Hash#to_proc the returned proc with no stored key when the hash has a default value 3860s - returns the default value 3860s 3860s Hash#to_proc the returned proc with no stored key when the hash has a default proc 3860s - returns an evaluated value from the default proc 3860s 3860s Hash#to_s 3860s - returns a string representation with same order as each() 3860s - calls #inspect on keys and values 3860s - does not call #to_s on a String returned from #inspect 3860s - calls #to_s on the object returned from #inspect if the Object isn't a String 3860s - does not call #to_str on the object returned from #inspect when it is not a String 3860s - does not call #to_str on the object returned from #to_s when it is not a String 3860s - does not swallow exceptions raised by #to_s 3860s - handles hashes with recursive values 3860s - does not raise if inspected result is not default external encoding 3860s - works for keys and values whose #inspect return a frozen String 3860s 3860s Hash#transform_keys 3860s - returns new hash 3860s - sets the result as transformed keys with the given block 3860s - keeps last pair if new keys conflict 3860s - makes both hashes to share values 3860s - returns a Hash instance, even on subclasses 3860s - allows a hash argument 3860s - allows a partial transformation of keys when using a hash argument 3860s - allows a combination of hash and block argument 3860s 3860s Hash#transform_keys when no block is given 3860s - returns a sized Enumerator 3860s 3860s Hash#transform_keys! 3860s - returns self 3860s - updates self as transformed values with the given block 3860s - prevents conflicts between new keys and old ones 3860s - returns the processed keys and non evaluated keys if we break from the block 3860s - keeps later pair if new keys conflict 3860s - allows a hash argument 3860s 3860s Hash#transform_keys! when no block is given 3860s - returns a sized Enumerator 3860s 3860s Hash#transform_keys! on frozen instance 3860s - raises a FrozenError on an empty hash 3860s - keeps pairs and raises a FrozenError 3860s - raises a FrozenError on hash argument 3860s 3860s Hash#transform_keys! on frozen instance when no block is given 3860s - does not raise an exception 3860s 3860s Hash#transform_values 3860s - returns new hash 3860s - sets the result as transformed values with the given block 3860s - makes both hashes to share keys 3860s - returns a Hash instance, even on subclasses 3860s 3860s Hash#transform_values when no block is given 3860s - returns a sized Enumerator 3860s 3860s Hash#transform_values! 3860s - returns self 3860s - updates self as transformed values with the given block 3860s - partially modifies the contents if we broke from the block 3860s 3860s Hash#transform_values! when no block is given 3860s - returns a sized Enumerator 3860s 3860s Hash#transform_values! on frozen instance 3860s - raises a FrozenError on an empty hash 3860s - keeps pairs and raises a FrozenError 3860s 3860s Hash#transform_values! on frozen instance when no block is given 3860s - does not raise an exception 3860s 3860s Hash.try_convert 3860s - returns the argument if it's a Hash 3860s - returns the argument if it's a kind of Hash 3860s - returns nil when the argument does not respond to #to_hash 3860s - sends #to_hash to the argument and returns the result if it's nil 3860s - sends #to_hash to the argument and returns the result if it's a Hash 3860s - sends #to_hash to the argument and returns the result if it's a kind of Hash 3860s - sends #to_hash to the argument and raises TypeError if it's not a kind of Hash 3860s - does not rescue exceptions raised by #to_hash 3860s 3860s Hash#update 3860s - adds the entries from other, overwriting duplicate keys. Returns self 3860s - sets any duplicate key to the value of block if passed a block 3860s - tries to convert the passed argument to a hash using #to_hash 3860s - does not call to_hash on hash subclasses 3860s - processes entries with same order as merge() 3860s - raises a FrozenError on a frozen instance that is modified 3860s - checks frozen status before coercing an object with #to_hash 3860s - raises a FrozenError on a frozen instance that would not be modified 3860s - does not raise an exception if changing the value of an existing key during iteration 3860s - accepts multiple hashes 3860s - accepts zero arguments 3860s 3860s Hash#value? 3860s - returns true if the value exists in the hash 3860s - uses == semantics for comparing values 3860s 3860s Hash#values_at 3860s - returns an array of values for the given keys 3860s 3860s Hash#values 3860s - returns an array of values 3860s 3860s Integer#abs fixnum 3860s - returns self's absolute fixnum value 3860s 3860s Integer#abs bignum 3860s - returns the absolute bignum value 3860s 3860s Integer#allbits? 3860s - returns true if and only if all the bits of the argument are set in the receiver 3860s - handles negative values using two's complement notation 3860s - coerces the rhs using to_int 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#anybits? 3860s - returns true if and only if all the bits of the argument are set in the receiver 3860s - handles negative values using two's complement notation 3860s - coerces the rhs using to_int 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#& fixnum 3860s - returns self bitwise AND other 3860s - returns self bitwise AND other when one operand is negative 3860s - returns self bitwise AND other when both operands are negative 3860s - returns self bitwise AND a bignum 3860s - coerces the rhs and calls #coerce 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#& bignum 3860s - returns self bitwise AND other 3860s - returns self bitwise AND other when one operand is negative 3860s - returns self bitwise AND other when both operands are negative 3860s - returns self bitwise AND other when both are negative and a multiple in bitsize of Fixnum::MIN 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#bit_length fixnum 3860s - returns the position of the leftmost bit of a positive number 3860s - returns the position of the leftmost 0 bit of a negative number 3860s 3860s Integer#bit_length bignum 3860s - returns the position of the leftmost bit of a positive number 3860s - returns the position of the leftmost 0 bit of a negative number 3860s 3860s Integer#| fixnum 3860s - returns self bitwise OR other 3860s - returns self bitwise OR other when one operand is negative 3860s - returns self bitwise OR other when both operands are negative 3860s - returns self bitwise OR a bignum 3860s - coerces the rhs and calls #coerce 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#| bignum 3860s - returns self bitwise OR other 3860s - returns self bitwise OR other when one operand is negative 3860s - returns self bitwise OR other when both operands are negative 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#^ fixnum 3860s - returns self bitwise EXCLUSIVE OR other 3860s - returns self bitwise XOR other when one operand is negative 3860s - returns self bitwise XOR other when both operands are negative 3860s - returns self bitwise EXCLUSIVE OR a bignum 3860s - coerces the rhs and calls #coerce 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#^ bignum 3860s - returns self bitwise EXCLUSIVE OR other 3860s - returns self bitwise EXCLUSIVE OR other when one operand is negative 3860s - returns self bitwise EXCLUSIVE OR other when both operands are negative 3860s - returns self bitwise EXCLUSIVE OR other when all bits are 1 and other value is negative 3860s - raises a TypeError when passed a Float 3860s - raises a TypeError and does not call #to_int when defined on an object 3860s 3860s Integer#=== fixnum 3860s - returns true if self has the same value as other 3860s - calls 'other == self' if the given argument is not an Integer 3860s 3860s Integer#=== bignum 3860s - returns true if self has the same value as the given argument 3860s - calls 'other == self' if the given argument is not an Integer 3860s - returns the result of 'other == self' as a boolean 3860s 3860s Integer#ceil 3860s - returns self 3860s - returns self if not passed a precision 3860s - returns self if passed a precision of zero 3860s - returns itself if passed a positive precision 3860s 3860s Integer#ceil precision argument specified as part of the ceil method is negative 3860s - returns the smallest integer greater than self with at least precision.abs trailing zeros 3860s 3860s Integer#chr without argument 3860s - returns a String 3860s - returns a new String for each call 3860s - raises a RangeError is self is less than 0 3860s - raises a RangeError if self is too large 3860s 3860s Integer#chr without argument when Encoding.default_internal is nil 3860s - raises a RangeError is self is greater than 255 3860s 3860s Integer#chr without argument when Encoding.default_internal is nil and self is between 0 and 127 (inclusive) 3860s - returns a US-ASCII String 3860s - returns a String encoding self interpreted as a US-ASCII codepoint 3860s 3860s Integer#chr without argument when Encoding.default_internal is nil and self is between 128 and 255 (inclusive) 3860s - returns a binary String 3860s - returns a String containing self interpreted as a byte 3860s 3860s Integer#chr without argument when Encoding.default_internal is not nil and self is between 0 and 127 (inclusive) 3860s - returns a US-ASCII String 3860s - returns a String encoding self interpreted as a US-ASCII codepoint 3860s 3860s Integer#chr without argument when Encoding.default_internal is not nil and self is between 128 and 255 (inclusive) 3860s - returns a binary String 3860s - returns a String containing self interpreted as a byte 3860s 3860s Integer#chr without argument when Encoding.default_internal is not nil and self is greater than 255 3860s - returns a String with the default internal encoding 3860s - returns a String encoding self interpreted as a codepoint in the default internal encoding 3860s - raises RangeError if self is invalid as a codepoint in the default internal encoding 3860s 3860s Integer#chr with an encoding argument 3860s - returns a String 3860s - returns a new String for each call 3860s - accepts a String as an argument 3860s - converts a String to an Encoding as Encoding.find does 3860s - raises a RangeError is self is less than 0 3860s - raises a RangeError if self is too large 3860s - returns a String with the specified encoding 3860s - returns a String encoding self interpreted as a codepoint in the specified encoding 3860s - raises RangeError if self is invalid as a codepoint in the specified encoding 3860s - returns a String encoding self interpreted as a codepoint in the CESU-8 encoding 3860s 3860s Integer#coerce fixnum 3860s - raises a TypeError when trying to coerce with nil 3860s - tries to convert the given Object into a Float by using #to_f 3860s - raises a TypeError when given an Object that does not respond to #to_f 3860s 3860s Integer#coerce fixnum when given a Fixnum 3860s - returns an array containing two Fixnums 3860s 3860s Integer#coerce fixnum when given a String 3860s - raises an ArgumentError when trying to coerce with a non-number String 3860s - returns an array containing two Floats 3860s 3860s Integer#coerce bignum 3860s - coerces other to a Bignum and returns [other, self] when passed a Fixnum 3860s - returns [other, self] when passed a Bignum 3860s - raises a TypeError when not passed a Fixnum or Bignum 3860s - coerces both values to Floats and returns [other, self] when passed a Float 3860s - coerces both values to Floats and returns [other, self] when passed a String 3860s - calls #to_f to coerce other to a Float 3860s 3860s Integer#coerce bigdecimal 3860s - produces Floats 3860s 3860s Integer#<=> fixnum 3860s - returns -1 when self is less than the given argument 3860s - returns 0 when self is equal to the given argument 3860s - returns 1 when self is greater than the given argument 3860s - returns nil when the given argument is not an Integer 3860s 3860s Integer#<=> bignum 3860s - returns 1 when self is Infinity and other is a Bignum 3860s - returns -1 when self is negative and other is Infinity 3860s - returns 1 when self is negative and other is -Infinity 3860s - returns -1 when self is -Infinity and other is negative 3860s 3860s Integer#<=> bignum with a Fixnum 3860s - returns -1 when other is larger 3860s - returns 1 when other is smaller 3860s 3860s Integer#<=> bignum with a Bignum when other is negative 3860s - returns -1 when self is negative and other is larger 3860s - returns 0 when other is equal 3860s - returns 1 when self is negative and other is smaller 3860s - returns 1 when self is positive 3860s 3860s Integer#<=> bignum with a Bignum when other is positive 3860s - returns -1 when self is negative 3860s - returns -1 when self is positive and other is larger 3860s - returns 0 when other is equal 3860s - returns 1 when other is smaller 3860s 3860s Integer#<=> bignum with a Float when other is negative 3860s - returns -1 when self is negative and other is larger 3860s - returns 0 when other is equal 3860s - returns 1 when self is negative and other is smaller 3860s - returns 1 when self is positive 3860s 3860s Integer#<=> bignum with a Float when other is positive 3860s - returns -1 when self is negative 3860s - returns -1 when self is positive and other is larger 3860s - returns 0 when other is equal 3860s - returns 1 when other is smaller 3860s 3860s Integer#<=> bignum with an Object 3860s - calls #coerce on other 3860s - lets the exception go through if #coerce raises an exception 3860s - raises an exception if #coerce raises a non-StandardError exception 3860s - returns nil if #coerce does not return an Array 3860s - returns -1 if the coerced value is larger 3860s - returns 0 if the coerced value is equal 3860s - returns 1 if the coerced value is smaller 3860s 3860s Integer#~ fixnum 3860s - returns self with each bit flipped 3860s 3860s Integer#~ bignum 3860s - returns self with each bit flipped 3860s 3860s Fixnum 3860s - is unified into Integer 3860s - is deprecated 3860s 3860s Bignum 3860s - is unified into Integer 3860s - is deprecated 3860s 3860s Integer#denominator 3860s - returns 1 3860s 3860s Integer#digits 3860s - returns an array of place values in base-10 by default 3860s - returns digits by place value of a given radix 3860s - converts the radix with #to_int 3860s - returns [0] when called on 0, regardless of base 3860s - raises ArgumentError when calling with a radix less than 2 3860s - raises ArgumentError when calling with a negative radix 3860s - raises Math::DomainError when calling digits on a negative number 3860s - returns integer values > 9 when base is above 10 3860s - can be used with base > 37 3860s 3860s Integer#div fixnum 3860s - returns self divided by the given argument as an Integer 3860s - rounds towards -inf 3860s - means (x / y).floor 3860s - calls #coerce and #div if argument responds to #coerce 3860s - coerces self and the given argument to Floats and returns self divided by other as Integer 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a ZeroDivisionError when the given argument is 0 and not a Float 3860s - raises a TypeError when given a non-numeric argument 3860s 3860s Integer#div bignum 3860s - returns self divided by other 3860s - handles fixnum_min / -1 3860s - calls #coerce and #div if argument responds to #coerce 3860s - means (x / y).floor 3860s - looses precision if passed Float argument 3860s - raises a TypeError when given a non-numeric 3860s - returns a result of integer division of self by a float argument 3860s - raises ZeroDivisionError if the argument is 0 and is a Float 3860s - raises ZeroDivisionError if the argument is 0 and is not a Float 3860s 3860s Integer#div rational 3860s - returns self divided by the given argument as an Integer 3860s 3860s Integer#/ 3860s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 3860s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 3860s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:15: warning: Bignum out of Float range 3860s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:59: warning: Bignum out of Float range 3860s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/integer/fdiv_spec.rb:60: warning: Bignum out of Float range 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#/ fixnum 3860s - returns self divided by the given argument 3860s - supports dividing negative numbers 3860s - returns result the same class as the argument 3860s - raises a ZeroDivisionError if the given argument is zero and not a Float 3860s - does NOT raise ZeroDivisionError if the given argument is zero and is a Float 3860s - coerces fixnum and return self divided by other 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#/ bignum 3860s - returns self divided by other 3860s - returns self divided by Float 3860s - returns result the same class as the argument 3860s - does NOT raise ZeroDivisionError if other is zero and is a Float 3860s - raises a ZeroDivisionError if other is zero and not a Float 3860s - raises a TypeError when given a non-numeric 3860s 3860s Integer#divmod fixnum 3860s - returns an Array containing quotient and modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#divmod bignum 3860s - returns an Array containing quotient and modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a FloatDomainError if other is NaN 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when the given argument is not an Integer 3860s 3860s Integer#divmod bignum with q = floor(x/y), a = q*b + r, 3860s - returns [q,r] when a < 0, b > 0 and |a| < b 3860s - returns [q,r] when a > 0, b < 0 and a > |b| 3860s - returns [q,r] when a > 0, b < 0 and a < |b| 3860s - returns [q,r] when a < 0, b < 0 and |a| < |b| 3860s 3860s Integer#downto [stop] when self and stop are Integers 3860s - does not yield when stop is greater than self 3860s - yields once when stop equals self 3860s - yields while decreasing self until it is less than stop 3860s - yields while decreasing self until it less than ceil for a Float endpoint 3860s - raises an ArgumentError for invalid endpoints 3860s 3860s Integer#downto [stop] when self and stop are Integers when no block is given 3860s - returns an Enumerator 3860s 3860s Integer#downto [stop] when self and stop are Integers when no block is given returned Enumerator size 3860s - raises an ArgumentError for invalid endpoints 3860s - returns self - stop + 1 3860s - returns 0 when stop > self 3860s 3860s Integer#dup 3860s - returns self for small integers 3860s - returns self for large integers 3860s 3860s Integer#[] fixnum 3860s - behaves like (n >> b) & 1 3860s - returns 1 if the nth bit is set 3860s - returns 1 if the nth bit is set (in two's-complement representation) 3860s - returns 0 if the nth bit is not set 3860s - returns 0 if the nth bit is not set (in two's-complement representation) 3860s - returns 0 if the nth bit is greater than the most significant bit 3860s - returns 1 if self is negative and the nth bit is greater than the most significant bit 3860s - returns 0 when passed a negative argument 3860s - calls #to_int to convert the argument to an Integer and returns 1 if the nth bit is set 3860s - calls #to_int to convert the argument to an Integer and returns 0 if the nth bit is set 3860s - accepts a Float argument and returns 0 if the bit at the truncated value is not set 3860s - accepts a Float argument and returns 1 if the bit at the truncated value is set 3860s - raises a TypeError when passed a String 3860s - raises a TypeError when #to_int does not return an Integer 3860s - calls #to_int to coerce a String to a Bignum and returns 0 3860s - returns 0 when passed a Float in the range of a Bignum 3860s 3860s Integer#[] fixnum when index and length passed 3860s - returns specified number of bits from specified position 3860s - ensures n[i, len] equals to (n >> i) & ((1 << len) - 1) 3860s - moves start position to the most significant bits when negative index passed 3860s - ignores negative length 3860s 3860s Integer#[] fixnum when range passed 3860s - returns bits specified by range 3860s - ensures n[i..j] equals to (n >> i) & ((1 << (j - i + 1)) - 1) 3860s - ensures n[i..] equals to (n >> i) 3860s - moves lower boundary to the most significant bits when negative value passed 3860s - ignores upper boundary smaller than lower boundary 3860s - raises FloatDomainError if any boundary is infinity 3860s 3860s Integer#[] fixnum when range passed when passed (..i) 3860s - returns 0 if all i bits equal 0 3860s - raises ArgumentError if any of i bit equals 1 3860s 3860s Integer#[] bignum 3860s - returns the nth bit in the binary representation of self 3860s - tries to convert the given argument to an Integer using #to_int 3860s - raises a TypeError when the given argument can't be converted to Integer 3860s 3860s Integer#== fixnum 3860s - returns true if self has the same value as other 3860s - calls 'other == self' if the given argument is not an Integer 3860s 3860s Integer#== bignum 3860s - returns true if self has the same value as the given argument 3860s - calls 'other == self' if the given argument is not an Integer 3860s - returns the result of 'other == self' as a boolean 3860s 3860s Integer#even? fixnum 3860s - returns true for a Fixnum when it is an even number 3860s - returns true for a Bignum when it is an even number 3860s 3860s Integer#even? bignum 3860s - returns true if self is even and positive 3860s - returns true if self is even and negative 3860s - returns false if self is odd and positive 3860s - returns false if self is odd and negative 3860s 3860s Integer#** fixnum 3860s - returns self raised to the given power 3860s - overflows the answer to a bignum transparently 3860s - raises negative numbers to the given power 3860s - can raise 1 to a bignum safely 3860s - can raise -1 to a bignum safely 3860s - returns Float::INFINITY when the number is too big 3860s - raises a ZeroDivisionError for 0 ** -1 3860s - returns Float::INFINITY for 0 ** -1.0 3860s - raises a TypeError when given a non-numeric power 3860s - coerces power and calls #** 3860s - returns Float when power is Float 3860s - returns Rational when power is Rational 3860s - returns a complex number when negative and raised to a fractional power 3860s 3860s Integer#** bignum 3860s - returns self raised to other power 3860s - raises a TypeError when given a non-Integer 3860s - switch to a Float when the values is too big 3860s - returns a complex number when negative and raised to a fractional power 3860s 3860s Integer#fdiv 3860s - performs floating-point division between self and a fixnum 3860s - performs floating-point division between self and a bignum 3860s - performs floating-point division between self bignum and a bignum 3860s - rounds to the correct float for bignum denominators 3860s - performs floating-point division between self and a Float 3860s - returns NaN when the argument is NaN 3860s - returns Infinity when the argument is 0 3860s - returns -Infinity when the argument is 0 and self is negative 3860s - returns Infinity when the argument is 0.0 3860s - returns -Infinity when the argument is 0.0 and self is negative 3860s - raises a TypeError when argument isn't numeric 3860s - raises an ArgumentError when passed multiple arguments 3860s - follows the coercion protocol 3860s 3860s Integer#floor 3860s - returns self 3860s - returns self if not passed a precision 3860s - returns self if passed a precision of zero 3860s - returns itself if passed a positive precision 3860s 3860s Integer#floor precision argument specified as part of the floor method is negative 3860s - returns the largest integer less than self with at least precision.abs trailing zeros 3860s 3860s Integer#gcd 3860s - returns self if equal to the argument 3860s - returns an Integer 3860s - returns the greatest common divisor of self and argument 3860s - returns a positive integer even if self is negative 3860s - returns a positive integer even if the argument is negative 3860s - returns a positive integer even if both self and argument are negative 3860s - accepts a Bignum argument 3860s - works if self is a Bignum 3860s - doesn't cause an integer overflow 3860s - raises an ArgumentError if not given an argument 3860s - raises an ArgumentError if given more than one argument 3860s - raises a TypeError unless the argument is an Integer 3860s 3860s Integer#gcdlcm 3860s - returns [self, self] if self is equal to the argument 3860s - returns an Array 3860s - returns a two-element Array 3860s - returns the greatest common divisor of self and argument as the first element 3860s - returns the least common multiple of self and argument as the last element 3860s - accepts a Bignum argument 3860s - works if self is a Bignum 3860s - raises an ArgumentError if not given an argument 3860s - raises an ArgumentError if given more than one argument 3860s - raises a TypeError unless the argument is an Integer 3860s 3860s Integer#> 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#> fixnum 3860s - returns true if self is greater than the given argument 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#> bignum 3860s - returns true if self is greater than the given argument 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#>= 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#>= fixnum 3860s - returns true if self is greater than or equal to the given argument 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#>= bignum 3860s - returns true if self is greater than or equal to other 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer 3860s - includes Comparable 3860s - is the class of both small and large integers 3860s 3860s Integer#integer? 3860s - returns true for Integers 3860s 3860s Integer#lcm 3860s - returns self if equal to the argument 3860s - returns an Integer 3860s - returns the least common multiple of self and argument 3860s - returns a positive integer even if self is negative 3860s - returns a positive integer even if the argument is negative 3860s - returns a positive integer even if both self and argument are negative 3860s - accepts a Bignum argument 3860s - works if self is a Bignum 3860s - raises an ArgumentError if not given an argument 3860s - raises an ArgumentError if given more than one argument 3860s - raises a TypeError unless the argument is an Integer 3860s 3860s Integer#<< (with n << m) fixnum 3860s - returns n shifted left m bits when n > 0, m > 0 3860s - returns n shifted left m bits when n < 0, m > 0 3860s - returns n shifted right m bits when n > 0, m < 0 3860s - returns n shifted right m bits when n < 0, m < 0 3860s - returns 0 when n == 0 3860s - returns n when n > 0, m == 0 3860s - returns n when n < 0, m == 0 3860s - returns 0 when n > 0, m < 0 and n < 2**-m 3860s - returns -1 when n < 0, m < 0 and n > -(2**-m) 3860s - returns 0 when m < 0 and m is a Bignum 3860s - returns a Bignum == fixnum_max * 2 when fixnum_max << 1 and n > 0 3860s - returns a Bignum == fixnum_min * 2 when fixnum_min << 1 and n < 0 3860s - calls #to_int to convert the argument to an Integer 3860s - raises a TypeError when #to_int does not return an Integer 3860s - raises a TypeError when passed nil 3860s - raises a TypeError when passed a String 3860s 3860s Integer#<< (with n << m) bignum 3860s - returns n shifted left m bits when n > 0, m > 0 3860s - returns n shifted left m bits when n < 0, m > 0 3860s - returns n shifted right m bits when n > 0, m < 0 3860s - returns n shifted right m bits when n < 0, m < 0 3860s - returns n when n > 0, m == 0 3860s - returns n when n < 0, m == 0 3860s - returns 0 when m < 0 and m == p where 2**p > n >= 2**(p-1) 3860s - returns a Fixnum == fixnum_max when (fixnum_max * 2) << -1 and n > 0 3860s - returns a Fixnum == fixnum_min when (fixnum_min * 2) << -1 and n < 0 3860s - calls #to_int to convert the argument to an Integer 3860s - raises a TypeError when #to_int does not return an Integer 3860s - raises a TypeError when passed nil 3860s - raises a TypeError when passed a String 3860s 3860s Integer#<< (with n << m) when m is a bignum or larger than int 3860s - returns -1 when m < 0 and n < 0 3860s - returns 0 when m < 0 and n >= 0 3860s - returns 0 when m > 0 long and n == 0 3860s - returns 0 when m > 0 bignum and n == 0 3860s 3860s Integer#< 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#< fixnum 3860s - returns true if self is less than the given argument 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#< bignum 3860s - returns true if self is less than the given argument 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#<= 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#<= fixnum 3860s - returns true if self is less than or equal to other 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#<= bignum 3860s - returns true if self is less than or equal to other 3860s - returns false if compares with near float 3860s - returns true for bignums compare to a bigger float 3860s - raises an ArgumentError when given a non-Integer 3860s 3860s Integer#magnitude fixnum 3860s - returns self's absolute fixnum value 3860s 3860s Integer#magnitude bignum 3860s - returns the absolute bignum value 3860s 3860s Integer#- 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#- fixnum 3860s - returns self minus the given Integer 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#- bignum 3860s - returns self minus the given Integer 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#% fixnum 3860s - returns the modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#% bignum 3860s - returns the modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#modulo fixnum 3860s - returns the modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#modulo bignum 3860s - returns the modulus obtained from dividing self by the given argument 3860s - raises a ZeroDivisionError when the given argument is 0 3860s - raises a ZeroDivisionError when the given argument is 0 and a Float 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#* 3860s - does not rescue exception raised in other#coerce 3860s 3860s Integer#* fixnum 3860s - returns self multiplied by the given Integer 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#* bignum 3860s - returns self multiplied by the given Integer 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#next 3860s - returns the next larger positive Fixnum 3860s - returns the next larger negative Fixnum 3860s - returns the next larger positive Bignum 3860s - returns the next larger negative Bignum 3860s - overflows a Fixnum to a Bignum 3860s - underflows a Bignum to a Fixnum 3860s 3860s Integer#nobits? 3860s - returns true if and only if all no bits of the argument are set in the receiver 3860s - handles negative values using two's complement notation 3860s - coerces the rhs using to_int 3860s - raises a TypeError when given a non-Integer 3860s 3860s Integer#numerator 3860s - returns self 3860s 3860s Integer#odd? fixnum 3860s - returns true when self is an odd number 3860s 3860s Integer#odd? bignum 3860s - returns true if self is odd and positive 3860s - returns true if self is odd and negative 3860s - returns false if self is even and positive 3860s - returns false if self is even and negative 3860s 3860s Integer#ord 3860s - returns self 3860s 3860s Integer#+ 3860s - does not rescue exception raised in other#coerce 3864s - can be redefined 3864s 3864s Integer#+ fixnum 3864s - returns self plus the given Integer 3864s - raises a TypeError when given a non-Integer 3864s 3864s Integer#+ bignum 3864s - returns self plus the given Integer 3864s - raises a TypeError when given a non-Integer 3864s 3864s Integer#pow one argument is passed fixnum 3864s - returns self raised to the given power 3864s - overflows the answer to a bignum transparently 3864s - raises negative numbers to the given power 3864s - can raise 1 to a bignum safely 3864s - can raise -1 to a bignum safely 3864s - returns Float::INFINITY when the number is too big 3864s - raises a ZeroDivisionError for 0 ** -1 3864s - returns Float::INFINITY for 0 ** -1.0 3864s - raises a TypeError when given a non-numeric power 3864s - coerces power and calls #** 3864s - returns Float when power is Float 3864s - returns Rational when power is Rational 3864s - returns a complex number when negative and raised to a fractional power 3864s 3864s Integer#pow one argument is passed bignum 3864s - returns self raised to other power 3864s - raises a TypeError when given a non-Integer 3864s - switch to a Float when the values is too big 3864s - returns a complex number when negative and raised to a fractional power 3864s 3864s Integer#pow two arguments are passed 3864s - returns modulo of self raised to the given power 3864s - works well with bignums 3864s - handles sign like #divmod does 3864s - ensures all arguments are integers 3864s - raises TypeError for non-numeric value 3864s - raises a ZeroDivisionError when the given argument is 0 3864s - raises a RangeError when the first argument is negative and the second argument is present 3864s 3864s Integer#pred 3864s - returns the Integer equal to self - 1 3864s 3864s Integer#rationalize 3864s - returns a Rational object 3864s - uses self as the numerator 3864s - uses 1 as the denominator 3864s - ignores a single argument 3864s - raises ArgumentError when passed more than one argument 3864s 3864s Integer#remainder fixnum 3864s - returns the remainder of dividing self by other 3864s - means x-y*(x/y).truncate 3864s - keeps sign of self 3864s - raises TypeError if passed non-numeric argument 3864s 3864s Integer#remainder bignum 3864s - returns the remainder of dividing self by other 3864s - raises a ZeroDivisionError if other is zero and not a Float 3864s - does raises ZeroDivisionError if other is zero and a Float 3864s 3864s Integer#>> (with n >> m) fixnum 3864s - returns n shifted right m bits when n > 0, m > 0 3864s - returns n shifted right m bits when n < 0, m > 0 3864s - returns n shifted left m bits when n > 0, m < 0 3864s - returns n shifted left m bits when n < 0, m < 0 3864s - returns 0 when n == 0 3864s - returns n when n > 0, m == 0 3864s - returns n when n < 0, m == 0 3864s - returns 0 when n > 0, m > 0 and n < 2**m 3864s - returns -1 when n < 0, m > 0 and n > -(2**m) 3864s - returns a Bignum == fixnum_max * 2 when fixnum_max >> -1 and n > 0 3864s - returns a Bignum == fixnum_min * 2 when fixnum_min >> -1 and n < 0 3864s - calls #to_int to convert the argument to an Integer 3864s - raises a TypeError when #to_int does not return an Integer 3864s - raises a TypeError when passed nil 3864s - raises a TypeError when passed a String 3864s 3864s Integer#>> (with n >> m) bignum 3864s - returns n shifted right m bits when n > 0, m > 0 3864s - returns n shifted right m bits when n < 0, m > 0 3864s - respects twos complement signed shifting 3864s - respects twos complement signed shifting for very large values 3864s - returns n shifted left m bits when n > 0, m < 0 3864s - returns n shifted left m bits when n < 0, m < 0 3864s - returns n when n > 0, m == 0 3864s - returns n when n < 0, m == 0 3864s - returns 0 when m > 0 and m == p where 2**p > n >= 2**(p-1) 3864s - returns a Fixnum == fixnum_max when (fixnum_max * 2) >> 1 and n > 0 3864s - returns a Fixnum == fixnum_min when (fixnum_min * 2) >> 1 and n < 0 3864s - calls #to_int to convert the argument to an Integer 3864s - raises a TypeError when #to_int does not return an Integer 3864s - raises a TypeError when passed nil 3864s - raises a TypeError when passed a String 3864s 3864s Integer#>> (with n >> m) when m is a bignum or larger than int 3864s - returns -1 when m > 0 and n < 0 3864s - returns 0 when m > 0 and n >= 0 3864s - returns 0 when m < 0 long and n == 0 3864s - returns 0 when m < 0 bignum and n == 0 3864s 3864s Integer#round 3864s - returns self 3864s - returns self if not passed a precision 3864s - returns self if passed a precision of zero 3864s - returns itself if passed a positive precision 3864s - returns itself rounded if passed a negative value 3864s - returns itself rounded to nearest if passed a negative value 3864s - raises a RangeError when passed a big negative value 3864s - raises a RangeError when passed Float::INFINITY 3864s - raises a RangeError when passed a beyond signed int 3864s - raises a TypeError when passed a String 3864s - raises a TypeError when its argument cannot be converted to an Integer 3864s - calls #to_int on the argument to convert it to an Integer 3864s - raises a TypeError when #to_int does not return an Integer 3864s - returns different rounded values depending on the half option 3864s - returns itself if passed a positive precision and the half option 3864s - raises ArgumentError for an unknown rounding mode 3864s 3864s Integer#size 3864s - returns the number of bytes in the machine representation of self 3864s 3864s Integer#size bignum 3864s - returns the number of bytes required to hold the unsigned bignum data 3864s 3864s Integer.sqrt 3864s - returns an integer 3864s - returns the integer square root of the argument 3864s - raises a Math::DomainError if the argument is negative 3864s - accepts any argument that can be coerced to Integer 3864s - converts the argument with #to_int 3864s - raises a TypeError if the argument cannot be coerced to Integer 3864s 3864s Integer#succ 3864s - returns the next larger positive Fixnum 3864s - returns the next larger negative Fixnum 3864s - returns the next larger positive Bignum 3864s - returns the next larger negative Bignum 3864s - overflows a Fixnum to a Bignum 3864s - underflows a Bignum to a Fixnum 3864s 3864s Integer#times 3864s - returns self 3864s - yields each value from 0 to self - 1 3864s - skips the current iteration when encountering 'next' 3864s - skips all iterations when encountering 'break' 3864s - skips all iterations when encountering break with an argument and returns that argument 3864s - executes a nested while loop containing a break expression 3864s - executes a nested #times 3864s - returns an Enumerator 3864s 3864s Integer#times when no block is given returned Enumerator size 3864s - returns self 3864s 3864s Integer#to_f fixnum 3864s - returns self converted to a Float 3864s 3864s Integer#to_f bignum 3864s - returns self converted to a Float 3864s - converts number close to Float::MAX without exceeding MAX or producing NaN 3864s 3864s Integer#to_i 3864s - returns self 3864s 3864s Integer#to_int 3864s - returns self 3864s 3864s Integer#to_r 3864s - returns a Rational object 3864s - constructs a rational number with self as the numerator 3864s - constructs a rational number with 1 as the denominator 3864s - works even if self is a Bignum 3864s - raises an ArgumentError if given any arguments 3864s 3864s Integer#to_s fixnum 3864s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 3864s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 3864s 3864s Integer#to_s fixnum when given a base 3864s - returns self converted to a String in the given base 3864s - raises an ArgumentError if the base is less than 2 or higher than 36 3864s 3864s Integer#to_s fixnum when no base given 3864s - returns self converted to a String using base 10 3864s 3864s Integer#to_s bignum 3864s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 3864s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 3864s 3864s Integer#to_s bignum when given a base 3864s - returns self converted to a String using the given base 3864s - raises an ArgumentError if the base is less than 2 or higher than 36 3864s 3864s Integer#to_s bignum when given no base 3864s - returns self converted to a String using base 10 3864s 3864s Integer#truncate 3864s - returns self 3864s - returns self if not passed a precision 3864s - returns self if passed a precision of zero 3864s - returns itself if passed a positive precision 3864s 3864s Integer#truncate precision argument specified as part of the truncate method is negative 3864s - returns an integer with at least precision.abs trailing zeros 3864s 3864s Integer.try_convert 3864s - returns the argument if it's an Integer 3864s - returns nil when the argument does not respond to #to_int 3864s - sends #to_int to the argument and returns the result if it's nil 3864s - sends #to_int to the argument and returns the result if it's an Integer 3864s - sends #to_int to the argument and raises TypeError if it's not a kind of Integer 3864s - responds with a different error message when it raises a TypeError, depending on the type of the non-Integer object :to_int returns 3864s - does not rescue exceptions raised by #to_int 3864s 3864s Integer#-@ fixnum 3864s - returns self as a negative value 3864s - negates self at Fixnum/Bignum boundaries 3864s 3864s Integer#-@ bignum 3864s - returns self as a negative value 3864s 3864s Integer#upto [stop] when self and stop are Integers 3864s - does not yield when stop is less than self 3864s - yields once when stop equals self 3864s - yields while increasing self until it is less than stop 3864s - yields while increasing self until it is greater than floor of a Float endpoint 3864s - raises an ArgumentError for non-numeric endpoints 3864s 3864s Integer#upto [stop] when self and stop are Integers when no block is given 3864s - returns an Enumerator 3864s 3864s Integer#upto [stop] when self and stop are Integers when no block is given returned Enumerator size 3864s - raises an ArgumentError for non-numeric endpoints 3864s - returns stop - self + 1 3864s - returns 0 when stop < self 3864s 3864s Integer#zero? 3864s - returns true if self is 0 3864s - Integer#zero? overrides Numeric#zero? 3864s 3864s IO#advise 3864s - raises a TypeError if advise is not a Symbol 3864s - raises a TypeError if offset cannot be coerced to an Integer 3864s - raises a TypeError if len cannot be coerced to an Integer 3864s - raises a RangeError if offset is too big 3864s - raises a RangeError if len is too big 3864s - raises a NotImplementedError if advise is not recognized 3864s - supports the normal advice type 3864s - supports the sequential advice type 3864s - supports the random advice type 3864s - supports the dontneed advice type 3864s - supports the noreuse advice type 3864s - raises an IOError if the stream is closed 3864s 3864s IO#binmode 3864s - returns self 3864s - raises an IOError on closed stream 3864s - sets external encoding to binary 3864s - sets internal encoding to nil 3864s 3864s IO#binmode? 3864s - is true after a call to IO#binmode 3864s - propagates to dup'ed IO objects 3864s - raises an IOError on closed stream 3864s 3864s IO.binread 3864s - reads the contents of a file 3864s - reads the contents of a file up to a certain size when specified 3864s - reads the contents of a file from an offset of a specific size when specified 3864s - returns a String in BINARY encoding 3864s - returns a String in BINARY encoding regardless of Encoding.default_internal 3864s - raises an ArgumentError when not passed a valid length 3864s - raises an Errno::EINVAL when not passed a valid offset 3864s 3864s IO.binwrite 3864s - coerces the argument to a string using to_s 3864s - returns the number of bytes written 3864s - creates a file if missing 3864s - creates file if missing even if offset given 3864s - truncates the file and writes the given string 3864s - doesn't truncate the file and writes the given string if an offset is given 3864s - doesn't truncate and writes at the given offset after passing empty opts 3864s - accepts a :mode option 3864s - accepts a :flags option without :mode one 3864s - raises an error if readonly mode is specified 3864s - truncates if empty :opts provided and offset skipped 3864s 3864s IO#close_on_exec= 3864s - sets the close-on-exec flag if true 3864s - sets the close-on-exec flag if non-false 3864s - unsets the close-on-exec flag if false 3864s - unsets the close-on-exec flag if nil 3864s - raises IOError if called on a closed IO 3864s 3864s IO#close_on_exec? 3864s - returns true by default 3864s - returns true if set 3864s - raises IOError if called on a closed IO 3864s 3864s IO#close_read 3864s - closes the read end of a duplex I/O stream 3864s - does nothing on subsequent invocations 3864s - allows subsequent invocation of close 3864s - raises an IOError if the stream is writable and not duplexed 3864s - closes the stream if it is neither writable nor duplexed 3864s - does nothing on closed stream 3864s 3864s IO#close 3864s - closes the stream 3864s - returns nil 3864s - raises an IOError reading from a closed IO 3864s - raises an IOError writing to a closed IO 3864s - does not close the stream if autoclose is false 3864s - does nothing if already closed 3864s - does not call the #flush method but flushes the stream internally 3864s - raises an IOError with a clear message 3864s 3864s IO#close on an IO.popen stream 3867s - clears #pid 3870s - waits for the child to exit 3870s 3870s IO#close_write 3870s - closes the write end of a duplex I/O stream 3870s - does nothing on subsequent invocations 3870s - allows subsequent invocation of close 3870s - raises an IOError if the stream is readable and not duplexed 3870s - closes the stream if it is neither readable nor duplexed 3870s - flushes and closes the write stream 3870s - does nothing on closed stream 3870s 3870s IO#closed? 3870s - returns true on closed stream 3870s - returns false on open stream 3870s 3870s IO::SEEK_SET 3870s - is defined 3870s 3870s IO::SEEK_CUR 3870s - is defined 3870s 3870s IO::SEEK_END 3870s - is defined 3870s 3870s IO.copy_stream from an IO 3870s - raises an IOError if the source IO is not open for reading 3870s - does not close the source IO 3870s - does not change the IO offset when an offset is specified 3870s - does change the IO offset when an offset is not specified 3870s 3870s IO.copy_stream from an IO to a file name 3870s - copies the entire IO contents to the file 3870s - returns the number of bytes copied 3870s - copies only length bytes when specified 3870s - calls #to_path to convert on object to a file name 3870s - raises a TypeError if #to_path does not return a String 3870s - copies only length bytes from the offset 3870s 3870s IO.copy_stream from an IO to an IO 3870s - copies the entire IO contents to the IO 3870s - returns the number of bytes copied 3870s - starts writing at the destination IO's current position 3870s - leaves the destination IO position at the last write 3870s - raises an IOError if the destination IO is not open for writing 3870s - does not close the destination IO 3870s - copies only length bytes when specified 3870s - copies only length bytes from the offset 3870s 3870s IO.copy_stream from an IO to a Tempfile 3870s - copies the entire IO contents to the IO 3870s - returns the number of bytes copied 3870s - starts writing at the destination IO's current position 3870s - leaves the destination IO position at the last write 3870s - raises an IOError if the destination IO is not open for writing 3870s - does not close the destination IO 3870s - copies only length bytes when specified 3870s - copies only length bytes from the offset 3870s 3870s IO.copy_stream from a file name 3870s - calls #to_path to convert on object to a file name 3870s - raises a TypeError if #to_path does not return a String 3870s 3870s IO.copy_stream from a file name to a file name 3870s - copies the entire IO contents to the file 3870s - returns the number of bytes copied 3870s - copies only length bytes when specified 3870s - calls #to_path to convert on object to a file name 3870s - raises a TypeError if #to_path does not return a String 3870s - copies only length bytes from the offset 3870s 3870s IO.copy_stream from a file name to an IO 3870s - copies the entire IO contents to the IO 3870s - returns the number of bytes copied 3870s - starts writing at the destination IO's current position 3870s - leaves the destination IO position at the last write 3870s - raises an IOError if the destination IO is not open for writing 3870s - does not close the destination IO 3870s - copies only length bytes when specified 3870s - copies only length bytes from the offset 3870s 3870s IO.copy_stream from a pipe IO 3870s - does not close the source IO 3870s 3870s IO.copy_stream from a pipe IO to a file name 3870s - copies the entire IO contents to the file 3870s - returns the number of bytes copied 3870s - copies only length bytes when specified 3870s - calls #to_path to convert on object to a file name 3870s - raises a TypeError if #to_path does not return a String 3870s 3870s IO.copy_stream from a pipe IO to an IO 3870s - copies the entire IO contents to the IO 3870s - returns the number of bytes copied 3870s - starts writing at the destination IO's current position 3870s - leaves the destination IO position at the last write 3870s - raises an IOError if the destination IO is not open for writing 3870s - does not close the destination IO 3870s - copies only length bytes when specified 3870s 3870s IO.copy_stream with non-IO Objects 3870s - calls #write on the destination Object 3870s - does not call #pos on the source if no offset is given 3870s 3870s IO.copy_stream with a destination that does partial reads 3870s - calls #write repeatedly on the destination Object 3870s 3870s IO.copy_stream 3873s - does not use buffering when writing to STDOUT 3873s 3873s IO#dup 3873s - returns a new IO instance 3873s - sets a new descriptor on the returned object 3873s - allows closing the new IO without affecting the original 3873s - allows closing the original IO without affecting the new one 3873s - raises IOError on closed stream 3873s - always sets the autoclose flag for the new IO object 3873s 3873s IO#each_byte 3873s - raises IOError on closed stream 3873s - yields each byte 3873s 3873s IO#each_byte when no block is given 3873s - returns an Enumerator 3873s 3873s IO#each_byte when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each_byte 3873s - returns self on an empty stream 3873s 3873s IO#each_char 3873s - yields each character 3873s - returns itself 3873s - returns an enumerator for a closed stream 3873s - raises an IOError when an enumerator created on a closed stream is accessed 3873s - raises IOError on closed stream 3873s 3873s IO#each_char when no block is given 3873s - returns an Enumerator 3873s 3873s IO#each_char when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each_char 3873s - does not yield any characters on an empty stream 3873s 3873s IO#each_codepoint 3873s - yields each codepoint 3873s - yields each codepoint starting from the current position 3873s - raises an error if reading invalid sequence 3873s - does not change $_ 3873s - raises an IOError when self is not readable 3873s 3873s IO#each_codepoint when no block is given 3873s - returns an Enumerator 3873s 3873s IO#each_codepoint when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each_codepoint 3873s - calls the given block 3873s - returns self 3873s 3873s IO#each_codepoint 3873s - raises an exception at incomplete character before EOF when conversion takes place 3873s 3873s IO#each_line with no separator 3873s - yields each line to the passed block 3873s - yields each line starting from the current position 3873s - returns self 3873s - does not change $_ 3873s - raises an IOError when self is not readable 3873s - makes line count accessible via lineno 3873s - makes line count accessible via $. 3873s 3873s IO#each_line with no separator when no block is given 3873s - returns an Enumerator 3873s 3873s IO#each_line with no separator when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each_line with limit 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO#each_line when passed a String containing one space as a separator 3873s - uses the passed argument as the line separator 3873s - does not change $_ 3873s - tries to convert the passed separator to a String using #to_str 3873s 3873s IO#each_line when passed nil as a separator 3873s - yields self's content starting from the current position when the passed separator is nil 3873s 3873s IO#each_line when passed an empty String as a separator 3873s - yields each paragraph 3873s - discards leading newlines 3873s 3873s IO#each_line with both separator and limit when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each_line with both separator and limit when a block is given 3873s - accepts an empty block 3873s 3873s IO#each_line with both separator and limit when a block is given when passed nil as a separator 3873s - yields self's content starting from the current position when the passed separator is nil 3873s 3873s IO#each_line with both separator and limit when a block is given when passed an empty String as a separator 3873s - yields each paragraph 3873s - discards leading newlines 3873s 3873s IO#each_line when passed chomp 3873s - yields each line without trailing newline characters to the passed block 3873s 3873s IO#each_line when passed chomp and a separator 3873s - yields each line without separator to the passed block 3873s 3873s IO#each_line when passed chomp and empty line as a separator 3873s - yields each paragraph without trailing new line characters 3873s 3873s IO#each_line when passed chomp and nil as a separator 3873s - yields self's content without trailing new line character 3873s 3873s IO#each_line when passed chomp, nil as a separator, and a limit 3873s - yields each line of limit size without truncating trailing new line character 3873s 3873s IO#each_line when passed too many arguments 3873s - raises ArgumentError 3873s 3873s IO#each_line 3873s - uses $/ as the default line separator 3873s 3873s IO#each with no separator 3873s - yields each line to the passed block 3873s - yields each line starting from the current position 3873s - returns self 3873s - does not change $_ 3873s - raises an IOError when self is not readable 3873s - makes line count accessible via lineno 3873s - makes line count accessible via $. 3873s 3873s IO#each with no separator when no block is given 3873s - returns an Enumerator 3873s 3873s IO#each with no separator when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each with limit 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO#each when passed a String containing one space as a separator 3873s - uses the passed argument as the line separator 3873s - does not change $_ 3873s - tries to convert the passed separator to a String using #to_str 3873s 3873s IO#each when passed nil as a separator 3873s - yields self's content starting from the current position when the passed separator is nil 3873s 3873s IO#each when passed an empty String as a separator 3873s - yields each paragraph 3873s - discards leading newlines 3873s 3873s IO#each with both separator and limit when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO#each with both separator and limit when a block is given 3873s - accepts an empty block 3873s 3873s IO#each with both separator and limit when a block is given when passed nil as a separator 3873s - yields self's content starting from the current position when the passed separator is nil 3873s 3873s IO#each with both separator and limit when a block is given when passed an empty String as a separator 3873s - yields each paragraph 3873s - discards leading newlines 3873s 3873s IO#each when passed chomp 3873s - yields each line without trailing newline characters to the passed block 3873s 3873s IO#each when passed chomp and a separator 3873s - yields each line without separator to the passed block 3873s 3873s IO#each when passed chomp and empty line as a separator 3873s - yields each paragraph without trailing new line characters 3873s 3873s IO#each when passed chomp and nil as a separator 3873s - yields self's content without trailing new line character 3873s 3873s IO#each when passed chomp, nil as a separator, and a limit 3873s - yields each line of limit size without truncating trailing new line character 3873s 3873s IO#each when passed too many arguments 3873s - raises ArgumentError 3873s 3873s IO#each 3873s - uses $/ as the default line separator 3873s 3873s IO#eof? 3873s - returns true on an empty stream that has just been opened 3873s - raises IOError on stream not opened for reading 3873s 3873s IO#eof? 3873s - returns false when not at end of file 3873s - returns true after reading with read with no parameters 3873s - returns true after reading with read 3873s - returns true after reading with sysread 3873s - returns true after reading with readlines 3873s - returns false on just opened non-empty stream 3873s - does not consume the data from the stream 3873s - raises IOError on closed stream 3873s - raises IOError on stream closed for reading by close_read 3873s - returns true on one-byte stream after single-byte read 3873s 3873s IO#eof? 3873s - returns true on receiving side of Pipe when writing side is closed 3873s - returns false on receiving side of Pipe when writing side wrote some data 3873s 3873s IO#external_encoding 3873s - can be retrieved from a closed stream 3873s 3873s IO#external_encoding with 'r' mode when Encoding.default_internal is nil 3873s - returns Encoding.default_external if the external encoding is not set 3873s - returns Encoding.default_external when that encoding is changed after the instance is created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'r' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'r' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'rb' mode 3873s - returns Encoding::BINARY 3873s - returns the external encoding specified by the mode argument 3873s 3873s IO#external_encoding with 'r+' mode when Encoding.default_internal is nil 3873s - returns nil 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'r+' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'r+' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'w' mode when Encoding.default_internal is nil 3873s - returns nil 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'w' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'w' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'wb' mode 3873s - returns Encoding::BINARY 3873s - returns the external encoding specified by the mode argument 3873s 3873s IO#external_encoding with 'w+' mode when Encoding.default_internal is nil 3873s - returns nil 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'w+' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'w+' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a' mode when Encoding.default_internal is nil 3873s - returns nil 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a+' mode when Encoding.default_internal is nil 3873s - returns nil 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a+' mode when Encoding.default_external != Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#external_encoding with 'a+' mode when Encoding.default_external == Encoding.default_internal 3873s - returns the value of Encoding.default_external when the instance was created 3873s - returns the external encoding specified when the instance was created 3873s - returns the encoding set by #set_encoding 3873s 3873s IO#fcntl 3873s - raises IOError on closed stream 3873s 3873s IO#fdatasync 3873s - needs to be reviewed for spec completeness 3873s 3873s IO#fileno 3873s - returns the numeric file descriptor of the given IO object 3873s - raises IOError on closed stream 3873s 3873s IO#flush 3873s - raises IOError on closed stream 3873s 3873s IO#flush on a pipe 3873s - raises Errno::EPIPE if sync=false and the read end is closed 3873s 3873s IO.for_fd 3873s - creates an IO instance from an Integer argument 3873s - creates an IO instance when STDOUT is closed 3873s - creates an IO instance when STDERR is closed 3873s - calls #to_int on an object to convert to an Integer 3873s - accepts a :mode option 3873s - accepts a mode argument set to nil with a valid :mode option 3873s - accepts a mode argument with a :mode option set to nil 3873s - uses the external encoding specified in the mode argument 3873s - uses the external and the internal encoding specified in the mode argument 3873s - uses the external encoding specified via the :external_encoding option 3873s - uses the internal encoding specified via the :internal_encoding option 3873s - uses the colon-separated encodings specified via the :encoding option 3873s - uses the :encoding option as the external encoding when only one is given 3873s - uses the :encoding options as the external encoding when it's an Encoding object 3873s - uses the encoding specified via the :mode option hash 3873s - ignores the :internal_encoding option when the same as the external encoding 3873s - sets internal encoding to nil when passed '-' 3873s - sets binmode from mode string 3873s - does not set binmode without being asked 3873s - sets binmode from :binmode option 3873s - does not set binmode from false :binmode 3873s - sets external encoding to binary with binmode in mode string 3873s - sets external encoding to binary with :binmode option 3873s - does not use binary encoding when mode encoding is specified 3873s - does not use binary encoding when :encoding option is specified 3873s - does not use binary encoding when :external_encoding option is specified 3873s - does not use binary encoding when :internal_encoding option is specified 3873s - raises ArgumentError for nil options 3873s - coerces mode with #to_str 3873s - coerces mode with #to_int 3873s - coerces mode with #to_str when passed in options 3873s - coerces mode with #to_int when passed in options 3873s - coerces :encoding option with #to_str 3873s - coerces :external_encoding option with #to_str 3873s - coerces :internal_encoding option with #to_str 3873s - coerces options as third argument with #to_hash 3873s - coerces options as second argument with #to_hash 3873s - accepts an :autoclose option 3873s - accepts any truthy option :autoclose 3873s 3873s IO.for_fd 3873s - raises an Errno::EBADF if the file descriptor is not valid 3873s - raises an IOError if passed a closed stream 3873s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 3873s - raises ArgumentError if passed an empty mode string 3873s - raises an error if passed modes two ways 3873s - raises an error if passed encodings two ways 3873s - raises an error when trying to set both binmode and textmode 3873s - raises ArgumentError if not passed a hash or nil for options 3873s - raises ArgumentError if passed a hash for mode and nil for options 3873s 3873s IO.foreach 3873s - updates $. with each yield 3873s 3873s IO.foreach when the filename starts with | 3873s - gets data from the standard out of the subprocess 3873s 3873s IO.foreach 3873s - sets $_ to nil 3873s - raises TypeError if the first parameter is nil 3873s - raises an Errno::ENOENT if the file does not exist 3873s - yields a single string with entire content when the separator is nil 3873s - yields a sequence of paragraphs when the separator is an empty string 3873s - yields a sequence of lines without trailing newline characters when chomp is passed 3873s 3873s IO.foreach when no block is given 3873s - returns an Enumerator 3873s 3873s IO.foreach when no block is given returned Enumerator size 3873s - should return nil 3873s 3873s IO.foreach when passed name 3873s - calls #to_path to convert the name 3873s - defaults to $/ as the separator 3873s 3873s IO.foreach when passed name, object 3873s - calls #to_str to convert the object to a separator 3873s 3873s IO.foreach when passed name, object when the object is an Integer 3873s - defaults to $/ as the separator 3873s - uses the object as a limit if it is an Integer 3873s - ignores the object as a limit if it is negative 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO.foreach when passed name, object when the object is a String 3873s - uses the value as the separator 3873s - accepts non-ASCII data as separator 3873s 3873s IO.foreach when passed name, object when the object is neither Integer nor String 3873s - raises TypeError exception 3873s 3873s IO.foreach when passed name, keyword arguments 3873s - uses the keyword arguments as options 3873s 3873s IO.foreach when passed name, object, object when the first object is a String 3873s - uses the second object as a limit if it is an Integer 3873s - calls #to_int to convert the second object 3873s 3873s IO.foreach when passed name, object, object when the first object is not a String or Integer 3873s - calls #to_str to convert the object to a String 3873s - uses the second object as a limit if it is an Integer 3873s - calls #to_int to convert the second object 3873s 3873s IO.foreach when passed name, object, object when the second object is neither Integer nor String 3873s - raises TypeError exception 3873s 3873s IO.foreach when passed name, object, keyword arguments when the first object is an Integer 3873s - uses the keyword arguments as options 3873s 3873s IO.foreach when passed name, object, keyword arguments when the first object is a String 3873s - uses the keyword arguments as options 3873s 3873s IO.foreach when passed name, object, keyword arguments when the first object is not a String or Integer 3873s - uses the keyword arguments as options 3873s 3873s IO.foreach when passed name, separator, limit, keyword arguments 3873s - calls #to_path to convert the name object 3873s - calls #to_str to convert the separator object 3873s - calls #to_int to convert the limit argument 3873s - uses the keyword arguments as options 3873s 3873s IO.foreach when passed name, separator, limit, keyword arguments when passed chomp, nil as a separator, and a limit 3873s - yields each line of limit size without truncating trailing new line character 3873s 3873s IO#fsync 3873s - raises an IOError on closed stream 3873s - writes the buffered data to permanent storage 3873s 3873s IO#getbyte 3873s - returns the next byte from the stream 3873s - returns nil when invoked at the end of the stream 3873s - raises an IOError on closed stream 3873s 3873s IO#getbyte 3873s - returns nil on empty stream 3873s 3873s IO#getbyte 3873s - raises an IOError if the stream is not readable 3873s 3873s IO#getc 3873s - returns the next character from the stream 3873s - returns nil when invoked at the end of the stream 3873s - raises IOError on closed stream 3873s 3873s IO#getc 3873s - returns nil on empty stream 3873s 3873s IO#gets with ASCII separator 3873s - returns the separator's character representation 3873s 3873s IO#gets 3873s - assigns the returned line to $_ 3873s - returns nil if called at the end of the stream 3873s - raises IOError on closed stream 3873s 3873s IO#gets with no separator 3873s - returns the next line of string that is separated by $/ 3873s - updates lineno with each invocation 3873s - updates $. with each invocation 3873s 3873s IO#gets with nil separator 3873s - returns the entire contents 3873s - updates lineno with each invocation 3873s - updates $. with each invocation 3873s 3873s IO#gets with an empty String separator 3873s - returns the next paragraph 3873s - reads until the beginning of the next paragraph 3873s - updates lineno with each invocation 3873s - updates $. with each invocation 3873s 3873s IO#gets with an arbitrary String separator 3873s - reads up to and including the separator 3873s - updates lineno with each invocation 3873s - updates $. with each invocation 3873s 3873s IO#gets with an arbitrary String separator that consists of multiple bytes 3873s - should match the separator even if the buffer is filled over successive reads 3873s 3873s IO#gets when passed chomp 3873s - returns the first line without a trailing newline character 3873s 3873s IO#gets 3873s - raises an IOError if the stream is opened for append only 3873s - raises an IOError if the stream is opened for writing only 3873s 3873s IO#gets 3873s - calls #to_int to convert a single object argument to an Integer limit 3873s - calls #to_int to convert the second object argument to an Integer limit 3873s - calls #to_str to convert the first argument to a String when passed a limit 3873s - reads to the default separator when passed a single argument greater than the number of bytes to the separator 3873s - reads limit bytes when passed a single argument less than the number of bytes to the default separator 3873s - reads limit bytes when passed nil and a limit 3873s - reads all bytes when the limit is higher than the available bytes 3873s - reads until the next paragraph when passed '' and a limit greater than the next paragraph 3873s - reads limit bytes when passed '' and a limit less than the next paragraph 3873s - reads all bytes when pass a separator and reading more than all bytes 3873s - returns empty string when 0 passed as a limit 3873s - does not accept limit that doesn't fit in a C off_t 3873s 3873s IO#gets 3873s - reads limit bytes and extra bytes when limit is reached not at character boundary 3873s - read limit bytes and extra bytes with maximum of 16 3873s 3873s IO#gets 3873s - uses the default external encoding 3873s - uses the IO object's external encoding, when set 3873s - transcodes into the default internal encoding 3873s - transcodes into the IO object's internal encoding, when set 3873s - overwrites the default external encoding with the IO object's own external encoding 3873s - ignores the internal encoding if the default external encoding is BINARY 3873s - transcodes to internal encoding if the IO object's external encoding is BINARY 3873s 3873s IO#initialize 3873s - reassociates the IO instance with the new descriptor when passed an Integer 3873s - calls #to_int to coerce the object passed as an fd 3873s - raises a TypeError when passed an IO 3873s - raises a TypeError when passed nil 3873s - raises a TypeError when passed a String 3873s - raises IOError on closed stream 3873s - raises an Errno::EBADF when given an invalid file descriptor 3873s 3873s IO#inspect 3873s - contains the file descriptor number 3873s - contains "(closed)" if the stream is closed 3873s - reports IO as its Method object's owner 3873s 3873s IO#internal_encoding 3873s - can be retrieved from a closed stream 3873s 3873s IO#internal_encoding with 'r' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'r' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'r' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO#internal_encoding with 'r+' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'r+' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'r+' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO#internal_encoding with 'w' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'w' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'w' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO#internal_encoding with 'w+' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'w+' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'w+' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO#internal_encoding with 'a' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'a' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'a' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO#internal_encoding with 'a+' mode when Encoding.default_internal is not set 3873s - returns nil if the internal encoding is not set 3873s - returns nil if Encoding.default_internal is changed after the instance is created 3873s - returns the value set when the instance was created 3873s - returns the value set by #set_encoding 3873s 3873s IO#internal_encoding with 'a+' mode when Encoding.default_internal == Encoding.default_external 3873s - returns nil 3873s - returns nil regardless of Encoding.default_internal changes 3873s 3873s IO#internal_encoding with 'a+' mode when Encoding.default_internal != Encoding.default_external 3873s - returns the value of Encoding.default_internal when the instance was created if the internal encoding is not set 3873s - does not change when Encoding.default_internal is changed 3873s - returns the internal encoding set when the instance was created 3873s - does not change when set and Encoding.default_internal is changed 3873s - returns the value set by #set_encoding 3873s - returns nil when Encoding.default_external is BINARY and the internal encoding is not set 3873s - returns nil when the external encoding is BINARY and the internal encoding is not set 3873s 3873s IO 3873s - includes File::Constants 3873s - includes Enumerable 3873s 3873s IO#ioctl 3873s - raises IOError on closed stream 3873s 3873s IO#isatty 3873s - returns true if this stream is a terminal device (TTY) 3873s - returns false if this stream is not a terminal device (TTY) 3873s - raises IOError on closed stream 3873s 3873s IO#lineno 3873s - raises an IOError on a closed stream 3873s - returns the current line number 3873s 3873s IO#lineno= 3873s - raises an IOError on a closed stream 3873s - calls #to_int on a non-numeric argument 3873s - truncates a Float argument 3873s - raises TypeError if cannot convert argument to Integer implicitly 3873s - does not accept Integers that don't fit in a C int 3873s - sets the current line number to the given value 3873s - does not change $. 3873s - does not change $. until next read 3873s 3873s IO.new 3873s - creates an IO instance from an Integer argument 3873s - creates an IO instance when STDOUT is closed 3873s - creates an IO instance when STDERR is closed 3873s - calls #to_int on an object to convert to an Integer 3873s - accepts a :mode option 3873s - accepts a mode argument set to nil with a valid :mode option 3873s - accepts a mode argument with a :mode option set to nil 3873s - uses the external encoding specified in the mode argument 3873s - uses the external and the internal encoding specified in the mode argument 3873s - uses the external encoding specified via the :external_encoding option 3873s - uses the internal encoding specified via the :internal_encoding option 3873s - uses the colon-separated encodings specified via the :encoding option 3873s - uses the :encoding option as the external encoding when only one is given 3873s - uses the :encoding options as the external encoding when it's an Encoding object 3873s - ignores the :encoding option when the :external_encoding option is present 3873s - ignores the :encoding option when the :internal_encoding option is present 3873s - uses the encoding specified via the :mode option hash 3873s - ignores the :internal_encoding option when the same as the external encoding 3873s - sets internal encoding to nil when passed '-' 3873s - sets binmode from mode string 3873s - does not set binmode without being asked 3873s - sets binmode from :binmode option 3873s - does not set binmode from false :binmode 3873s - sets external encoding to binary with binmode in mode string 3873s - sets external encoding to binary with :binmode option 3873s - does not use binary encoding when mode encoding is specified 3873s - does not use binary encoding when :encoding option is specified 3873s - does not use binary encoding when :external_encoding option is specified 3873s - does not use binary encoding when :internal_encoding option is specified 3873s - raises ArgumentError for nil options 3873s - coerces mode with #to_str 3873s - coerces mode with #to_int 3873s - coerces mode with #to_str when passed in options 3873s - coerces mode with #to_int when passed in options 3873s - coerces :encoding option with #to_str 3873s - coerces :external_encoding option with #to_str 3873s - coerces :internal_encoding option with #to_str 3873s - coerces options as third argument with #to_hash 3873s - coerces options as second argument with #to_hash 3873s - accepts an :autoclose option 3873s - accepts any truthy option :autoclose 3873s - does not use the given block and warns to use IO::open 3873s 3873s IO.new 3873s - raises an Errno::EBADF if the file descriptor is not valid 3873s - raises an IOError if passed a closed stream 3873s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 3873s - raises ArgumentError if passed an empty mode string 3873s - raises an error if passed modes two ways 3873s - raises an error if passed encodings two ways 3873s - raises an error if passed matching binary/text mode two ways 3873s - raises an error if passed conflicting binary/text mode two ways 3873s - raises an error when trying to set both binmode and textmode 3873s - raises ArgumentError if not passed a hash or nil for options 3873s - raises ArgumentError if passed a hash for mode and nil for options 3873s 3873s IO#nonblock? 3873s - returns false for a file by default 3873s 3873s IO#nonblock= 3873s - changes the IO to non-blocking mode 3873s 3873s IO.open 3873s - creates an IO instance from an Integer argument 3873s - creates an IO instance when STDOUT is closed 3873s - creates an IO instance when STDERR is closed 3873s - calls #to_int on an object to convert to an Integer 3873s - accepts a :mode option 3873s - accepts a mode argument set to nil with a valid :mode option 3873s - accepts a mode argument with a :mode option set to nil 3873s - uses the external encoding specified in the mode argument 3873s - uses the external and the internal encoding specified in the mode argument 3873s - uses the external encoding specified via the :external_encoding option 3873s - uses the internal encoding specified via the :internal_encoding option 3873s - uses the colon-separated encodings specified via the :encoding option 3873s - uses the :encoding option as the external encoding when only one is given 3873s - uses the :encoding options as the external encoding when it's an Encoding object 3873s - uses the encoding specified via the :mode option hash 3873s - ignores the :internal_encoding option when the same as the external encoding 3873s - sets internal encoding to nil when passed '-' 3873s - sets binmode from mode string 3873s - does not set binmode without being asked 3873s - sets binmode from :binmode option 3873s - does not set binmode from false :binmode 3873s - sets external encoding to binary with binmode in mode string 3873s - sets external encoding to binary with :binmode option 3873s - does not use binary encoding when mode encoding is specified 3873s - does not use binary encoding when :encoding option is specified 3873s - does not use binary encoding when :external_encoding option is specified 3873s - does not use binary encoding when :internal_encoding option is specified 3873s - raises ArgumentError for nil options 3873s - coerces mode with #to_str 3873s - coerces mode with #to_int 3873s - coerces mode with #to_str when passed in options 3873s - coerces mode with #to_int when passed in options 3873s - coerces :encoding option with #to_str 3873s - coerces :external_encoding option with #to_str 3873s - coerces :internal_encoding option with #to_str 3873s - coerces options as third argument with #to_hash 3873s - coerces options as second argument with #to_hash 3873s - accepts an :autoclose option 3873s - accepts any truthy option :autoclose 3873s 3873s IO.open 3873s - raises an Errno::EBADF if the file descriptor is not valid 3873s - raises an IOError if passed a closed stream 3873s - raises an Errno::EINVAL if the new mode is not compatible with the descriptor's current mode 3873s - raises ArgumentError if passed an empty mode string 3873s - raises an error if passed modes two ways 3873s - raises an error if passed encodings two ways 3873s - raises an error when trying to set both binmode and textmode 3873s - raises ArgumentError if not passed a hash or nil for options 3873s - raises ArgumentError if passed a hash for mode and nil for options 3873s 3873s IO.open 3873s - calls #close after yielding to the block 3873s - propagate an exception in the block after calling #close 3873s - propagates an exception raised by #close that is not a StandardError 3873s - propagates an exception raised by #close that is a StandardError 3873s - does not propagate an IOError with 'closed stream' message raised by #close 3873s - does not set last error when an IOError with 'closed stream' raised by #close 3873s 3873s IO#<< 3873s - writes an object to the IO stream 3873s - calls #to_s on the object to print it 3873s - raises an error if the stream is closed 3873s - returns self 3873s 3873s IO.pipe 3873s - creates a two-ended pipe 3873s - returns two IO objects 3873s - returns instances of a subclass when called on a subclass 3873s 3873s IO.pipe passed a block 3873s - yields two IO objects 3873s - returns the result of the block 3873s - closes both IO objects 3873s - closes both IO objects when the block raises 3873s - allows IO objects to be closed within the block 3873s 3873s IO.pipe 3873s - sets the external encoding of the read end to the default when passed no arguments 3873s - sets the internal encoding of the read end to the default when passed no arguments 3873s - sets the internal encoding to nil if the same as the external 3873s - sets the external encoding of the read end when passed an Encoding argument 3873s - sets the external and internal encodings of the read end when passed two Encoding arguments 3873s - sets the external encoding of the read end when passed the name of an Encoding 3873s - accepts 'bom|' prefix for external encoding 3873s - sets the external and internal encodings specified as a String and separated with a colon 3873s - accepts 'bom|' prefix for external encoding when specifying 'external:internal' 3873s - sets the external and internal encoding when passed two String arguments 3873s - accepts an options Hash with one String encoding argument 3873s - accepts an options Hash with two String encoding arguments 3873s - calls #to_hash to convert an options argument 3873s - calls #to_str to convert the first argument to a String 3873s - calls #to_str to convert the second argument to a String 3873s - sets no external encoding for the write end 3873s - sets no internal encoding for the write end 3873s 3873s IO#pos 3873s - gets the offset 3873s - raises IOError on closed stream 3873s - resets #eof? 3873s 3873s IO#pos= 3873s - sets the offset 3873s - converts arguments to Integers 3873s - raises TypeError when cannot convert implicitly argument to Integer 3873s - does not accept Integers that don't fit in a C off_t 3873s - raises IOError on closed stream 3873s 3873s IO#pread 3873s - accepts a length, and an offset 3873s - accepts a length, an offset, and an output buffer 3873s - shrinks the buffer in case of less bytes read 3873s - grows the buffer in case of more bytes read 3873s - does not advance the file pointer 3873s - ignores the current offset 3873s - returns an empty string for maxlen = 0 3873s - ignores the offset for maxlen = 0, even if it is out of file bounds 3873s - does not reset the buffer when reading with maxlen = 0 3873s - converts offset to Integer using #to_int 3873s - converts a buffer to String using to_str 3873s - raises TypeError if maxlen is not an Integer and cannot be coerced into Integer 3873s - raises TypeError if offset is not an Integer and cannot be coerced into Integer 3873s - raised Errno::EINVAL for negative values of offset 3873s - raises TypeError if the buffer is not a String and cannot be coerced into String 3873s - raises EOFError if end-of-file is reached 3873s - raises IOError when file is not open in read mode 3873s - raises IOError when file is closed 3873s 3873s IO#print 3873s - returns nil 3873s - writes $_.to_s followed by $\ (if any) to the stream if no arguments given 3873s - calls obj.to_s and not obj.to_str then writes the record separator 3873s - writes each obj.to_s to the stream separated by $, (if any) and appends $\ (if any) given multiple objects 3873s - raises IOError on closed stream 3873s 3873s IO#printf 3873s - calls #to_str to convert the format object to a String 3873s - writes the #sprintf formatted string 3873s - raises IOError on closed stream 3873s 3873s IO#putc 3873s - calls #to_int to convert an object to an Integer 3873s - raises IOError on a closed stream 3873s - raises a TypeError when passed nil 3873s - raises a TypeError when passed false 3873s - raises a TypeError when passed true 3873s 3873s IO#putc with an Integer argument 3873s - writes one character as a String 3873s - writes the low byte as a String 3873s 3873s IO#putc with a String argument 3873s - writes one character 3873s - writes the first character 3873s 3873s IO#puts 3873s - writes just a newline when given no args 3873s - writes just a newline when given just a newline 3873s - writes empty string with a newline when given nil as an arg 3873s - writes empty string with a newline when when given nil as multiple args 3873s - calls :to_s before writing non-string objects that don't respond to :to_ary 3873s - returns general object info if :to_s does not return a string 3873s - writes each arg if given several 3873s - flattens a nested array before writing it 3873s - writes nothing for an empty array 3873s - writes [...] for a recursive array arg 3873s - writes a newline after objects that do not end in newlines 3873s - does not write a newline after objects that end in newlines 3873s - ignores the $/ separator global 3873s - raises IOError on closed stream 3873s - writes crlf when IO is opened with newline: :crlf 3873s - writes cr when IO is opened with newline: :cr 3873s - writes lf when IO is opened with newline: :lf 3873s 3873s IO#pwrite 3873s - returns the number of bytes written 3873s - accepts a string and an offset 3873s - does not advance the pointer in the file 3873s - calls #to_int on the offset 3873s - raises IOError when file is not open in write mode 3873s - raises IOError when file is closed 3873s - raises a TypeError if the offset cannot be converted to an Integer 3873s 3873s IO#read_nonblock 3873s - raises an exception extending IO::WaitReadable when there is no data 3873s - sets the IO in nonblock mode 3873s - returns at most the number of bytes requested 3873s - reads after ungetc with data in the buffer 3873s - raises an exception after ungetc with data in the buffer and character conversion enabled 3873s - returns less data if that is all that is available 3873s - allows for reading 0 bytes before any write 3873s - allows for reading 0 bytes after a write 3873s - raises ArgumentError when length is less than 0 3873s - reads into the passed buffer 3873s - returns the passed buffer 3873s - discards the existing buffer content upon successful read 3873s - discards the existing buffer content upon error 3873s - raises IOError on closed stream 3873s - raises EOFError when the end is reached 3873s - preserves the encoding of the given buffer 3873s 3873s IO#read_nonblock when exception option is set to false when there is no data 3873s - returns :wait_readable 3873s 3873s IO#read_nonblock when exception option is set to false when the end is reached 3873s - returns nil 3873s 3873s IO.read 3873s - reads the contents of a file 3873s - calls #to_path on non-String arguments 3873s - accepts an empty options Hash 3873s - accepts a length, and empty options Hash 3873s - accepts a length, offset, and empty options Hash 3873s - raises an IOError if the options Hash specifies write mode 3873s - raises an IOError if the options Hash specifies append only mode 3873s - reads the file if the options Hash includes read mode 3873s - reads the file if the options Hash includes read/write mode 3873s - reads the file if the options Hash includes read/write append mode 3873s - uses an :open_args option 3873s - disregards other options if :open_args is given 3873s - doesn't require mode to be specified in :open_args 3873s - doesn't require mode to be specified in :open_args even if flags option passed 3873s - treats second nil argument as no length limit 3873s - treats third nil argument as 0 3873s - reads the contents of a file up to a certain size when specified 3873s - reads the contents of a file from an offset of a specific size when specified 3873s - returns nil at end-of-file when length is passed 3873s - returns an empty string when reading zero bytes 3873s - returns a String in BINARY when passed a size 3873s - raises an Errno::ENOENT when the requested file does not exist 3873s - raises a TypeError when not passed a String type 3873s - raises an ArgumentError when not passed a valid length 3873s - raises an Errno::EINVAL when not passed a valid offset 3873s - uses the external encoding specified via the :external_encoding option 3873s - uses the external encoding specified via the :encoding option 3873s 3873s IO.read from a pipe 3873s - runs the rest as a subprocess and returns the standard output 3873s - reads only the specified number of bytes requested 3873s - raises Errno::ESPIPE if passed an offset 3873s 3873s IO.read on an empty file 3873s - returns nil when length is passed 3873s - returns an empty string when no length is passed 3873s 3873s IO#read 3873s - can be read from consecutively 3873s - treats first nil argument as no length limit 3873s - raises an ArgumentError when not passed a valid length 3873s - clears the output buffer if there is nothing to read 3873s - raise FrozenError if the output buffer is frozen 3873s - raise FrozenError if the output buffer is frozen (2) 3873s - consumes zero bytes when reading zero bytes 3873s - is at end-of-file when everything has been read 3873s - reads the contents of a file 3873s - places the specified number of bytes in the buffer 3873s - expands the buffer when too small 3873s - overwrites the buffer 3873s - truncates the buffer when too big 3873s - returns the given buffer 3873s - returns the given buffer when there is nothing to read 3873s - coerces the second argument to string and uses it as a buffer 3873s - returns an empty string at end-of-file 3873s - reads the contents of a file when more bytes are specified 3873s - returns an empty string at end-of-file 3873s - returns an empty string when the current pos is bigger than the content size 3873s - returns nil at end-of-file with a length 3873s - with length argument returns nil when the current pos is bigger than the content size 3873s - raises IOError on closed stream 3873s - raises ArgumentError when length is less than 0 3873s - raises IOError when stream is closed by another thread 3873s 3873s IO#read 3873s - ignores unicode encoding 3873s 3873s IO#read in binary mode 3873s - does not transcode file contents when Encoding.default_internal is set 3873s 3873s IO#read in text mode 3873s - reads data according to the internal encoding 3873s 3873s IO.read with BOM 3873s - reads a file without a bom 3873s - reads a file with a utf-8 bom 3873s - reads a file with a utf-16le bom 3873s - reads a file with a utf-16be bom 3873s - reads a file with a utf-32le bom 3873s - reads a file with a utf-32be bom 3873s 3873s IO#read when IO#external_encoding and IO#internal_encoding are nil 3873s - sets the String encoding to Encoding.default_external 3873s 3873s IO#read with internal encoding not specified 3873s - does not transcode the String 3873s - sets the String encoding to the external encoding 3873s - reads bytes when passed a size 3873s - returns a String in BINARY when passed a size 3873s - does not change the buffer's encoding when passed a limit 3873s - truncates the buffer but does not change the buffer's encoding when no data remains 3873s 3873s IO#read with internal encoding specified by open mode 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s - reads bytes when passed a size 3873s - returns a String in BINARY when passed a size 3873s - does not change the buffer's encoding when passed a limit 3873s - truncates the buffer but does not change the buffer's encoding when no data remains 3873s 3873s IO#read with internal encoding specified by open mode when passed nil for limit 3873s - sets the buffer to a transcoded String 3873s - sets the buffer's encoding to the internal encoding 3873s 3873s IO#read with internal encoding specified by mode: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s - reads bytes when passed a size 3873s - returns a String in BINARY when passed a size 3873s - does not change the buffer's encoding when passed a limit 3873s - truncates the buffer but does not change the buffer's encoding when no data remains 3873s 3873s IO#read with internal encoding specified by mode: option when passed nil for limit 3873s - sets the buffer to a transcoded String 3873s - sets the buffer's encoding to the internal encoding 3873s 3873s IO#read with internal encoding specified by internal_encoding: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s - reads bytes when passed a size 3873s - returns a String in BINARY when passed a size 3873s - does not change the buffer's encoding when passed a limit 3873s - truncates the buffer but does not change the buffer's encoding when no data remains 3873s 3873s IO#read with internal encoding specified by internal_encoding: option when passed nil for limit 3873s - sets the buffer to a transcoded String 3873s - sets the buffer's encoding to the internal encoding 3873s 3873s IO#read with internal encoding specified by encoding: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s - reads bytes when passed a size 3873s - returns a String in BINARY when passed a size 3873s - does not change the buffer's encoding when passed a limit 3873s - truncates the buffer but does not change the buffer's encoding when no data remains 3873s 3873s IO#read with internal encoding specified by encoding: option when passed nil for limit 3873s - sets the buffer to a transcoded String 3873s - sets the buffer's encoding to the internal encoding 3873s 3873s IO#read with large data 3873s - reads all the data at once 3873s - reads only the requested number of bytes 3873s 3873s IO#readbyte 3873s - reads one byte from the stream 3873s - raises EOFError on EOF 3873s 3873s IO#readchar 3873s - returns the next string from the stream 3873s - raises an EOFError when invoked at the end of the stream 3873s - raises IOError on closed stream 3873s 3873s IO#readchar with internal encoding not specified 3873s - does not transcode the String 3873s - sets the String encoding to the external encoding 3873s 3873s IO#readchar with internal encoding specified by open mode 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s 3873s IO#readchar with internal encoding specified by mode: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s 3873s IO#readchar with internal encoding specified by internal_encoding: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s 3873s IO#readchar with internal encoding specified by encoding: option 3873s - returns a transcoded String 3873s - sets the String encoding to the internal encoding 3873s 3873s IO#readchar 3873s - raises EOFError on empty stream 3873s 3873s IO#readline 3873s - returns the next line on the stream 3873s - goes back to first position after a rewind 3873s - returns characters after the position set by #seek 3873s - raises EOFError on end of stream 3873s - raises IOError on closed stream 3873s - assigns the returned line to $_ 3873s 3873s IO#readline when passed limit 3873s - reads limit bytes 3873s - returns an empty string when passed 0 as a limit 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO#readline when passed chomp 3873s - returns the first line without a trailing newline character 3873s 3873s IO#readlines 3873s - raises an IOError if the stream is closed 3873s 3873s IO#readlines when passed no arguments 3873s - returns an Array containing lines based on $/ 3873s 3873s IO#readlines when passed no arguments 3873s - updates self's position 3873s - updates self's lineno based on the number of lines read 3873s - does not change $_ 3873s - returns an empty Array when self is at the end 3873s 3873s IO#readlines when passed nil 3873s - returns the remaining content as one line starting at the current position 3873s 3873s IO#readlines when passed an empty String 3873s - returns an Array containing all paragraphs 3873s 3873s IO#readlines when passed a separator 3873s - returns an Array containing lines based on the separator 3873s - returns an empty Array when self is at the end 3873s - updates self's lineno based on the number of lines read 3873s - updates self's position based on the number of characters read 3873s - does not change $_ 3873s - tries to convert the passed separator to a String using #to_str 3873s 3873s IO#readlines when passed limit 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO#readlines when passed chomp 3873s - returns the first line without a trailing newline character 3873s 3873s IO#readlines when passed arbitrary keyword argument 3873s - tolerates it 3873s 3873s IO#readlines 3873s - raises an IOError if the stream is opened for append only 3873s - raises an IOError if the stream is opened for write only 3873s 3873s IO.readlines 3873s - does not change $_ 3873s - raises TypeError if the first parameter is nil 3873s - raises an Errno::ENOENT if the file does not exist 3873s - yields a single string with entire content when the separator is nil 3873s - yields a sequence of paragraphs when the separator is an empty string 3873s - yields a sequence of lines without trailing newline characters when chomp is passed 3873s 3873s IO.readlines when passed a string that starts with a | 3873s - gets data from the standard out of the subprocess 3873s 3873s IO.readlines when passed name 3873s - calls #to_path to convert the name 3873s - defaults to $/ as the separator 3873s 3873s IO.readlines when passed name, object 3873s - calls #to_str to convert the object to a separator 3873s 3873s IO.readlines when passed name, object when the object is an Integer 3873s - defaults to $/ as the separator 3873s - uses the object as a limit if it is an Integer 3873s - ignores the object as a limit if it is negative 3873s - does not accept Integers that don't fit in a C off_t 3873s 3873s IO.readlines when passed name, object when the object is a String 3873s - uses the value as the separator 3873s - accepts non-ASCII data as separator 3873s 3873s IO.readlines when passed name, object when the object is neither Integer nor String 3873s - raises TypeError exception 3873s 3873s IO.readlines when passed name, keyword arguments 3873s - uses the keyword arguments as options 3873s 3873s IO.readlines when passed name, object, object when the first object is a String 3873s - uses the second object as a limit if it is an Integer 3873s - calls #to_int to convert the second object 3873s 3873s IO.readlines when passed name, object, object when the first object is not a String or Integer 3873s - calls #to_str to convert the object to a String 3873s - uses the second object as a limit if it is an Integer 3873s - calls #to_int to convert the second object 3873s 3873s IO.readlines when passed name, object, object when the second object is neither Integer nor String 3873s - raises TypeError exception 3873s 3873s IO.readlines when passed name, object, keyword arguments when the first object is an Integer 3873s - uses the keyword arguments as options 3873s 3873s IO.readlines when passed name, object, keyword arguments when the first object is a String 3873s - uses the keyword arguments as options 3873s 3873s IO.readlines when passed name, object, keyword arguments when the first object is not a String or Integer 3873s - uses the keyword arguments as options 3873s 3873s IO.readlines when passed name, separator, limit, keyword arguments 3873s - calls #to_path to convert the name object 3873s - calls #to_str to convert the separator object 3873s - calls #to_int to convert the limit argument 3873s - uses the keyword arguments as options 3873s 3873s IO.readlines when passed name, separator, limit, keyword arguments when passed chomp, nil as a separator, and a limit 3873s - yields each line of limit size without truncating trailing new line character 3873s 3873s IO.readlines 3873s - encodes lines using the default external encoding 3873s - encodes lines using the default internal encoding, when set 3873s - ignores the default internal encoding if the external encoding is BINARY 3873s 3873s IO#readpartial 3873s - raises IOError on closed stream 3873s - reads at most the specified number of bytes 3873s - reads after ungetc with data in the buffer 3873s - reads after ungetc with multibyte characters in the buffer 3873s - reads after ungetc without data in the buffer 3873s - discards the existing buffer content upon successful read 3873s - raises EOFError on EOF 3873s - discards the existing buffer content upon error 3873s - raises IOError if the stream is closed 3873s - raises ArgumentError if the negative argument is provided 3873s - immediately returns an empty string if the length argument is 0 3873s - clears and returns the given buffer if the length argument is 0 3873s - preserves the encoding of the given buffer 3873s 3873s IO#reopen 3873s - calls #to_io to convert an object 3873s - changes the class of the instance to the class of the object returned by #to_io 3873s - raises an IOError if the object returned by #to_io is closed 3873s - raises a TypeError if #to_io does not return an IO instance 3873s - raises an IOError when called on a closed stream with an object 3873s - raises an IOError if the IO argument is closed 3873s - raises an IOError when called on a closed stream with an IO 3873s 3873s IO#reopen with a String 3873s - does not raise an exception when called on a closed stream with a path 3873s - returns self 3873s - positions a newly created instance at the beginning of the new stream 3873s - positions an instance that has been read from at the beginning of the new stream 3873s - passes all mode flags through 3873s - calls #to_path on non-String arguments 3873s 3873s IO#reopen with a String 3873s - opens a path after writing to the original file descriptor 3873s - always resets the close-on-exec flag to true on non-STDIO objects 3873s - creates the file if it doesn't exist if the IO is opened in write mode 3873s - creates the file if it doesn't exist if the IO is opened in write mode 3873s 3873s IO#reopen with a String 3873s - raises an Errno::ENOENT if the file does not exist and the IO is not opened in write mode 3873s 3873s IO#reopen with an IO at EOF 3873s - resets the EOF status to false 3873s 3873s IO#reopen with an IO 3873s - does not change the object_id 3873s - reads from the beginning if the other IO has not been read from 3873s - reads from the current position of the other IO's stream 3873s 3873s IO#reopen with an IO 3873s - associates the IO instance with the other IO's stream 3873s - always resets the close-on-exec flag to true on non-STDIO objects 3873s - may change the class of the instance 3873s - sets path equals to the other IO's path if other IO is File 3873s 3873s IO#rewind 3873s - positions the instance to the beginning of input 3873s - positions the instance to the beginning of output for write-only IO 3873s - positions the instance to the beginning of input and clears EOF 3873s - sets lineno to 0 3873s - returns 0 3873s - raises IOError on closed stream 3873s 3873s IO#seek 3873s - sets the offset 3873s - converts arguments to Integers 3873s - raises TypeError when cannot convert implicitly argument to Integer 3873s - does not accept Integers that don't fit in a C off_t 3873s - raises IOError on closed stream 3873s 3873s IO#seek 3873s - moves the read position relative to the current position with SEEK_CUR 3873s - moves the read position relative to the start with SEEK_SET 3873s - moves the read position relative to the end with SEEK_END 3873s - moves the read position and clears EOF with SEEK_SET 3873s - moves the read position and clears EOF with SEEK_CUR 3873s - moves the read position and clears EOF with SEEK_END 3873s 3873s IO.select 3873s - blocks for duration of timeout and returns nil if there are no objects ready for I/O 3873s - returns immediately all objects that are ready for I/O when timeout is 0 3873s - returns nil after timeout if there are no objects ready for I/O 3873s - returns supplied objects when they are ready for I/O 3873s - leaves out IO objects for which there is no I/O ready 3873s - returns supplied objects correctly when monitoring the same object in different arrays 3873s - returns the pipe read end in read set if the pipe write end is closed concurrently 3873s - invokes to_io on supplied objects that are not IO and returns the supplied objects 3873s - raises TypeError if supplied objects are not IO 3873s - raises a TypeError if the specified timeout value is not Numeric 3873s - raises TypeError if the first three arguments are not Arrays 3873s - raises an ArgumentError when passed a negative timeout 3873s 3873s IO.select returns the available descriptors when the file descriptor 3873s - is in both read and error arrays 3873s - is in both write and error arrays 3873s - is in both read and write arrays 3873s 3873s IO.select when passed nil for timeout 3873s - sleeps forever and sets the thread status to 'sleep' 3873s 3873s IO#set_encoding_by_bom 3873s - returns nil if not readable 3873s - returns the result encoding if found BOM UTF-8 sequence 3873s - returns the result encoding if found BOM UTF_16LE sequence 3873s - returns the result encoding if found BOM UTF_16BE sequence 3873s - returns the result encoding if found BOM UTF_32LE sequence 3873s - returns the result encoding if found BOM UTF_32BE sequence 3873s - returns nil if io is empty 3873s - returns nil if UTF-8 BOM sequence is incomplete 3873s - returns nil if UTF-16BE BOM sequence is incomplete 3873s - returns nil if UTF-16LE/UTF-32LE BOM sequence is incomplete 3873s - returns nil if UTF-32BE BOM sequence is incomplete 3873s - returns nil if found BOM sequence not provided 3873s - returns exception if io not in binary mode 3873s - returns exception if encoding already set 3873s - returns exception if encoding conversion is already set 3873s 3873s IO#set_encoding when passed nil, nil with 'r' mode 3873s - sets the encodings to the current Encoding defaults 3873s - prevents the #internal_encoding from changing when Encoding.default_internal is changed 3873s - allows the #external_encoding to change when Encoding.default_external is changed 3873s 3873s IO#set_encoding when passed nil, nil with 'rb' mode 3873s - returns Encoding.default_external 3873s 3873s IO#set_encoding when passed nil, nil with 'r+' mode 3873s - sets the encodings to nil when they were set previously 3873s - sets the encodings to nil when the IO is built with no explicit encoding 3873s - prevents the encodings from changing when Encoding defaults are changed 3873s - sets the encodings to the current Encoding defaults 3873s 3873s IO#set_encoding when passed nil, nil with 'w' mode 3873s - sets the encodings to nil when they were set previously 3873s - sets the encodings to nil when the IO is built with no explicit encoding 3873s - prevents the encodings from changing when Encoding defaults are changed 3873s - sets the encodings to the current Encoding defaults 3873s 3873s IO#set_encoding when passed nil, nil with 'w+' mode 3873s - sets the encodings to nil when they were set previously 3873s - sets the encodings to nil when the IO is built with no explicit encoding 3873s - prevents the encodings from changing when Encoding defaults are changed 3873s - sets the encodings to the current Encoding defaults 3873s 3873s IO#set_encoding when passed nil, nil with 'a' mode 3873s - sets the encodings to nil when they were set previously 3873s - sets the encodings to nil when the IO is built with no explicit encoding 3873s - prevents the encodings from changing when Encoding defaults are changed 3873s - sets the encodings to the current Encoding defaults 3873s 3873s IO#set_encoding when passed nil, nil with 'a+' mode 3873s - sets the encodings to nil when they were set previously 3873s - sets the encodings to nil when the IO is built with no explicit encoding 3873s - prevents the encodings from changing when Encoding defaults are changed 3873s - sets the encodings to the current Encoding defaults 3873s 3873s IO#set_encoding when passed nil, nil with standard IOs 3873s - correctly resets them 3873s 3873s IO#set_encoding 3873s - returns self 3873s - sets the external encoding when passed an Encoding argument 3873s - sets the external and internal encoding when passed two Encoding arguments 3873s - sets the external encoding when passed the name of an Encoding 3873s - ignores the internal encoding if the same as external when passed Encoding objects 3873s - ignores the internal encoding if the same as external when passed encoding names separated by ':' 3873s - sets the external and internal encoding when passed the names of Encodings separated by ':' 3873s - sets the external and internal encoding when passed two String arguments 3873s - calls #to_str to convert an abject to a String 3873s - calls #to_str to convert the second argument to a String 3873s - saves encoding options passed as a hash in the last argument 3873s - raises ArgumentError when no arguments are given 3873s 3873s IO#stat 3873s - raises IOError on closed stream 3873s - returns a File::Stat object for the stream 3873s - can stat pipes 3873s 3873s IO#sync= 3873s - sets the sync mode to true or false 3873s - accepts non-boolean arguments 3873s - raises an IOError on closed stream 3873s 3873s IO#sync 3873s - returns the current sync mode 3873s - raises an IOError on closed stream 3873s 3873s IO#sync 3873s - is false by default for STDIN 3873s - is false by default for STDOUT 3873s - is true by default for STDERR 3873s 3873s IO.sysopen 3873s - returns the file descriptor for a given path 3873s - works on directories 3873s - calls #to_path to convert an object to a path 3873s - accepts a mode as second argument 3873s - accepts permissions as third argument 3873s - accepts mode & permission that are nil 3873s 3873s IO#sysread on a file 3873s - reads the specified number of bytes from the file 3873s - reads the specified number of bytes from the file to the buffer 3873s - coerces the second argument to string and uses it as a buffer 3873s - advances the position of the file by the specified number of bytes 3873s - raises an error when called after buffered reads 3873s - reads normally even when called immediately after a buffered IO#read 3873s - does not raise error if called after IO#read followed by IO#write 3873s - does not raise error if called after IO#read followed by IO#syswrite 3873s - reads updated content after the flushed buffered IO#write 3873s - raises IOError on closed stream 3873s - immediately returns an empty string if the length argument is 0 3873s - immediately returns the given buffer if the length argument is 0 3873s - discards the existing buffer content upon successful read 3873s 3873s IO#sysread 3873s - returns a smaller string if less than size bytes are available 3873s 3873s IO#sysseek 3873s - sets the offset 3873s - converts arguments to Integers 3873s - raises TypeError when cannot convert implicitly argument to Integer 3873s - does not accept Integers that don't fit in a C off_t 3873s - raises IOError on closed stream 3873s 3873s IO#sysseek 3873s - moves the read position relative to the current position with SEEK_CUR 3873s - raises an error when called after buffered reads 3873s - seeks normally even when called immediately after a buffered IO#read 3873s - moves the read position relative to the start with SEEK_SET 3873s - moves the read position relative to the end with SEEK_END 3873s 3873s IO#syswrite on a file 3874s - writes all of the string's bytes but does not buffer them 3874s - does not modify the passed argument 3874s - warns if called immediately after a buffered IO#write 3874s - does not warn if called after IO#write with intervening IO#sysread 3874s - writes to the actual file position when called after buffered IO#read 3874s 3874s IO#syswrite on a pipe 3874s - returns the written bytes if the fd is in nonblock mode and write would block 3874s 3874s IO#syswrite 3874s - coerces the argument to a string using to_s 3874s - checks if the file is writable if writing more than zero bytes 3874s - returns the number of bytes written 3874s - invokes to_s on non-String argument 3874s - writes all of the string's bytes without buffering if mode is sync 3874s - does not warn if called after IO#read 3874s - writes to the current position after IO#read 3874s - advances the file position by the count of given bytes 3874s - raises IOError on closed stream 3874s - does not transcode the given string even when the external encoding is set 3874s 3874s IO#syswrite on a pipe 3874s - writes the given String to the pipe 3874s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 3874s 3874s IO#tell 3874s - gets the offset 3874s - raises IOError on closed stream 3874s - resets #eof? 3874s 3874s IO#to_i 3874s - returns the numeric file descriptor of the given IO object 3874s - raises IOError on closed stream 3874s 3874s IO#to_io 3874s - returns self for open stream 3874s - returns self for closed stream 3874s 3874s IO.try_convert 3874s - returns the passed IO object 3874s - does not call #to_io on an IO instance 3874s - calls #to_io to coerce an object 3874s - returns nil when the passed object does not respond to #to_io 3874s - return nil when BasicObject is passed 3874s - raises a TypeError if the object does not return an IO from #to_io 3874s - propagates an exception raised by #to_io 3874s 3874s IO#tty? 3874s - returns true if this stream is a terminal device (TTY) 3874s - returns false if this stream is not a terminal device (TTY) 3874s - raises IOError on closed stream 3874s 3874s IO#ungetbyte 3874s - does nothing when passed nil 3874s - puts back each byte in a String argument 3874s - calls #to_str to convert the argument 3874s - never raises RangeError 3874s - raises IOError on stream not opened for reading 3874s - raises an IOError if the IO is closed 3874s 3874s IO#ungetc 3874s - pushes back one character onto stream 3874s - interprets the codepoint in the external encoding 3874s - pushes back one character when invoked at the end of the stream 3874s - pushes back one character when invoked at the start of the stream 3874s - pushes back one character when invoked on empty stream 3874s - affects EOF state 3874s - adjusts the stream position 3874s - makes subsequent unbuffered operations to raise IOError 3874s - raises TypeError if passed nil 3874s - puts one or more characters back in the stream 3874s - calls #to_str to convert the argument if it is not an Integer 3874s - returns nil when invoked on stream that was not yet read 3874s - raises IOError on stream not opened for reading 3874s - raises IOError on closed stream 3874s 3874s IO#write_nonblock on a file 3874s - writes all of the string's bytes but does not buffer them 3874s - does not modify the passed argument 3874s - checks if the file is writable if writing zero bytes 3874s 3874s IO#write_nonblock 3874s - coerces the argument to a string using to_s 3874s - checks if the file is writable if writing more than zero bytes 3874s - returns the number of bytes written 3874s - invokes to_s on non-String argument 3874s - writes all of the string's bytes without buffering if mode is sync 3874s - does not warn if called after IO#read 3874s - writes to the current position after IO#read 3874s - advances the file position by the count of given bytes 3874s - raises IOError on closed stream 3874s - does not transcode the given string even when the external encoding is set 3874s 3874s IO#write_nonblock on a pipe 3874s - writes the given String to the pipe 3874s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 3874s 3874s IO#write_nonblock 3874s - raises an exception extending IO::WaitWritable when the write would block 3874s - sets the IO in nonblock mode 3874s 3874s IO#write_nonblock when exception option is set to false 3874s - returns :wait_writable when the operation would block 3874s 3874s IO#write on a file 3874s - does not check if the file is writable if writing zero bytes 3874s - returns a length of 0 when writing a blank string 3874s - returns a length of 0 when writing blank strings 3874s - returns a length of 0 when passed no arguments 3874s - returns the number of bytes written 3874s - does not modify the passed argument 3874s - does not modify arguments when passed multiple arguments and external encoding not set 3874s - uses the encoding from the given option for non-ascii encoding 3874s - uses the encoding from the given option for non-ascii encoding even if in binary mode 3874s - uses the encoding from the given option for non-ascii encoding when multiple arguments passes 3874s - raises a invalid byte sequence error if invalid bytes are being written 3874s - writes binary data if no encoding is given 3874s - writes binary data if no encoding is given and multiple arguments passed 3874s 3874s IO.write 3874s - coerces the argument to a string using to_s 3874s - returns the number of bytes written 3874s - creates a file if missing 3874s - creates file if missing even if offset given 3874s - truncates the file and writes the given string 3874s - doesn't truncate the file and writes the given string if an offset is given 3874s - doesn't truncate and writes at the given offset after passing empty opts 3874s - accepts a :mode option 3874s - accepts a :flags option without :mode one 3874s - raises an error if readonly mode is specified 3874s - truncates if empty :opts provided and offset skipped 3874s - uses an :open_args option 3874s - disregards other options if :open_args is given 3874s - requires mode to be specified in :open_args 3874s - requires mode to be specified in :open_args even if flags option passed 3874s - uses the given encoding and returns the number of bytes written 3874s - raises ArgumentError if encoding is specified in mode parameter and is given as :encoding option 3874s - writes the file with the permissions in the :perm parameter 3874s - writes binary data if no encoding is given 3874s 3874s IO#write 3874s - coerces the argument to a string using to_s 3874s - checks if the file is writable if writing more than zero bytes 3874s - returns the number of bytes written 3874s - invokes to_s on non-String argument 3874s - writes all of the string's bytes without buffering if mode is sync 3874s - does not warn if called after IO#read 3874s - writes to the current position after IO#read 3874s - advances the file position by the count of given bytes 3874s - raises IOError on closed stream 3874s - transcodes the given string when the external encoding is set and neither is BINARY 3874s - transcodes the given string when the external encoding is set and the string encoding is BINARY 3874s - accepts multiple arguments 3874s 3874s IO#write on a pipe 3874s - writes the given String to the pipe 3874s - raises Errno::EPIPE if the read end is closed and does not die from SIGPIPE 3874s 3874s Kernel 3874s - has private instance method Array() 3874s 3874s Kernel.Array 3874s - does not call #to_ary on an Array 3874s - calls #to_ary to convert the argument to an Array 3874s - does not call #to_a on an Array 3874s - calls #to_a if the argument does not respond to #to_ary 3874s - calls #to_a if #to_ary returns nil 3874s - returns an Array containing the argument if #to_a returns nil 3874s - calls #to_ary first, even if it's private 3874s - calls #to_a if #to_ary is not defined, even if it's private 3874s - returns an Array containing the argument if it responds to neither #to_ary nor #to_a 3874s - returns an empty Array when passed nil 3874s - raises a TypeError if #to_ary does not return an Array 3874s - raises a TypeError if #to_a does not return an Array 3874s 3874s Kernel#Array 3874s - does not call #to_ary on an Array 3874s - calls #to_ary to convert the argument to an Array 3874s - does not call #to_a on an Array 3874s - calls #to_a if the argument does not respond to #to_ary 3874s - calls #to_a if #to_ary returns nil 3874s - returns an Array containing the argument if #to_a returns nil 3874s - calls #to_ary first, even if it's private 3874s - calls #to_a if #to_ary is not defined, even if it's private 3874s - returns an Array containing the argument if it responds to neither #to_ary nor #to_a 3874s - returns an empty Array when passed nil 3874s - raises a TypeError if #to_ary does not return an Array 3874s - raises a TypeError if #to_a does not return an Array 3874s 3874s Kernel.Complex() 3874s - freezes its result 3874s 3874s Kernel.Complex() when passed [Complex, Complex] 3874s - returns a new Complex number based on the two given numbers 3874s 3874s Kernel.Complex() when passed [Complex] 3874s - returns the passed Complex number 3874s 3874s Kernel.Complex() when passed [Integer, Integer] 3874s - returns a new Complex number 3874s 3874s Kernel.Complex() when passed [Integer/Float] 3874s - returns a new Complex number with 0 as the imaginary component 3874s 3874s Kernel.Complex() when passed [String] 3874s - returns a Complex object 3874s - understands integers 3874s - understands negative integers 3874s - understands fractions (numerator/denominator) for the real part 3874s - understands fractions (numerator/denominator) for the imaginary part 3874s - understands negative fractions (-numerator/denominator) for the real part 3874s - understands negative fractions (-numerator/denominator) for the imaginary part 3874s - understands floats (a.b) for the real part 3874s - understands floats (a.b) for the imaginary part 3874s - understands negative floats (-a.b) for the real part 3874s - understands negative floats (-a.b) for the imaginary part 3874s - understands an integer followed by 'i' to mean that integer is the imaginary part 3874s - understands a negative integer followed by 'i' to mean that negative integer is the imaginary part 3874s - understands an 'i' by itself as denoting a complex number with an imaginary part of 1 3874s - understands a '-i' by itself as denoting a complex number with an imaginary part of -1 3874s - understands 'a+bi' to mean a complex number with 'a' as the real part, 'b' as the imaginary 3874s - understands 'a-bi' to mean a complex number with 'a' as the real part, '-b' as the imaginary 3874s - understands 'a+i' to mean a complex number with 'a' as the real part, 1i as the imaginary 3874s - understands 'a-i' to mean a complex number with 'a' as the real part, -1i as the imaginary 3874s - understands i, I, j, and J imaginary units 3874s - understands scientific notation for the real part 3874s - understands negative scientific notation for the real part 3874s - understands scientific notation for the imaginary part 3874s - understands negative scientific notation for the imaginary part 3874s - understands scientific notation for the real and imaginary part in the same String 3874s - understands negative scientific notation for the real and imaginary part in the same String 3874s - understands scientific notation with e and E 3874s - understands 'm@a' to mean a complex number in polar form with 'm' as the modulus, 'a' as the argument 3874s - ignores leading whitespaces 3874s - ignores trailing whitespaces 3874s - understands _ 3874s 3874s Kernel.Complex() when passed [String] invalid argument 3874s - raises Encoding::CompatibilityError if String is in not ASCII-compatible encoding 3874s - raises ArgumentError for unrecognised Strings 3874s - raises ArgumentError for trailing garbage 3874s - does not understand Float::INFINITY 3874s - does not understand Float::NAN 3874s - does not understand a sequence of _ 3874s - does not allow null-byte 3874s 3874s Kernel.Complex() when passed [String] invalid argument and exception: false passed 3874s - raises Encoding::CompatibilityError if String is in not ASCII-compatible encoding 3874s - returns nil for unrecognised Strings 3874s - returns nil when trailing garbage 3874s - returns nil for Float::INFINITY 3874s - returns nil for Float::NAN 3874s - returns nil when there is a sequence of _ 3874s - returns nil when String contains null-byte 3874s 3874s Kernel.Complex() when passes [String, String] 3874s - needs to be reviewed for spec completeness 3874s 3874s Kernel.Complex() when passed an Object which responds to #to_c 3874s - returns the passed argument 3874s 3874s Kernel.Complex() when passed a Numeric which responds to #real? with false 3874s - returns the passed argument 3874s 3874s Kernel.Complex() when passed a Numeric which responds to #real? with true 3874s - returns a Complex with the passed argument as the real component and 0 as the imaginary component 3874s 3874s Kernel.Complex() when passed Numerics n1 and n2 and at least one responds to #real? with false 3874s - returns n1 + n2 * Complex(0, 1) 3874s - returns n1 + n2 * Complex(0, 1) 3874s - returns n1 + n2 * Complex(0, 1) 3874s 3874s Kernel.Complex() when passed two Numerics and both respond to #real? with true 3874s - returns a Complex with the passed arguments as real and imaginary components respectively 3874s 3874s Kernel.Complex() when passed a single non-Numeric 3874s - coerces the passed argument using #to_c 3874s 3874s Kernel.Complex() when passed a non-Numeric second argument 3874s - raises TypeError 3874s 3874s Kernel.Complex() when passed nil 3874s - raises TypeError 3874s 3874s Kernel.Complex() when passed exception: false and [Numeric] 3874s - returns a complex number 3874s 3874s Kernel.Complex() when passed exception: false and [non-Numeric] 3874s - swallows an error 3874s 3874s Kernel.Complex() when passed exception: false and [non-Numeric, Numeric] argument 3874s - throws a TypeError 3874s 3874s Kernel.Complex() when passed exception: false and [anything, non-Numeric] argument 3874s - swallows an error 3874s 3874s Kernel.Complex() when passed exception: false and non-numeric String arguments 3874s - swallows an error 3874s 3874s Kernel.Complex() when passed exception: false and nil arguments 3874s - swallows an error 3874s 3874s Kernel.Float 3874s - returns the identical Float for numeric Floats 3874s - returns a Float for Fixnums 3874s - returns a Float for Complex with only a real part 3874s - returns a Float for Bignums 3874s - raises an ArgumentError for nil 3874s - returns the identical NaN for NaN 3874s - returns the same Infinity for Infinity 3874s - converts Strings to floats without calling #to_f 3874s - converts Strings with decimal points into Floats 3874s - raises an ArgumentError for a String of word characters 3874s - raises an ArgumentError for a String with string in error message 3874s - raises an ArgumentError if there are two decimal points in the String 3874s - raises an ArgumentError for a String of numbers followed by word characters 3874s - raises an ArgumentError for a String of word characters followed by numbers 3874s - is strict about the string form even across newlines 3874s - converts String subclasses to floats without calling #to_f 3874s - returns a positive Float if the string is prefixed with + 3874s - returns a negative Float if the string is prefixed with + 3874s - raises an ArgumentError if a + or - is embedded in a String 3874s - raises an ArgumentError if a String has a trailing + or - 3874s - raises an ArgumentError for a String with a leading _ 3874s - returns a value for a String with an embedded _ 3874s - raises an ArgumentError for a String with a trailing _ 3874s - raises an ArgumentError for a String of \0 3874s - raises an ArgumentError for a String with a leading \0 3874s - raises an ArgumentError for a String with an embedded \0 3874s - raises an ArgumentError for a String with a trailing \0 3874s - raises an ArgumentError for a String that is just an empty space 3874s - raises an ArgumentError for a String that with an embedded space 3874s - returns a value for a String with a leading space 3874s - returns a value for a String with a trailing space 3874s - returns a value for a String with any leading whitespace 3874s - returns a value for a String with any trailing whitespace 3874s - raises an ArgumentError if e is the trailing character 3874s - raises an ArgumentError if e is the leading character 3874s - returns Infinity for '2e1000' 3874s - returns 0 for '2e-1000' 3874s - allows embedded _ in a number on either side of the e 3874s - raises an exception if a space is embedded on either side of the 'e' 3874s - raises an exception if there's a leading _ on either side of the 'e' 3874s - raises an exception if there's a trailing _ on either side of the 'e' 3874s - allows decimal points on the left side of the 'e' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'e' 3874s - raises an ArgumentError if E is the trailing character 3874s - raises an ArgumentError if E is the leading character 3874s - returns Infinity for '2E1000' 3874s - returns 0 for '2E-1000' 3874s - allows embedded _ in a number on either side of the E 3874s - raises an exception if a space is embedded on either side of the 'E' 3874s - raises an exception if there's a leading _ on either side of the 'E' 3874s - raises an exception if there's a trailing _ on either side of the 'E' 3874s - allows decimal points on the left side of the 'E' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'E' 3874s - returns a Float that can be a parameter to #Float again 3874s - otherwise, converts the given argument to a Float by calling #to_f 3874s - returns the identical NaN if to_f is called and it returns NaN 3874s - returns the identical Infinity if to_f is called and it returns Infinity 3874s - raises a TypeError if #to_f is not provided 3874s - raises a TypeError if #to_f returns a String 3874s - raises a TypeError if #to_f returns an Integer 3874s - raises a RangeError when passed a Complex argument 3874s 3874s Kernel.Float for hexadecimal literals with binary exponent 3874s - interprets the fractional part (on the left side of 'p') in hexadecimal 3874s - interprets the exponent (on the right of 'p') in decimal 3874s - raises an ArgumentError if p is the trailing character 3874s - raises an ArgumentError if p is the leading character 3874s - returns Infinity for '0x1p10000' 3874s - returns 0 for '0x1p-10000' 3874s - allows embedded _ in a number on either side of the p 3874s - raises an exception if a space is embedded on either side of the 'p' 3874s - raises an exception if there's a leading _ on either side of the 'p' 3874s - raises an exception if there's a trailing _ on either side of the 'p' 3874s - allows hexadecimal points on the left side of the 'p' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'p' 3874s - interprets the fractional part (on the left side of 'P') in hexadecimal 3874s - interprets the exponent (on the right of 'P') in decimal 3874s - raises an ArgumentError if P is the trailing character 3874s - raises an ArgumentError if P is the leading character 3874s - returns Infinity for '0x1P10000' 3874s - returns 0 for '0x1P-10000' 3874s - allows embedded _ in a number on either side of the P 3874s - raises an exception if a space is embedded on either side of the 'P' 3874s - raises an exception if there's a leading _ on either side of the 'P' 3874s - raises an exception if there's a trailing _ on either side of the 'P' 3874s - allows hexadecimal points on the left side of the 'P' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'P' 3874s 3874s Kernel.Float when passed exception: false and valid input 3874s - returns a Float number 3874s 3874s Kernel.Float when passed exception: false and invalid input 3874s - swallows an error 3874s 3874s Kernel.Float when passed exception: false and nil 3874s - swallows it 3874s 3874s Kernel#Float 3874s - returns the identical Float for numeric Floats 3874s - returns a Float for Fixnums 3874s - returns a Float for Complex with only a real part 3874s - returns a Float for Bignums 3874s - raises an ArgumentError for nil 3874s - returns the identical NaN for NaN 3874s - returns the same Infinity for Infinity 3874s - converts Strings to floats without calling #to_f 3874s - converts Strings with decimal points into Floats 3874s - raises an ArgumentError for a String of word characters 3874s - raises an ArgumentError for a String with string in error message 3874s - raises an ArgumentError if there are two decimal points in the String 3874s - raises an ArgumentError for a String of numbers followed by word characters 3874s - raises an ArgumentError for a String of word characters followed by numbers 3874s - is strict about the string form even across newlines 3874s - converts String subclasses to floats without calling #to_f 3874s - returns a positive Float if the string is prefixed with + 3874s - returns a negative Float if the string is prefixed with + 3874s - raises an ArgumentError if a + or - is embedded in a String 3874s - raises an ArgumentError if a String has a trailing + or - 3874s - raises an ArgumentError for a String with a leading _ 3874s - returns a value for a String with an embedded _ 3874s - raises an ArgumentError for a String with a trailing _ 3874s - raises an ArgumentError for a String of \0 3874s - raises an ArgumentError for a String with a leading \0 3874s - raises an ArgumentError for a String with an embedded \0 3874s - raises an ArgumentError for a String with a trailing \0 3874s - raises an ArgumentError for a String that is just an empty space 3874s - raises an ArgumentError for a String that with an embedded space 3874s - returns a value for a String with a leading space 3874s - returns a value for a String with a trailing space 3874s - returns a value for a String with any leading whitespace 3874s - returns a value for a String with any trailing whitespace 3874s - raises an ArgumentError if e is the trailing character 3874s - raises an ArgumentError if e is the leading character 3874s - returns Infinity for '2e1000' 3874s - returns 0 for '2e-1000' 3874s - allows embedded _ in a number on either side of the e 3874s - raises an exception if a space is embedded on either side of the 'e' 3874s - raises an exception if there's a leading _ on either side of the 'e' 3874s - raises an exception if there's a trailing _ on either side of the 'e' 3874s - allows decimal points on the left side of the 'e' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'e' 3874s - raises an ArgumentError if E is the trailing character 3874s - raises an ArgumentError if E is the leading character 3874s - returns Infinity for '2E1000' 3874s - returns 0 for '2E-1000' 3874s - allows embedded _ in a number on either side of the E 3874s - raises an exception if a space is embedded on either side of the 'E' 3874s - raises an exception if there's a leading _ on either side of the 'E' 3874s - raises an exception if there's a trailing _ on either side of the 'E' 3874s - allows decimal points on the left side of the 'E' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'E' 3874s - returns a Float that can be a parameter to #Float again 3874s - otherwise, converts the given argument to a Float by calling #to_f 3874s - returns the identical NaN if to_f is called and it returns NaN 3874s - returns the identical Infinity if to_f is called and it returns Infinity 3874s - raises a TypeError if #to_f is not provided 3874s - raises a TypeError if #to_f returns a String 3874s - raises a TypeError if #to_f returns an Integer 3874s - raises a RangeError when passed a Complex argument 3874s 3874s Kernel#Float for hexadecimal literals with binary exponent 3874s - interprets the fractional part (on the left side of 'p') in hexadecimal 3874s - interprets the exponent (on the right of 'p') in decimal 3874s - raises an ArgumentError if p is the trailing character 3874s - raises an ArgumentError if p is the leading character 3874s - returns Infinity for '0x1p10000' 3874s - returns 0 for '0x1p-10000' 3874s - allows embedded _ in a number on either side of the p 3874s - raises an exception if a space is embedded on either side of the 'p' 3874s - raises an exception if there's a leading _ on either side of the 'p' 3874s - raises an exception if there's a trailing _ on either side of the 'p' 3874s - allows hexadecimal points on the left side of the 'p' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'p' 3874s - interprets the fractional part (on the left side of 'P') in hexadecimal 3874s - interprets the exponent (on the right of 'P') in decimal 3874s - raises an ArgumentError if P is the trailing character 3874s - raises an ArgumentError if P is the leading character 3874s - returns Infinity for '0x1P10000' 3874s - returns 0 for '0x1P-10000' 3874s - allows embedded _ in a number on either side of the P 3874s - raises an exception if a space is embedded on either side of the 'P' 3874s - raises an exception if there's a leading _ on either side of the 'P' 3874s - raises an exception if there's a trailing _ on either side of the 'P' 3874s - allows hexadecimal points on the left side of the 'P' 3874s - raises an ArgumentError if there's a decimal point on the right side of the 'P' 3874s 3874s Kernel#Float when passed exception: false and valid input 3874s - returns a Float number 3874s 3874s Kernel#Float when passed exception: false and invalid input 3874s - swallows an error 3874s 3874s Kernel#Float when passed exception: false and nil 3874s - swallows it 3874s 3874s Kernel#Float 3874s - is a private method 3874s 3874s Kernel#hash 3874s - is provided 3874s - is stable 3874s 3874s Kernel 3874s - has private instance method Hash() 3874s 3874s Kernel.Hash 3874s - converts nil to a Hash 3874s - converts an empty array to a Hash 3874s - does not call #to_hash on an Hash 3874s - calls #to_hash to convert the argument to an Hash 3874s - raises a TypeError if it doesn't respond to #to_hash 3874s - raises a TypeError if #to_hash does not return an Hash 3874s 3874s Kernel#Hash 3874s - converts nil to a Hash 3874s - converts an empty array to a Hash 3874s - does not call #to_hash on an Hash 3874s - calls #to_hash to convert the argument to an Hash 3874s - raises a TypeError if it doesn't respond to #to_hash 3874s - raises a TypeError if #to_hash does not return an Hash 3874s 3874s Kernel.Integer 3874s - raises an ArgumentError when the String contains digits out of range of radix 2 3874s - raises an ArgumentError when the String contains digits out of range of radix 3 3874s - raises an ArgumentError when the String contains digits out of range of radix 4 3874s - raises an ArgumentError when the String contains digits out of range of radix 5 3874s - raises an ArgumentError when the String contains digits out of range of radix 6 3874s - raises an ArgumentError when the String contains digits out of range of radix 7 3874s - raises an ArgumentError when the String contains digits out of range of radix 8 3874s - raises an ArgumentError when the String contains digits out of range of radix 9 3874s - raises an ArgumentError when the String contains digits out of range of radix 10 3874s - raises an ArgumentError when the String contains digits out of range of radix 11 3874s - raises an ArgumentError when the String contains digits out of range of radix 12 3874s - raises an ArgumentError when the String contains digits out of range of radix 13 3874s - raises an ArgumentError when the String contains digits out of range of radix 14 3874s - raises an ArgumentError when the String contains digits out of range of radix 15 3874s - raises an ArgumentError when the String contains digits out of range of radix 16 3874s - raises an ArgumentError when the String contains digits out of range of radix 17 3874s - raises an ArgumentError when the String contains digits out of range of radix 18 3874s - raises an ArgumentError when the String contains digits out of range of radix 19 3874s - raises an ArgumentError when the String contains digits out of range of radix 20 3874s - raises an ArgumentError when the String contains digits out of range of radix 21 3874s - raises an ArgumentError when the String contains digits out of range of radix 22 3874s - raises an ArgumentError when the String contains digits out of range of radix 23 3874s - raises an ArgumentError when the String contains digits out of range of radix 24 3874s - raises an ArgumentError when the String contains digits out of range of radix 25 3874s - raises an ArgumentError when the String contains digits out of range of radix 26 3874s - raises an ArgumentError when the String contains digits out of range of radix 27 3874s - raises an ArgumentError when the String contains digits out of range of radix 28 3874s - raises an ArgumentError when the String contains digits out of range of radix 29 3874s - raises an ArgumentError when the String contains digits out of range of radix 30 3874s - raises an ArgumentError when the String contains digits out of range of radix 31 3874s - raises an ArgumentError when the String contains digits out of range of radix 32 3874s - raises an ArgumentError when the String contains digits out of range of radix 33 3874s - raises an ArgumentError when the String contains digits out of range of radix 34 3874s - raises an ArgumentError when the String contains digits out of range of radix 35 3874s - raises an ArgumentError when the String contains digits out of range of radix 36 3874s - returns a Bignum for a Bignum 3874s - returns a Fixnum for a Fixnum 3874s - raises a TypeError when to_int returns not-an-Integer object and to_i returns nil 3874s - return a result of to_i when to_int does not return an Integer 3874s - raises a TypeError when passed nil 3874s - returns an Integer object 3874s - truncates Floats 3874s - calls to_i on Rationals 3874s - returns the value of to_int if the result is a Fixnum 3874s - returns the value of to_int if the result is a Bignum 3874s - calls to_i on an object whose to_int returns nil 3874s - raises a TypeError if to_i returns a value that is not an Integer 3874s - raises a TypeError if no to_int or to_i methods exist 3874s - raises a TypeError if to_int returns nil and no to_i exists 3874s - raises a FloatDomainError when passed NaN 3874s - raises a FloatDomainError when passed Infinity 3874s - raises an ArgumentError if the String is a null byte 3874s - raises an ArgumentError if the String starts with a null byte 3874s - raises an ArgumentError if the String ends with a null byte 3874s - raises an ArgumentError if the String contains a null byte 3874s - ignores leading whitespace 3874s - ignores trailing whitespace 3874s - raises an ArgumentError if there are leading _s 3874s - raises an ArgumentError if there are trailing _s 3874s - ignores an embedded _ 3874s - raises an ArgumentError if there are multiple embedded _s 3874s - ignores a single leading + 3874s - raises an ArgumentError if there is a space between the + and number 3874s - raises an ArgumentError if there are multiple leading +s 3874s - raises an ArgumentError if there are trailing +s 3874s - makes the number negative if there's a leading - 3874s - raises an ArgumentError if there are multiple leading -s 3874s - raises an ArgumentError if there are trailing -s 3874s - raises an ArgumentError if there is a period 3874s - raises an ArgumentError for an empty String 3874s - parses the value as 0 if the string consists of a single zero character 3874s - parses the value as a hex number if there's a leading 0x 3874s - is a positive hex number if there's a leading +0x 3874s - is a negative hex number if there's a leading -0x 3874s - raises an ArgumentError if the number cannot be parsed as hex 3874s - parses the value as a hex number if there's a leading 0X 3874s - is a positive hex number if there's a leading +0X 3874s - is a negative hex number if there's a leading -0X 3874s - raises an ArgumentError if the number cannot be parsed as hex 3874s - parses the value as a binary number if there's a leading 0b 3874s - is a positive binary number if there's a leading +0b 3874s - is a negative binary number if there's a leading -0b 3874s - raises an ArgumentError if the number cannot be parsed as binary 3874s - parses the value as a binary number if there's a leading 0B 3874s - is a positive binary number if there's a leading +0B 3874s - is a negative binary number if there's a leading -0B 3874s - raises an ArgumentError if the number cannot be parsed as binary 3874s - parses the value as an octal number if there's a leading 0o 3874s - is a positive octal number if there's a leading +0o 3874s - is a negative octal number if there's a leading -0o 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as an octal number if there's a leading 0O 3874s - is a positive octal number if there's a leading +0O 3874s - is a negative octal number if there's a leading -0O 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as an octal number if there's a leading 0 3874s - is a positive octal number if there's a leading +0 3874s - is a negative octal number if there's a leading -0 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as a decimal number if there's a leading 0D 3874s - is a positive decimal number if there's a leading +0D 3874s - is a negative decimal number if there's a leading -0D 3874s - raises an ArgumentError if the number cannot be parsed as decimal 3874s - parses the value as a decimal number if there's a leading 0d 3874s - is a positive decimal number if there's a leading +0d 3874s - is a negative decimal number if there's a leading -0d 3874s - raises an ArgumentError if the number cannot be parsed as decimal 3874s - raises an ArgumentError if the String is a null byte 3874s - raises an ArgumentError if the String starts with a null byte 3874s - raises an ArgumentError if the String ends with a null byte 3874s - raises an ArgumentError if the String contains a null byte 3874s - ignores leading whitespace 3874s - ignores trailing whitespace 3874s - raises an ArgumentError if there are leading _s 3874s - raises an ArgumentError if there are trailing _s 3874s - ignores an embedded _ 3874s - raises an ArgumentError if there are multiple embedded _s 3874s - ignores a single leading + 3874s - raises an ArgumentError if there is a space between the + and number 3874s - raises an ArgumentError if there are multiple leading +s 3874s - raises an ArgumentError if there are trailing +s 3874s - makes the number negative if there's a leading - 3874s - raises an ArgumentError if there are multiple leading -s 3874s - raises an ArgumentError if there are trailing -s 3874s - raises an ArgumentError if there is a period 3874s - raises an ArgumentError for an empty String 3874s - raises an ArgumentError for a base of 1 3874s - raises an ArgumentError for a base of 37 3874s - accepts wholly lowercase alphabetic strings for bases > 10 3874s - accepts wholly uppercase alphabetic strings for bases > 10 3874s - accepts mixed-case alphabetic strings for bases > 10 3874s - accepts alphanumeric strings for bases > 10 3874s - raises an ArgumentError for letters invalid in the given base 3874s - parses the value as a hex number if there's a leading 0x and a base of 16 3874s - is a positive hex number if there's a leading +0x and base of 16 3874s - is a negative hex number if there's a leading -0x and a base of 16 3874s - raises an ArgumentError if the number begins with 0x and the base is 2 3874s - raises an ArgumentError if the number begins with 0x and the base is 3 3874s - raises an ArgumentError if the number begins with 0x and the base is 4 3874s - raises an ArgumentError if the number begins with 0x and the base is 5 3874s - raises an ArgumentError if the number begins with 0x and the base is 6 3874s - raises an ArgumentError if the number begins with 0x and the base is 7 3874s - raises an ArgumentError if the number begins with 0x and the base is 8 3874s - raises an ArgumentError if the number begins with 0x and the base is 9 3874s - raises an ArgumentError if the number begins with 0x and the base is 10 3874s - raises an ArgumentError if the number begins with 0x and the base is 11 3874s - raises an ArgumentError if the number begins with 0x and the base is 12 3874s - raises an ArgumentError if the number begins with 0x and the base is 13 3874s - raises an ArgumentError if the number begins with 0x and the base is 14 3874s - raises an ArgumentError if the number begins with 0x and the base is 15 3874s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 3874s - parses the value as a hex number if there's a leading 0X and a base of 16 3874s - is a positive hex number if there's a leading +0X and base of 16 3874s - is a negative hex number if there's a leading -0X and a base of 16 3874s - raises an ArgumentError if the number begins with 0X and the base is 2 3874s - raises an ArgumentError if the number begins with 0X and the base is 3 3874s - raises an ArgumentError if the number begins with 0X and the base is 4 3874s - raises an ArgumentError if the number begins with 0X and the base is 5 3874s - raises an ArgumentError if the number begins with 0X and the base is 6 3874s - raises an ArgumentError if the number begins with 0X and the base is 7 3874s - raises an ArgumentError if the number begins with 0X and the base is 8 3874s - raises an ArgumentError if the number begins with 0X and the base is 9 3874s - raises an ArgumentError if the number begins with 0X and the base is 10 3874s - raises an ArgumentError if the number begins with 0X and the base is 11 3874s - raises an ArgumentError if the number begins with 0X and the base is 12 3874s - raises an ArgumentError if the number begins with 0X and the base is 13 3874s - raises an ArgumentError if the number begins with 0X and the base is 14 3874s - raises an ArgumentError if the number begins with 0X and the base is 15 3874s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 3874s - parses the value as a binary number if there's a leading 0b and the base is 2 3874s - is a positive binary number if there's a leading +0b and a base of 2 3874s - is a negative binary number if there's a leading -0b and a base of 2 3874s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 3874s - parses the value as a binary number if there's a leading 0B and the base is 2 3874s - is a positive binary number if there's a leading +0B and a base of 2 3874s - is a negative binary number if there's a leading -0B and a base of 2 3874s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 3874s - parses the value as an octal number if there's a leading 0o and a base of 8 3874s - is a positive octal number if there's a leading +0o and a base of 8 3874s - is a negative octal number if there's a leading -0o and a base of 8 3874s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 3874s - raises an ArgumentError if the number begins with 0o and the base is 2 3874s - raises an ArgumentError if the number begins with 0o and the base is 3 3874s - raises an ArgumentError if the number begins with 0o and the base is 4 3874s - raises an ArgumentError if the number begins with 0o and the base is 5 3874s - raises an ArgumentError if the number begins with 0o and the base is 6 3874s - raises an ArgumentError if the number begins with 0o and the base is 7 3874s - parses the value as an octal number if there's a leading 0O and a base of 8 3874s - is a positive octal number if there's a leading +0O and a base of 8 3874s - is a negative octal number if there's a leading -0O and a base of 8 3874s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 3874s - raises an ArgumentError if the number begins with 0O and the base is 2 3874s - raises an ArgumentError if the number begins with 0O and the base is 3 3874s - raises an ArgumentError if the number begins with 0O and the base is 4 3874s - raises an ArgumentError if the number begins with 0O and the base is 5 3874s - raises an ArgumentError if the number begins with 0O and the base is 6 3874s - raises an ArgumentError if the number begins with 0O and the base is 7 3874s - parses the value as a decimal number if there's a leading 0D and a base of 10 3874s - is a positive decimal number if there's a leading +0D and a base of 10 3874s - is a negative decimal number if there's a leading -0D and a base of 10 3874s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 3874s - raises an ArgumentError if the number begins with 0D and the base is 2 3874s - raises an ArgumentError if the number begins with 0D and the base is 3 3874s - raises an ArgumentError if the number begins with 0D and the base is 4 3874s - raises an ArgumentError if the number begins with 0D and the base is 5 3874s - raises an ArgumentError if the number begins with 0D and the base is 6 3874s - raises an ArgumentError if the number begins with 0D and the base is 7 3874s - raises an ArgumentError if the number begins with 0D and the base is 8 3874s - raises an ArgumentError if the number begins with 0D and the base is 9 3874s - parses the value as a decimal number if there's a leading 0d and a base of 10 3874s - is a positive decimal number if there's a leading +0d and a base of 10 3874s - is a negative decimal number if there's a leading -0d and a base of 10 3874s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 3874s - raises an ArgumentError if the number begins with 0d and the base is 2 3874s - raises an ArgumentError if the number begins with 0d and the base is 3 3874s - raises an ArgumentError if the number begins with 0d and the base is 4 3874s - raises an ArgumentError if the number begins with 0d and the base is 5 3874s - raises an ArgumentError if the number begins with 0d and the base is 6 3874s - raises an ArgumentError if the number begins with 0d and the base is 7 3874s - raises an ArgumentError if the number begins with 0d and the base is 8 3874s - raises an ArgumentError if the number begins with 0d and the base is 9 3874s - raises an ArgumentError if a base is given for a non-String value 3874s - tries to convert the base to an integer using to_int 3874s - is a public method 3874s 3874s Kernel.Integer when passed exception: false and to_i returns a value that is not an Integer 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and no to_int or to_i methods exist 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and to_int returns nil and no to_i exists 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and passed NaN 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and passed Infinity 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and passed nil 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and passed a String that contains numbers 3874s - normally parses it and returns an Integer 3874s 3874s Kernel.Integer when passed exception: false and passed a String that can't be converted to an Integer 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and multiple leading -s 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and multiple trailing -s 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and an argument that contains a period 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and an empty string 3874s - swallows an error 3874s 3874s Kernel.Integer when passed exception: false and valid argument 3874s - returns an Integer number 3874s 3874s Kernel.Integer when passed exception: false and invalid argument 3874s - swallows an error 3874s 3874s Kernel#Integer 3874s - raises an ArgumentError when the String contains digits out of range of radix 2 3874s - raises an ArgumentError when the String contains digits out of range of radix 3 3874s - raises an ArgumentError when the String contains digits out of range of radix 4 3874s - raises an ArgumentError when the String contains digits out of range of radix 5 3874s - raises an ArgumentError when the String contains digits out of range of radix 6 3874s - raises an ArgumentError when the String contains digits out of range of radix 7 3874s - raises an ArgumentError when the String contains digits out of range of radix 8 3874s - raises an ArgumentError when the String contains digits out of range of radix 9 3874s - raises an ArgumentError when the String contains digits out of range of radix 10 3874s - raises an ArgumentError when the String contains digits out of range of radix 11 3874s - raises an ArgumentError when the String contains digits out of range of radix 12 3874s - raises an ArgumentError when the String contains digits out of range of radix 13 3874s - raises an ArgumentError when the String contains digits out of range of radix 14 3874s - raises an ArgumentError when the String contains digits out of range of radix 15 3874s - raises an ArgumentError when the String contains digits out of range of radix 16 3874s - raises an ArgumentError when the String contains digits out of range of radix 17 3874s - raises an ArgumentError when the String contains digits out of range of radix 18 3874s - raises an ArgumentError when the String contains digits out of range of radix 19 3874s - raises an ArgumentError when the String contains digits out of range of radix 20 3874s - raises an ArgumentError when the String contains digits out of range of radix 21 3874s - raises an ArgumentError when the String contains digits out of range of radix 22 3874s - raises an ArgumentError when the String contains digits out of range of radix 23 3874s - raises an ArgumentError when the String contains digits out of range of radix 24 3874s - raises an ArgumentError when the String contains digits out of range of radix 25 3874s - raises an ArgumentError when the String contains digits out of range of radix 26 3874s - raises an ArgumentError when the String contains digits out of range of radix 27 3874s - raises an ArgumentError when the String contains digits out of range of radix 28 3874s - raises an ArgumentError when the String contains digits out of range of radix 29 3874s - raises an ArgumentError when the String contains digits out of range of radix 30 3874s - raises an ArgumentError when the String contains digits out of range of radix 31 3874s - raises an ArgumentError when the String contains digits out of range of radix 32 3874s - raises an ArgumentError when the String contains digits out of range of radix 33 3874s - raises an ArgumentError when the String contains digits out of range of radix 34 3874s - raises an ArgumentError when the String contains digits out of range of radix 35 3874s - raises an ArgumentError when the String contains digits out of range of radix 36 3874s - returns a Bignum for a Bignum 3874s - returns a Fixnum for a Fixnum 3874s - raises a TypeError when to_int returns not-an-Integer object and to_i returns nil 3874s - return a result of to_i when to_int does not return an Integer 3874s - raises a TypeError when passed nil 3874s - returns an Integer object 3874s - truncates Floats 3874s - calls to_i on Rationals 3874s - returns the value of to_int if the result is a Fixnum 3874s - returns the value of to_int if the result is a Bignum 3874s - calls to_i on an object whose to_int returns nil 3874s - raises a TypeError if to_i returns a value that is not an Integer 3874s - raises a TypeError if no to_int or to_i methods exist 3874s - raises a TypeError if to_int returns nil and no to_i exists 3874s - raises a FloatDomainError when passed NaN 3874s - raises a FloatDomainError when passed Infinity 3874s - raises an ArgumentError if the String is a null byte 3874s - raises an ArgumentError if the String starts with a null byte 3874s - raises an ArgumentError if the String ends with a null byte 3874s - raises an ArgumentError if the String contains a null byte 3874s - ignores leading whitespace 3874s - ignores trailing whitespace 3874s - raises an ArgumentError if there are leading _s 3874s - raises an ArgumentError if there are trailing _s 3874s - ignores an embedded _ 3874s - raises an ArgumentError if there are multiple embedded _s 3874s - ignores a single leading + 3874s - raises an ArgumentError if there is a space between the + and number 3874s - raises an ArgumentError if there are multiple leading +s 3874s - raises an ArgumentError if there are trailing +s 3874s - makes the number negative if there's a leading - 3874s - raises an ArgumentError if there are multiple leading -s 3874s - raises an ArgumentError if there are trailing -s 3874s - raises an ArgumentError if there is a period 3874s - raises an ArgumentError for an empty String 3874s - parses the value as 0 if the string consists of a single zero character 3874s - parses the value as a hex number if there's a leading 0x 3874s - is a positive hex number if there's a leading +0x 3874s - is a negative hex number if there's a leading -0x 3874s - raises an ArgumentError if the number cannot be parsed as hex 3874s - parses the value as a hex number if there's a leading 0X 3874s - is a positive hex number if there's a leading +0X 3874s - is a negative hex number if there's a leading -0X 3874s - raises an ArgumentError if the number cannot be parsed as hex 3874s - parses the value as a binary number if there's a leading 0b 3874s - is a positive binary number if there's a leading +0b 3874s - is a negative binary number if there's a leading -0b 3874s - raises an ArgumentError if the number cannot be parsed as binary 3874s - parses the value as a binary number if there's a leading 0B 3874s - is a positive binary number if there's a leading +0B 3874s - is a negative binary number if there's a leading -0B 3874s - raises an ArgumentError if the number cannot be parsed as binary 3874s - parses the value as an octal number if there's a leading 0o 3874s - is a positive octal number if there's a leading +0o 3874s - is a negative octal number if there's a leading -0o 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as an octal number if there's a leading 0O 3874s - is a positive octal number if there's a leading +0O 3874s - is a negative octal number if there's a leading -0O 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as an octal number if there's a leading 0 3874s - is a positive octal number if there's a leading +0 3874s - is a negative octal number if there's a leading -0 3874s - raises an ArgumentError if the number cannot be parsed as octal 3874s - parses the value as a decimal number if there's a leading 0D 3874s - is a positive decimal number if there's a leading +0D 3874s - is a negative decimal number if there's a leading -0D 3874s - raises an ArgumentError if the number cannot be parsed as decimal 3874s - parses the value as a decimal number if there's a leading 0d 3874s - is a positive decimal number if there's a leading +0d 3874s - is a negative decimal number if there's a leading -0d 3874s - raises an ArgumentError if the number cannot be parsed as decimal 3874s - raises an ArgumentError if the String is a null byte 3874s - raises an ArgumentError if the String starts with a null byte 3874s - raises an ArgumentError if the String ends with a null byte 3874s - raises an ArgumentError if the String contains a null byte 3874s - ignores leading whitespace 3874s - ignores trailing whitespace 3874s - raises an ArgumentError if there are leading _s 3874s - raises an ArgumentError if there are trailing _s 3874s - ignores an embedded _ 3874s - raises an ArgumentError if there are multiple embedded _s 3874s - ignores a single leading + 3874s - raises an ArgumentError if there is a space between the + and number 3874s - raises an ArgumentError if there are multiple leading +s 3874s - raises an ArgumentError if there are trailing +s 3874s - makes the number negative if there's a leading - 3874s - raises an ArgumentError if there are multiple leading -s 3874s - raises an ArgumentError if there are trailing -s 3874s - raises an ArgumentError if there is a period 3874s - raises an ArgumentError for an empty String 3874s - raises an ArgumentError for a base of 1 3874s - raises an ArgumentError for a base of 37 3874s - accepts wholly lowercase alphabetic strings for bases > 10 3874s - accepts wholly uppercase alphabetic strings for bases > 10 3874s - accepts mixed-case alphabetic strings for bases > 10 3874s - accepts alphanumeric strings for bases > 10 3874s - raises an ArgumentError for letters invalid in the given base 3874s - parses the value as a hex number if there's a leading 0x and a base of 16 3874s - is a positive hex number if there's a leading +0x and base of 16 3874s - is a negative hex number if there's a leading -0x and a base of 16 3874s - raises an ArgumentError if the number begins with 0x and the base is 2 3874s - raises an ArgumentError if the number begins with 0x and the base is 3 3874s - raises an ArgumentError if the number begins with 0x and the base is 4 3874s - raises an ArgumentError if the number begins with 0x and the base is 5 3874s - raises an ArgumentError if the number begins with 0x and the base is 6 3874s - raises an ArgumentError if the number begins with 0x and the base is 7 3874s - raises an ArgumentError if the number begins with 0x and the base is 8 3874s - raises an ArgumentError if the number begins with 0x and the base is 9 3874s - raises an ArgumentError if the number begins with 0x and the base is 10 3874s - raises an ArgumentError if the number begins with 0x and the base is 11 3874s - raises an ArgumentError if the number begins with 0x and the base is 12 3874s - raises an ArgumentError if the number begins with 0x and the base is 13 3874s - raises an ArgumentError if the number begins with 0x and the base is 14 3874s - raises an ArgumentError if the number begins with 0x and the base is 15 3874s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 3874s - parses the value as a hex number if there's a leading 0X and a base of 16 3874s - is a positive hex number if there's a leading +0X and base of 16 3874s - is a negative hex number if there's a leading -0X and a base of 16 3874s - raises an ArgumentError if the number begins with 0X and the base is 2 3874s - raises an ArgumentError if the number begins with 0X and the base is 3 3874s - raises an ArgumentError if the number begins with 0X and the base is 4 3874s - raises an ArgumentError if the number begins with 0X and the base is 5 3874s - raises an ArgumentError if the number begins with 0X and the base is 6 3874s - raises an ArgumentError if the number begins with 0X and the base is 7 3874s - raises an ArgumentError if the number begins with 0X and the base is 8 3874s - raises an ArgumentError if the number begins with 0X and the base is 9 3874s - raises an ArgumentError if the number begins with 0X and the base is 10 3874s - raises an ArgumentError if the number begins with 0X and the base is 11 3874s - raises an ArgumentError if the number begins with 0X and the base is 12 3874s - raises an ArgumentError if the number begins with 0X and the base is 13 3874s - raises an ArgumentError if the number begins with 0X and the base is 14 3874s - raises an ArgumentError if the number begins with 0X and the base is 15 3874s - raises an ArgumentError if the number cannot be parsed as hex and the base is 16 3874s - parses the value as a binary number if there's a leading 0b and the base is 2 3874s - is a positive binary number if there's a leading +0b and a base of 2 3874s - is a negative binary number if there's a leading -0b and a base of 2 3874s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 3874s - parses the value as a binary number if there's a leading 0B and the base is 2 3874s - is a positive binary number if there's a leading +0B and a base of 2 3874s - is a negative binary number if there's a leading -0B and a base of 2 3874s - raises an ArgumentError if the number cannot be parsed as binary and the base is 2 3874s - parses the value as an octal number if there's a leading 0o and a base of 8 3874s - is a positive octal number if there's a leading +0o and a base of 8 3874s - is a negative octal number if there's a leading -0o and a base of 8 3874s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 3874s - raises an ArgumentError if the number begins with 0o and the base is 2 3874s - raises an ArgumentError if the number begins with 0o and the base is 3 3874s - raises an ArgumentError if the number begins with 0o and the base is 4 3874s - raises an ArgumentError if the number begins with 0o and the base is 5 3874s - raises an ArgumentError if the number begins with 0o and the base is 6 3874s - raises an ArgumentError if the number begins with 0o and the base is 7 3874s - parses the value as an octal number if there's a leading 0O and a base of 8 3874s - is a positive octal number if there's a leading +0O and a base of 8 3874s - is a negative octal number if there's a leading -0O and a base of 8 3874s - raises an ArgumentError if the number cannot be parsed as octal and the base is 8 3874s - raises an ArgumentError if the number begins with 0O and the base is 2 3874s - raises an ArgumentError if the number begins with 0O and the base is 3 3874s - raises an ArgumentError if the number begins with 0O and the base is 4 3874s - raises an ArgumentError if the number begins with 0O and the base is 5 3874s - raises an ArgumentError if the number begins with 0O and the base is 6 3874s - raises an ArgumentError if the number begins with 0O and the base is 7 3874s - parses the value as a decimal number if there's a leading 0D and a base of 10 3874s - is a positive decimal number if there's a leading +0D and a base of 10 3874s - is a negative decimal number if there's a leading -0D and a base of 10 3874s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 3874s - raises an ArgumentError if the number begins with 0D and the base is 2 3874s - raises an ArgumentError if the number begins with 0D and the base is 3 3874s - raises an ArgumentError if the number begins with 0D and the base is 4 3874s - raises an ArgumentError if the number begins with 0D and the base is 5 3874s - raises an ArgumentError if the number begins with 0D and the base is 6 3874s - raises an ArgumentError if the number begins with 0D and the base is 7 3874s - raises an ArgumentError if the number begins with 0D and the base is 8 3874s - raises an ArgumentError if the number begins with 0D and the base is 9 3874s - parses the value as a decimal number if there's a leading 0d and a base of 10 3874s - is a positive decimal number if there's a leading +0d and a base of 10 3874s - is a negative decimal number if there's a leading -0d and a base of 10 3874s - raises an ArgumentError if the number cannot be parsed as decimal and the base is 10 3874s - raises an ArgumentError if the number begins with 0d and the base is 2 3874s - raises an ArgumentError if the number begins with 0d and the base is 3 3874s - raises an ArgumentError if the number begins with 0d and the base is 4 3874s - raises an ArgumentError if the number begins with 0d and the base is 5 3874s - raises an ArgumentError if the number begins with 0d and the base is 6 3874s - raises an ArgumentError if the number begins with 0d and the base is 7 3874s - raises an ArgumentError if the number begins with 0d and the base is 8 3874s - raises an ArgumentError if the number begins with 0d and the base is 9 3874s - raises an ArgumentError if a base is given for a non-String value 3874s - tries to convert the base to an integer using to_int 3874s - is a private method 3874s 3874s Kernel#Integer when passed exception: false and to_i returns a value that is not an Integer 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and no to_int or to_i methods exist 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and to_int returns nil and no to_i exists 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and passed NaN 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and passed Infinity 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and passed nil 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and passed a String that contains numbers 3874s - normally parses it and returns an Integer 3874s 3874s Kernel#Integer when passed exception: false and passed a String that can't be converted to an Integer 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and multiple leading -s 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and multiple trailing -s 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and an argument that contains a period 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and an empty string 3874s - swallows an error 3874s 3874s Kernel#Integer when passed exception: false and valid argument 3874s - returns an Integer number 3874s 3874s Kernel#Integer when passed exception: false and invalid argument 3874s - swallows an error 3874s 3874s Kernel.Rational 3874s - raises a ZeroDivisionError if the second argument is 0 3874s - raises a TypeError if the first argument is nil 3874s - raises a TypeError if the second argument is nil 3874s - raises a TypeError if the first argument is a Symbol 3874s - raises a TypeError if the second argument is a Symbol 3874s - freezes its result 3874s 3874s Kernel.Rational passed Integer 3874s - returns a new Rational number with 1 as the denominator 3874s 3874s Kernel.Rational passed two integers 3874s - returns a new Rational number 3874s - reduces the Rational 3874s 3874s Kernel.Rational when passed a String 3874s - converts the String to a Rational using the same method as String#to_r 3874s - scales the Rational value of the first argument by the Rational value of the second 3874s - does not use the same method as Float#to_r 3874s 3874s Kernel.Rational when passed a Numeric 3874s - calls #to_r to convert the first argument to a Rational 3874s 3874s Kernel.Rational when passed a Complex 3874s - returns a Rational from the real part if the imaginary part is 0 3874s - raises a RangeError if the imaginary part is not 0 3874s 3874s Kernel.Rational when passed exception: false and [non-Numeric] 3874s - swallows an error 3874s 3874s Kernel.Rational when passed exception: false and [non-Numeric, Numeric] 3874s - swallows an error 3874s 3874s Kernel.Rational when passed exception: false and [anything, non-Numeric] 3874s - swallows an error 3874s 3874s Kernel.Rational when passed exception: false and non-Numeric String arguments 3874s - swallows an error 3874s 3874s Kernel.Rational when passed exception: false and nil arguments 3874s - swallows an error 3874s 3874s Kernel.String 3874s - converts nil to a String 3874s - converts a Float to a String 3874s - converts a boolean to a String 3874s - converts a constant to a String 3874s - calls #to_s to convert an arbitrary object to a String 3874s - raises a TypeError if #to_s does not exist 3874s - raises a TypeError if respond_to? returns false for #to_s 3874s - raises a TypeError if #to_s is not defined, even though #respond_to?(:to_s) returns true 3874s - calls #to_s if #respond_to?(:to_s) returns true 3874s - raises a TypeError if #to_s does not return a String 3874s - returns the same object if it is already a String 3874s - returns the same object if it is an instance of a String subclass 3874s 3874s Kernel#String 3874s - converts nil to a String 3874s - converts a Float to a String 3874s - converts a boolean to a String 3874s - converts a constant to a String 3874s - calls #to_s to convert an arbitrary object to a String 3874s - raises a TypeError if #to_s does not exist 3874s - raises a TypeError if respond_to? returns false for #to_s 3874s - raises a TypeError if #to_s is not defined, even though #respond_to?(:to_s) returns true 3874s - calls #to_s if #respond_to?(:to_s) returns true 3874s - raises a TypeError if #to_s does not return a String 3874s - returns the same object if it is already a String 3874s - returns the same object if it is an instance of a String subclass 3874s - is a private method 3874s 3874s Kernel.__callee__ 3874s - returns the current method, even when aliased 3874s - returns the aliased name when aliased method 3874s - returns the caller from blocks too 3874s - returns the caller from define_method too 3874s - returns the caller from block inside define_method too 3874s - returns method name even from send 3874s - returns method name even from eval 3874s - returns nil from inside a class body 3874s - returns nil when not called from a method 3874s - returns the caller from a define_method called from the same class 3874s 3874s Kernel#__dir__ 3874s - returns the real name of the directory containing the currently-executing file 3877s - returns the expanded path of the directory when used in the main script 3877s 3877s Kernel.__method__ 3877s - returns the current method, even when aliased 3877s - returns the original name when aliased method 3877s - returns the caller from blocks too 3877s - returns the caller from define_method too 3877s - returns the caller from block inside define_method too 3877s - returns method name even from send 3877s - returns method name even from eval 3877s - returns nil from inside a class body 3877s - returns nil when not called from a method 3877s 3877s Kernel#abort 3877s - is a private method 3877s - raises a SystemExit exception 3877s - sets the exception message to the given message 3877s - sets the exception status code of 1 3877s - prints the specified message to STDERR 3877s - coerces the argument with #to_str 3877s - raises TypeError when given a non-String object 3877s 3877s Kernel.abort 3877s - raises a SystemExit exception 3877s - sets the exception message to the given message 3877s - sets the exception status code of 1 3877s - prints the specified message to STDERR 3877s - coerces the argument with #to_str 3877s - raises TypeError when given a non-String object 3877s 3877s Kernel#autoload 3877s - is a private method 3877s - registers a file to load the first time the named constant is accessed 3877s - registers a file to load the first time the named constant is accessed 3877s - sets the autoload constant in Object's constant table 3877s - loads the file when the constant is accessed 3877s - calls main.require(path) to load the file 3877s - can autoload in instance_eval 3877s 3877s Kernel#autoload when Object is frozen 3880s - raises a FrozenError before defining the constant 3880s 3880s Kernel#autoload when called from included module's method 3880s - setups the autoload on the included module 3880s - the autoload is reachable from the class too 3880s - the autoload relative to the included module works 3880s 3880s Kernel#autoload? 3880s - is a private method 3880s - returns the name of the file that will be autoloaded 3880s - returns nil if no file has been registered for a constant 3880s 3880s Kernel.autoload 3880s - registers a file to load the first time the toplevel constant is accessed 3880s - sets the autoload constant in Object's constant table 3880s - calls #to_path on non-String filenames 3880s 3880s Kernel.autoload when called from included module's method 3880s - setups the autoload on the included module 3880s - the autoload is reachable from the class too 3880s - the autoload relative to the included module works 3880s 3880s Kernel.autoload? 3880s - returns the name of the file that will be autoloaded 3880s - returns nil if no file has been registered for a constant 3880s 3880s Kernel#` 3880s - is a private method 3880s - returns the standard output of the executed sub-process 3883s - lets the standard error stream pass through to the inherited stderr 3883s - produces a String in the default external encoding 3883s - sets $? to the exit status of the executed sub-process 3883s 3883s Kernel.` 3883s - tries to convert the given argument to String using #to_str 3883s 3883s Kernel.binding 3883s - returns a binding for the caller 3883s 3883s Kernel#binding 3883s - is a private method 3883s - returns a Binding object 3883s - encapsulates the execution context properly 3883s - raises a NameError on undefined variable 3883s - uses the closure's self as self in the binding 3883s - uses the class as self in a Class.new block 3883s 3883s Kernel#block_given? 3883s - returns true if and only if a block is supplied 3883s - returns false when a method defined by define_method is called with a block 3883s - returns false outside of a method 3883s - is a private method 3883s 3883s Kernel.block_given? 3883s - returns true if and only if a block is supplied 3883s - returns false when a method defined by define_method is called with a block 3883s 3883s self.send(:block_given?) 3883s - returns true if and only if a block is supplied 3883s - returns false when a method defined by define_method is called with a block 3883s 3883s Kernel#caller_locations 3883s - is a private method 3883s - returns an Array of caller locations 3883s - returns an Array of caller locations using a custom offset 3883s - returns an Array of caller locations using a custom limit 3883s - can be called with a range 3883s - works with endless ranges 3883s - works with beginless ranges 3883s - must return [] if omitting exactly the number of locations available 3883s - returns the locations as Thread::Backtrace::Location instances 3883s - includes core library methods defined in Ruby 3883s 3883s Kernel#caller 3883s - is a private method 3883s - returns an Array of caller locations 3883s - returns an Array of caller locations using a custom offset 3883s - returns an Array of caller locations using a custom limit 3883s - returns an Array of caller locations using a range 3883s - returns the locations as String instances 3886s - returns an Array with the block given to #at_exit at the base of the stack 3886s - works with endless ranges 3886s - works with beginless ranges 3886s - includes core library methods defined in Ruby 3886s 3886s Kernel#=== for a class with default #== and #equal? 3886s - returns true if other object has same object id 3886s - returns false if other object does not have same object id 3886s 3886s Kernel#=== for a class with #== overridden to consider other object's class 3886s - returns true if #== returns true even if #equal? is false 3886s - returns true if #equal? returns true 3886s - returns false if neither #== nor #equal? returns true 3886s 3886s Kernel#=== for a class with #equal? overridden to always be false 3886s - returns true if #== returns true even if #equal? is false 3886s - returns false if neither #== nor #equal? returns true 3886s 3886s Kernel#=== for a class with #== and #equal? overridden to always be false 3886s - returns true if the object id is the same even if both #== and #equal? return false 3886s - returns false if the object id is not the same and both #== and #equal? return false 3886s 3886s Kernel#=== does not call #object_id nor #equal? 3886s - but still returns true for #== or #=== on the same object 3886s 3886s Kernel.catch 3886s - executes its block and catches a thrown value matching its argument 3886s - returns the second value passed to throw 3886s - returns the last expression evaluated if throw was not called 3886s - passes the given symbol to its block 3886s - raises an ArgumentError if a Symbol is thrown for a String catch value 3886s - raises an ArgumentError if a String with different identity is thrown 3886s - catches a Symbol when thrown a matching Symbol 3886s - catches a String when thrown a String with the same identity 3886s - accepts an object as an argument 3886s - yields an object when called without arguments 3886s - can be used even in a method different from where throw is called 3886s - raises LocalJumpError if no block is given 3886s 3886s Kernel.catch when nested 3886s - catches across invocation boundaries 3886s - catches in the nested invocation with the same key object 3886s 3886s Kernel#catch 3886s - is a private method 3886s 3886s Kernel.chomp 3886s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/kernel/catch_spec.rb:23: warning: unused literal ignored 3889s - removes the final newline of $_ 3892s - removes the final carriage return of $_ 3895s - removes the final carriage return, newline of $_ 3898s - removes only the final newline of $_ 3900s - removes the value of $/ from the end of $_ 3900s 3900s Kernel#chomp 3903s - removes the final newline of $_ 3906s - removes the final carriage return of $_ 3909s - removes the final carriage return, newline of $_ 3912s - removes only the final newline of $_ 3915s - removes the value of $/ from the end of $_ 3918s - is a private method 3918s 3918s Kernel.chomp 3921s - removes the final carriage return, newline from a multi-byte $_ 3921s 3921s Kernel#chomp 3924s - removes the final carriage return, newline from a multi-byte $_ 3924s 3924s Kernel.chop 3927s - removes the final character of $_ 3930s - removes the final carriage return, newline of $_ 3930s 3930s Kernel#chop 3932s - is a private method 3935s - removes the final character of $_ 3938s - removes the final carriage return, newline of $_ 3938s 3938s Kernel.chop 3941s - removes the final multi-byte character from $_ 3941s 3941s Kernel#chop 3944s - removes the final multi-byte character from $_ 3944s 3944s Kernel#class 3944s - returns the class of the object 3944s - returns Class for a class 3944s - returns the first non-singleton class 3944s 3944s Kernel#clone 3944s - returns a new object duplicated from the original 3944s - produces a shallow copy, contained objects are not recursively dupped 3944s - calls #initialize_copy on the NEW object if available, passing in original object 3944s - does not preserve the object_id 3944s - returns nil for NilClass 3944s - returns true for TrueClass 3944s - returns false for FalseClass 3944s - returns the same Integer for Integer 3944s - returns the same Symbol for Symbol 3944s - returns self for Complex 3944s - returns self for Rational 3944s - calls #initialize_copy on the new instance 3944s - uses the internal allocator and does not call #allocate 3944s - copies instance variables 3944s - copies singleton methods 3944s - copies modules included in the singleton class 3944s - copies constants defined in the singleton class 3944s - replaces a singleton object's metaclass with a new copy with the same superclass 3944s 3944s Kernel#clone with no arguments 3944s - copies frozen state from the original 3944s - copies frozen? 3944s 3944s Kernel#clone with freeze: nil 3944s - copies frozen state from the original, like #clone without arguments 3944s - copies frozen? 3944s 3944s Kernel#clone with freeze: true 3944s - makes a frozen copy if the original is frozen 3944s - freezes the copy even if the original was not frozen 3944s - calls #initialize_clone with kwargs freeze: true 3944s - calls #initialize_clone with kwargs freeze: true even if #initialize_clone only takes a single argument 3944s 3944s Kernel#clone with freeze: false 3944s - does not freeze the copy if the original is frozen 3944s - does not freeze the copy if the original is not frozen 3944s - calls #initialize_clone with kwargs freeze: false 3944s - calls #initialize_clone with kwargs freeze: false even if #initialize_clone only takes a single argument 3944s 3944s Kernel#clone with freeze: anything else 3944s - raises ArgumentError when passed not true/false/nil 3944s 3944s Kernel#<=> 3944s - returns 0 if self 3944s - returns 0 if self is == to the argument 3944s - returns nil if self is eql? but not == to the argument 3944s - returns nil if self.==(arg) returns nil 3944s - returns nil if self is not == to the argument 3944s 3944s Kernel#define_singleton_method 3944s - defines a new method with the given name and the given block as body in self 3944s - raises a TypeError when the given method is no Method/Proc 3944s - defines a new singleton method for objects 3944s - maintains the Proc's scope 3944s - raises an ArgumentError when no block is given 3944s - does not use the caller block when no block is given 3944s - always defines the method with public visibility 3944s - cannot define a singleton method with a frozen singleton class 3944s 3944s Kernel#define_singleton_method when given an UnboundMethod 3944s - correctly calls the new method 3944s - adds the new method to the methods list 3944s - defines any Child class method from any Parent's class methods 3944s - will raise when attempting to define an object's singleton method from another object's singleton method 3944s 3944s Kernel#display 3944s - needs to be reviewed for spec completeness 3944s 3944s Kernel#dup 3944s - returns a new object duplicated from the original 3944s - produces a shallow copy, contained objects are not recursively dupped 3944s - calls #initialize_copy on the NEW object if available, passing in original object 3944s - does not preserve the object_id 3944s - returns nil for NilClass 3944s - returns true for TrueClass 3944s - returns false for FalseClass 3944s - returns the same Integer for Integer 3944s - returns the same Symbol for Symbol 3944s - returns self for Complex 3944s - returns self for Rational 3944s - calls #initialize_copy on the new instance 3944s - uses the internal allocator and does not call #allocate 3944s - does not copy frozen state from the original 3944s - copies instance variables 3944s - does not copy singleton methods 3944s - does not copy modules included in the singleton class 3944s - does not copy constants defined in the singleton class 3944s 3944s Kernel#enum_for 3944s - needs to be reviewed for spec completeness 3944s 3944s Kernel#eql? 3944s - is a public instance method 3944s - returns true if other is identical to self 3944s - returns false if other is not identical to self 3944s - returns true only if self and other are the same object 3944s - returns true for the same immediate object 3944s - returns false for nil and any other object 3944s - returns false for objects of different classes 3944s - returns true only if self and other are the same boolean 3944s - returns true for integers of initially different ranges 3944s 3944s Kernel#== 3944s - returns true only if obj and other are the same object 3944s 3944s Kernel#eval 3944s - is a private method 3944s - is a module function 3944s - evaluates the code within 3944s - coerces an object to string 3944s - evaluates within the scope of the eval 3944s - evaluates such that constants are scoped to the class of the eval 3944s - finds a local in an enclosing scope 3944s - updates a local in an enclosing scope 3944s - updates a local in a surrounding block scope 3944s - updates a local in a scope above a surrounding block scope 3944s - updates a local in a scope above when modified in a nested block scope 3944s - finds locals in a nested eval 3947s - does not share locals across eval scopes 3947s - doesn't accept a Proc object as a binding 3947s - does not make Proc locals visible to evaluated code 3947s - allows a binding to be captured inside an eval 3947s - uses the same scope for local variables when given the same binding 3947s - allows creating a new class in a binding 3947s - allows creating a new class in a binding created by #eval 3947s - includes file and line information in syntax error 3947s - evaluates string with given filename and negative linenumber 3947s - sets constants at the toplevel from inside a block 3947s - uses (eval) filename if none is provided 3947s - uses (eval) for __FILE__ and 1 for __LINE__ with a binding argument 3947s - does not alter the value of __FILE__ in the binding 3947s - can be aliased 3947s - uses the receiver as self inside the eval 3947s - does not pass the block to the method being eval'ed 3947s - returns from the scope calling #eval when evaluating 'return' 3947s - returns from the method calling #eval when evaluating 'return' 3947s - returns from the method calling #eval when evaluating 'return' in BEGIN 3950s - unwinds through a Proc-style closure and returns from a lambda-style closure in the closure chain 3950s - can be called with Method#call 3950s - has the correct default definee when called through Method#call 3950s - returns nil if given an empty string 3950s 3950s Kernel#eval with a magic encoding comment 3950s - uses the magic comment encoding for the encoding of literal strings 3950s - uses the magic comment encoding for parsing constants 3950s - allows an emacs-style magic comment encoding 3950s - allows spaces before the magic encoding comment 3950s - allows a shebang line before the magic encoding comment 3950s - allows a shebang line and some spaces before the magic encoding comment 3950s - allows a magic encoding comment and a subsequent frozen_string_literal magic comment 3950s - allows a magic encoding comment and a frozen_string_literal magic comment on the same line in emacs style 3950s - ignores the frozen_string_literal magic comment if it appears after a token and warns if $VERBOSE is true 3950s 3950s Kernel#eval with refinements 3950s - activates refinements from the eval scope 3950s - activates refinements from the binding 3950s 3950s Kernel#exec 3950s - is a private method 3953s - runs the specified command, replacing current process 3953s 3953s Kernel.exec 3956s - runs the specified command, replacing current process 3956s 3956s Kernel#exit 3956s - is a private method 3956s - raises a SystemExit with status 0 3956s - raises a SystemExit with the specified status 3956s - raises a SystemExit with the specified boolean status 3956s - raises a SystemExit with message 'exit' 3956s - tries to convert the passed argument to an Integer using #to_int 3956s - converts the passed Float argument to an Integer 3956s - raises TypeError if can't convert the argument to an Integer 3956s - raises the SystemExit in the main thread if it reaches the top-level handler of another thread 3956s 3956s Kernel.exit 3956s - raises a SystemExit with status 0 3956s - raises a SystemExit with the specified status 3956s - raises a SystemExit with the specified boolean status 3956s - raises a SystemExit with message 'exit' 3956s - tries to convert the passed argument to an Integer using #to_int 3956s - converts the passed Float argument to an Integer 3956s - raises TypeError if can't convert the argument to an Integer 3956s - raises the SystemExit in the main thread if it reaches the top-level handler of another thread 3956s 3956s Kernel#exit! 3956s - is a private method 3959s - exits with the given status 3962s - exits when called from a thread 3965s - exits when called from a fiber 3967s - skips at_exit handlers 3970s - skips ensure clauses 3973s - overrides the original exception and exit status when called from #at_exit 3973s 3973s Kernel.exit! 3976s - exits with the given status 3979s - exits when called from a thread 3982s - exits when called from a fiber 3985s - skips at_exit handlers 3989s - skips ensure clauses 3992s - overrides the original exception and exit status when called from #at_exit 3992s 3992s Kernel#extend 3992s - requires multiple arguments 3992s - calls extend_object on argument 3992s - does not calls append_features on arguments metaclass 3992s - calls extended on argument 3992s - makes the class a kind_of? the argument 3992s - raises an ArgumentError when no arguments given 3992s - raises a TypeError when the argument is not a Module 3992s 3992s Kernel#extend on frozen instance 3992s - raises an ArgumentError when no arguments given 3992s - raises a FrozenError 3992s 3992s Kernel#fail 3992s - is a private method 3992s - raises a RuntimeError 3992s - accepts an Object with an exception method returning an Exception 3992s - instantiates the specified exception class 3992s - uses the specified message 3992s 3992s Kernel.fail 3992s - needs to be reviewed for spec completeness 3992s 3992s Kernel#fork 3992s - is a private method 3992s 3992s Kernel#format 3992s - is a private method 3992s 3992s Kernel.format 3992s - is accessible as a module function 3992s 3992s Kernel#freeze 3992s - prevents self from being further modified 3992s - returns self 3992s - causes mutative calls to raise RuntimeError 3992s - causes instance_variable_set to raise RuntimeError 3992s 3992s Kernel#freeze on integers 3992s - has no effect since they are already frozen 3992s 3992s Kernel#freeze on a Float 3992s - has no effect since it is already frozen 3992s 3992s Kernel#freeze on a Symbol 3992s - has no effect since it is already frozen 3992s 3992s Kernel#freeze on true, false and nil 3992s - has no effect since they are already frozen 3992s 3992s Kernel#freeze on a Complex 3992s - has no effect since it is already frozen 3992s 3992s Kernel#freeze on a Rational 3992s - has no effect since it is already frozen 3992s 3992s Kernel#frozen? 3992s - returns true if self is frozen 3992s 3992s Kernel#frozen? on true, false and nil 3992s - returns true 3992s 3992s Kernel#frozen? on integers 3992s - returns true 3992s 3992s Kernel#frozen? on a Float 3992s - returns true 3992s 3992s Kernel#frozen? on a Symbol 3992s - returns true 3992s 3992s Kernel#frozen? on a Complex 3992s - returns true 3992s - literal returns true 3992s 3992s Kernel#frozen? on a Rational 3992s - returns true 3992s - literal returns true 3992s 3992s Kernel#gets 3992s - is a private method 3992s - calls ARGF.gets 3992s 3992s Kernel.gets 3992s - needs to be reviewed for spec completeness 3992s 3992s Kernel.global_variables 3992s - is a private method 3992s - finds subset starting with std 3992s 3992s Kernel#global_variables 3992s - needs to be reviewed for spec completeness 3992s 3992s Kernel#initialize_clone 3992s - is a private instance method 3992s - returns the receiver 3992s - calls #initialize_copy 3992s - accepts a :freeze keyword argument for obj.clone(freeze: value) 3992s 3992s Kernel#initialize_copy 3992s - returns self 3992s - does nothing if the argument is the same as the receiver 3992s - raises FrozenError if the receiver is frozen 3992s - raises TypeError if the objects are of different class 3992s 3992s Kernel#initialize_dup 3992s - is a private instance method 3992s - returns the receiver 3992s - calls #initialize_copy 3992s 3992s Kernel#inspect 3992s - returns a String 3992s - does not call #to_s if it is defined 3992s - returns a String with the object class and object_id encoded 3992s - returns a String for an object without #class method 3992s 3992s Kernel#instance_of? 3992s - returns true if given class is object's class 3992s - returns false if given class is object's ancestor class 3992s - returns false if given class is not object's class nor object's ancestor class 3992s - returns false if given a Module that is included in object's class 3992s - returns false if given a Module that is included one of object's ancestors only 3992s - returns false if given a Module that is not included in object's class 3992s - raises a TypeError if given an object that is not a Class nor a Module 3992s 3992s Kernel#instance_variable_defined? 3992s - raises a TypeError if passed an Object not defining #to_str 3992s - returns false if the instance variable is not defined for different types 3992s 3992s Kernel#instance_variable_defined? when passed a String 3992s - returns false if the instance variable is not defined 3992s - returns true if the instance variable is defined 3992s 3992s Kernel#instance_variable_defined? when passed a Symbol 3992s - returns false if the instance variable is not defined 3992s - returns true if the instance variable is defined 3992s 3992s Kernel#instance_variable_get 3992s - tries to convert the passed argument to a String using #to_str 3992s - returns the value of the passed instance variable that is referred to by the conversion result 3992s - returns nil when the referred instance variable does not exist 3992s - raises a TypeError when the passed argument does not respond to #to_str 3992s - raises a TypeError when the passed argument can't be converted to a String 3992s - raises a NameError when the conversion result does not start with an '@' 3992s - raises a NameError when passed just '@' 3992s 3992s Kernel#instance_variable_get when passed Symbol 3992s - returns the value of the instance variable that is referred to by the passed Symbol 3992s - raises a NameError when passed :@ as an instance variable name 3992s - raises a NameError when the passed Symbol does not start with an '@' 3992s - raises a NameError when the passed Symbol is an invalid instance variable name 3992s - returns nil or raises for frozen objects 3992s 3992s Kernel#instance_variable_get when passed String 3992s - returns the value of the instance variable that is referred to by the passed String 3992s - raises a NameError when the passed String does not start with an '@' 3992s - raises a NameError when the passed String is an invalid instance variable name 3992s - raises a NameError when passed '@' as an instance variable name 3992s 3992s Kernel#instance_variable_get when passed Integer 3992s - raises a TypeError 3992s 3992s Kernel#instance_variable_set 3992s - sets the value of the specified instance variable 3992s - sets the value of the instance variable when no instance variables exist yet 3992s - raises a NameError exception if the argument is not of form '@x' 3992s - raises a NameError exception if the argument is an invalid instance variable name 3992s - raises a NameError when the argument is '@' 3992s - raises a TypeError if the instance variable name is an Integer 3992s - raises a TypeError if the instance variable name is an object that does not respond to to_str 3992s - raises a NameError if the passed object, when coerced with to_str, does not start with @ 3992s - raises a NameError if pass an object that cannot be a symbol 3992s - accepts as instance variable name any instance of a class that responds to to_str 3992s 3992s Kernel#instance_variable_set on frozen objects 3992s - keeps stored object after any exceptions 3992s - raises a FrozenError when passed replacement is identical to stored object 3992s - raises a FrozenError when passed replacement is different from stored object 3992s - accepts unicode instance variable names 3992s - raises for frozen objects 3992s 3992s Kernel#instance_variables immediate values 3992s - returns an empty array if no instance variables are defined 3992s - returns the correct array if an instance variable is added 3992s 3992s Kernel#instance_variables regular objects 3992s - returns an empty array if no instance variables are defined 3992s - returns the correct array if an instance variable is added 3992s - returns the instances variables in the order declared 3992s 3992s Kernel#is_a? 3992s - returns true if given class is the object's class 3992s - returns true if given class is an ancestor of the object's class 3992s - returns false if the given class is not object's class nor an ancestor 3992s - returns true if given a Module that is included in object's class 3992s - returns true if given a Module that is included one of object's ancestors only 3992s - returns true if given a Module that object has been extended with 3992s - returns true if given a Module that object has been prepended with 3992s - returns false if given a Module not included nor prepended in object's class nor ancestors 3992s - raises a TypeError if given an object that is not a Class nor a Module 3992s - does not take into account `class` method overriding 3992s 3992s Kernel#itself 3992s - returns the receiver itself 3992s 3992s Kernel#kind_of? 3992s - returns true if given class is the object's class 3992s - returns true if given class is an ancestor of the object's class 3992s - returns false if the given class is not object's class nor an ancestor 3992s - returns true if given a Module that is included in object's class 3992s - returns true if given a Module that is included one of object's ancestors only 3992s - returns true if given a Module that object has been extended with 3992s - returns true if given a Module that object has been prepended with 3992s - returns false if given a Module not included nor prepended in object's class nor ancestors 3992s - raises a TypeError if given an object that is not a Class nor a Module 3992s - does not take into account `class` method overriding 3992s 3992s Kernel.lambda 3992s - returns a Proc object 3992s - raises an ArgumentError when no block is given 3992s - is a private method 3992s - creates a lambda-style Proc if given a literal block 3992s - creates a lambda-style Proc if given a literal block via #send 3992s - creates a lambda-style Proc if given a literal block via #__send__ 3992s - creates a lambda-style Proc if given a literal block via Kernel.public_send 3992s - returns the passed Proc if given an existing Proc 3992s - creates a lambda-style Proc when called with zsuper 3992s - returns the passed Proc if given an existing Proc through super 3992s - checks the arity of the call when no args are specified 3992s - checks the arity when 1 arg is specified 3992s - does not check the arity when passing a Proc with & 3992s - accepts 0 arguments when used with || 3992s - strictly checks the arity when 0 or 2..inf args are specified 3992s - returns from the lambda itself, not the creation site of the lambda 3992s - allows long returns to flow through it 3992s - treats the block as a Proc when lambda is re-defined 3992s 3992s Kernel.lambda when called without a literal block 3992s - warns when proc isn't a lambda 3992s - doesn't warn when proc is lambda 3992s 3992s Kernel#load 3992s - is a private method 3992s 3992s Kernel#load (path resolution) 3992s - loads an absolute path 3992s - loads a non-canonical absolute path 3992s /tmp/autopkgtest.mg4W0U/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 3992s - loads a file defining many methods 3992s - raises a LoadError if the file does not exist 3992s - calls #to_str on non-String objects 3992s - raises a TypeError if passed nil 3992s - raises a TypeError if passed an Integer 3992s - raises a TypeError if passed an Array 3992s - raises a TypeError if passed an object that does not provide #to_str 3992s - raises a TypeError if passed an object that has #to_s but not #to_str 3992s - raises a TypeError if #to_str does not return a String 3992s - calls #to_path on non-String objects 3992s - calls #to_path on a String 3992s - calls #to_str on non-String objects returned by #to_path 3992s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 3992s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 3992s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 3992s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 3992s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 3992s - resolves a filename against $LOAD_PATH entries 3992s - accepts an Object with #to_path in $LOAD_PATH 3992s - does not require file twice after $LOAD_PATH change 3992s - does not resolve a ./ relative path against $LOAD_PATH entries 3992s - does not resolve a ../ relative path against $LOAD_PATH entries 3992s - resolves a non-canonical path against $LOAD_PATH entries 3992s - loads a path with duplicate path separators 3992s 3992s Kernel#load (path resolution) with an unreadable file 3992s - raises a LoadError 3992s 3992s Kernel#load 3992s - loads a file that recursively requires itself 3992s - loads a file that recursively loads itself 3992s - loads a file each time the method is called 3992s - loads a file even when the name appears in $LOADED_FEATURES 3992s - loads a file that has been loaded by #require 3992s - loads file even after $LOAD_PATH change 3992s - does not cause #require with the same path to fail 3992s - does not add the loaded path to $LOADED_FEATURES 3992s - raises a LoadError if passed a non-extensioned path that does not exist but a .rb extensioned path does exist 3992s 3992s Kernel#load (path resolution) 3992s - loads a non-extensioned file as a Ruby source file 3992s - loads a non .rb extensioned file as a Ruby source file 3992s - loads from the current working directory 3992s - does not look for a c-extension file when passed a path without extension (when no .rb is present) 3992s 3992s Kernel#load when passed true for 'wrap' 3992s - loads from an existing path 3992s - sets the enclosing scope to an anonymous module 3992s - allows referencing outside namespaces 3992s - sets self as a copy of the top-level main 3992s - includes modules included in main's singleton class in self's class 3992s 3992s Kernel#load when passed true for 'wrap' with top-level methods 3992s - allows calling top-level methods 3992s - does not pollute the receiver 3992s 3992s Kernel#load when passed a module for 'wrap' 3992s - sets the enclosing scope to the supplied module 3992s - makes constants and instance methods in the source file reachable with the supplied module 3992s - makes instance methods in the source file private 3992s 3992s Kernel#load (shell expansion) 3992s - expands a tilde to the HOME environment variable as the path to load 3992s 3992s Kernel.load (path resolution) 3992s - loads an absolute path 3992s - loads a non-canonical absolute path 3992s - loads a file defining many methods 3992s - raises a LoadError if the file does not exist 3992s - calls #to_str on non-String objects 3992s - raises a TypeError if passed nil 3992s - raises a TypeError if passed an Integer 3992s - raises a TypeError if passed an Array 3992s - raises a TypeError if passed an object that does not provide #to_str 3992s - raises a TypeError if passed an object that has #to_s but not #to_str 3992s - raises a TypeError if #to_str does not return a String 3992s - calls #to_path on non-String objects 3992s - calls #to_path on a String 3992s - calls #to_str on non-String objects returned by #to_path 3992s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 3992s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 3992s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 3992s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 3992s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 3992s - resolves a filename against $LOAD_PATH entries 3992s - accepts an Object with #to_path in $LOAD_PATH 3992s - does not require file twice after $LOAD_PATH change 3992s - does not resolve a ./ relative path against $LOAD_PATH entries 3992s - does not resolve a ../ relative path against $LOAD_PATH entries 3992s - resolves a non-canonical path against $LOAD_PATH entries 3992s - loads a path with duplicate path separators 3992s 3992s Kernel.load (path resolution) with an unreadable file 3992s - raises a LoadError 3992s 3992s Kernel.load 3992s - loads a file that recursively requires itself 3992s - loads a file that recursively loads itself 3992s - loads a file each time the method is called 3992s - loads a file even when the name appears in $LOADED_FEATURES 3992s - loads a file that has been loaded by #require 3992s - loads file even after $LOAD_PATH change 3992s - does not cause #require with the same path to fail 3992s - does not add the loaded path to $LOADED_FEATURES 3992s - raises a LoadError if passed a non-extensioned path that does not exist but a .rb extensioned path does exist 3992s 3992s Kernel.load (path resolution) 3992s - loads a non-extensioned file as a Ruby source file 3992s - loads a non .rb extensioned file as a Ruby source file 3992s - loads from the current working directory 3992s - does not look for a c-extension file when passed a path without extension (when no .rb is present) 3992s 3992s Kernel.load when passed true for 'wrap' 3992s - loads from an existing path 3992s - sets the enclosing scope to an anonymous module 3992s - allows referencing outside namespaces 3992s - sets self as a copy of the top-level main 3992s - includes modules included in main's singleton class in self's class 3992s 3992s Kernel.load when passed true for 'wrap' with top-level methods 3992s - allows calling top-level methods 3992s - does not pollute the receiver 3992s 3992s Kernel.load when passed a module for 'wrap' 3992s - sets the enclosing scope to the supplied module 3992s - makes constants and instance methods in the source file reachable with the supplied module 3992s - makes instance methods in the source file private 3992s 3992s Kernel.load (shell expansion) 3992s - expands a tilde to the HOME environment variable as the path to load 3992s 3992s Kernel#local_variables 3992s - is a private method 3992s - contains locals as they are added 3992s - is accessible from bindings 3992s - is accessible in eval 3992s - includes only unique variable names 3992s 3992s Kernel.loop 3992s - is a private method 3992s - calls block until it is terminated by a break 3992s - returns value passed to break 3992s - returns nil if no value passed to break 3992s - returns an enumerator if no block given 3992s - rescues StopIteration 3992s - rescues StopIteration's subclasses 3992s - does not rescue other errors 3992s - returns StopIteration#result, the result value of a finished iterator 3992s 3992s Kernel.loop when no block is given returned Enumerator size 3992s - returns Float::INFINITY 3992s 3992s Kernel#=~ 3992s - returns nil matching any object 3992s - is deprecated 3992s 3992s Kernel#method 3992s - returns a method object for a valid method 3992s - returns a method object for a valid singleton method 3992s - returns a method object if respond_to_missing?(method) is true 3992s - the returned method object if respond_to_missing?(method) calls #method_missing with a Symbol name 3992s - raises a NameError for an invalid method name 3992s - raises a NameError for an invalid singleton method name 3992s - changes the method called for super on a target aliased method 3992s - can be called on a private method 3992s - can be called on a protected method 3992s - will see an alias of the original method as == when in a derived class 3992s - can call methods created with define_method 3992s - can be called even if we only respond_to_missing? method, true 3992s - can call a #method_missing accepting zero or one arguments 3992s 3992s Kernel#method converts the given name to a String using #to_str 3992s - calls #to_str to convert the given name to a String 3992s - raises a TypeError if the given name can't be converted to a String 3992s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 3992s 3992s Kernel#methods 3992s - returns singleton methods defined by obj.meth 3992s - returns singleton methods defined in 'class << self' 3992s - returns private singleton methods defined by obj.meth 3992s - returns singleton methods defined in 'class << self' when it follows 'private' 3992s - does not return private singleton methods defined in 'class << self' 3992s - returns the publicly accessible methods of the object 3992s - returns the publicly accessible methods in the object, its ancestors and mixed-in modules 3992s - returns methods added to the metaclass through extend 3992s - does not return undefined singleton methods defined by obj.meth 3992s - does not return superclass methods undefined in the object's class 3992s - does not return superclass methods undefined in a superclass 3992s - does not return included module methods undefined in the object's class 3992s 3992s Kernel#methods when not passed an argument 3992s - returns a unique list for an object extended by a module 3992s - returns a unique list for a class including a module 3992s - returns a unique list for a subclass of a class that includes a module 3992s 3992s Kernel#methods when passed true 3992s - returns a unique list for an object extended by a module 3992s - returns a unique list for a class including a module 3992s - returns a unique list for a subclass of a class that includes a module 3992s 3992s Kernel#nil? 3992s - returns false 3992s 3992s Kernel#!~ 3992s - calls =~ internally and negates the result 3992s - can be overridden in subclasses 3992s 3992s Kernel#object_id 3992s - returns an integer 3992s - returns the same value on all calls to id for a given object 3992s - returns different values for different objects 3992s - returns the same value for two Fixnums with the same value 3992s - returns the same value for two Symbol literals 3992s - returns the same value for two true literals 3992s - returns the same value for two false literals 3992s - returns the same value for two nil literals 3992s - returns a different value for two Bignum literals 3992s - returns a different value for two String literals 3992s - returns a different value for an object and its dup 3992s - returns a different value for two numbers near the 32 bit Fixnum limit 3992s - returns a different value for two numbers near the 64 bit Fixnum limit 3992s 3992s Kernel#open 3992s - is a private method 3992s - opens a file when given a valid filename 3992s - opens a file when called with a block 3992s - opens an io when path starts with a pipe 3992s - opens an io when called with a block 3992s - opens an io for writing 3992s - raises an ArgumentError if not passed one argument 3992s - raises a TypeError if passed a non-String that does not respond to #to_open 3992s - accepts nil for mode and permission 3996s - is not redefined by open-uri 3996s 3996s Kernel#open when given an object that responds to to_open 3996s - calls #to_path to covert the argument to a String before calling #to_str 3996s - calls #to_str to convert the argument to a String 3996s - calls #to_open on argument 3996s - returns the value from #to_open 3996s - passes its arguments onto #to_open 3996s - passes the return value from #to_open to a block 3996s 3996s Kernel.open 3996s - needs to be reviewed for spec completeness 3996s 3996s Kernel#p 3996s - is a private method 3996s - flushes output if receiver is a File 3996s - prints obj.inspect followed by system record separator for each argument given 3996s - is not affected by setting $\, $/ or $, 3996s - prints nothing if no argument is given 3996s - prints nothing if called splatting an empty Array 3996s - does not flush if receiver is not a TTY or a File 3996s 3996s Kernel.p 3996s - needs to be reviewed for spec completeness 3996s 3996s Kernel#pp 3999s - lazily loads the 'pp' library and delegates the call to that library 3999s 3999s Kernel#print 3999s - is a private method 3999s - delegates to $stdout 3999s - prints $_ when no arguments are given 3999s 3999s Kernel.print 3999s - needs to be reviewed for spec completeness 3999s 3999s Kernel#printf 3999s - is a private method 3999s 3999s Kernel.printf 3999s - writes to stdout when a string is the first argument 3999s - calls write on the first argument when it is not a string 3999s - calls #to_str to convert the format object to a String 3999s 3999s Kernel.printf formatting io is specified 3999s - does not raise error when passed more arguments than needed 3999s 3999s Kernel.printf formatting io is specified integer formats 3999s - converts argument into Integer with to_int 3999s - converts argument into Integer with to_i if to_int isn't available 3999s - converts String argument with Kernel#Integer 3999s - raises TypeError exception if cannot convert to Integer 3999s 3999s Kernel.printf formatting io is specified integer formats b 3999s - converts argument as a binary number 3999s - displays negative number as a two's complement prefixed with '..1' 3999s - collapse negative number representation if it equals 1 3999s 3999s Kernel.printf formatting io is specified integer formats B 3999s - converts argument as a binary number 3999s - displays negative number as a two's complement prefixed with '..1' 3999s - collapse negative number representation if it equals 1 3999s 3999s Kernel.printf formatting io is specified integer formats d 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is specified integer formats i 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is specified integer formats u 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is specified integer formats o 3999s - converts argument as an octal number 3999s - displays negative number as a two's complement prefixed with '..7' 3999s - collapse negative number representation if it equals 7 3999s 3999s Kernel.printf formatting io is specified integer formats x 3999s - converts argument as a hexadecimal number 3999s - displays negative number as a two's complement prefixed with '..f' 3999s - collapse negative number representation if it equals f 3999s 3999s Kernel.printf formatting io is specified integer formats X 3999s - converts argument as a hexadecimal number with uppercase letters 3999s - displays negative number as a two's complement prefixed with '..f' 3999s - collapse negative number representation if it equals F 3999s 3999s Kernel.printf formatting io is specified float formats 3999s - converts argument into Float 3999s - raises TypeError exception if cannot convert to Float 3999s 3999s Kernel.printf formatting io is specified float formats e 3999s - converts argument into exponential notation [-]d.dddddde[+-]dd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats E 3999s - converts argument into exponential notation [-]d.dddddde[+-]dd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats f 3999s - converts floating point argument as [-]ddd.dddddd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats g 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats g the exponent is less than -4 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is specified float formats g the exponent is greater than or equal to the precision (6 by default) 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is specified float formats g otherwise 3999s - converts a floating point number in dd.dddd form 3999s - cuts excessive digits in fractional part and keeps only 4 ones 3999s - rounds the last significant digit to the closest one in fractional part 3999s - cuts fraction part to have only 6 digits at all 3999s 3999s Kernel.printf formatting io is specified float formats G 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats G the exponent is less than -4 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is specified float formats G the exponent is greater than or equal to the precision (6 by default) 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is specified float formats G otherwise 3999s - converts a floating point number in dd.dddd form 3999s - cuts excessive digits in fractional part and keeps only 4 ones 3999s - rounds the last significant digit to the closest one in fractional part 3999s - cuts fraction part to have only 6 digits at all 3999s 3999s Kernel.printf formatting io is specified float formats a 3999s - converts floating point argument as [-]0xh.hhhhp[+-]dd 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified float formats A 3999s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is specified other formats c 3999s - displays character if argument is a numeric code of character 3999s - displays character if argument is a single character string 3999s - raises ArgumentError if argument is a string of several characters 3999s - raises ArgumentError if argument is an empty string 3999s - raises TypeError if argument is not String or Integer and cannot be converted to them 3999s - raises TypeError if argument is nil 3999s - tries to convert argument to String with to_str 3999s - tries to convert argument to Integer with to_int 3999s - raises TypeError if converting to String with to_str returns non-String 3999s - raises TypeError if converting to Integer with to_int returns non-Integer 3999s 3999s Kernel.printf formatting io is specified other formats p 3999s - displays argument.inspect value 3999s 3999s Kernel.printf formatting io is specified other formats s 3999s - substitute argument passes as a string 3999s - substitutes '' for nil 3999s - converts argument to string with to_s 3999s - does not try to convert with to_str 3999s - formats a partial substring without including omitted characters 3999s - formats string with precision 3999s - formats string with width 3999s - formats string with width and precision 3999s - formats nil with width 3999s - formats nil with precision 3999s - formats nil with width and precision 3999s - formats multibyte string with precision 3999s - preserves encoding of the format string 3999s 3999s Kernel.printf formatting io is specified other formats % 3999s - alone raises an ArgumentError 3999s - is escaped by % 3999s 3999s Kernel.printf formatting io is specified flags space applies to numeric formats bBdiouxXeEfgGaA 3999s - leaves a space at the start of non-negative numbers 3999s - does not leave a space at the start of negative numbers 3999s - prevents converting negative argument to two's complement form 3999s - treats several white spaces as one 3999s 3999s Kernel.printf formatting io is specified flags (digit)$ 3999s - specifies the absolute argument number for this field 3999s - raises exception if argument number is bigger than actual arguments list 3999s - ignores '-' sign 3999s - raises ArgumentError exception when absolute and relative argument numbers are mixed 3999s 3999s Kernel.printf formatting io is specified flags # applies to format o 3999s - increases the precision until the first digit will be `0' if it is not formatted as complements 3999s - does nothing for negative argument 3999s 3999s Kernel.printf formatting io is specified flags # applies to formats bBxX 3999s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 3999s - does nothing for zero argument 3999s 3999s Kernel.printf formatting io is specified flags # applies to formats aAeEfgG 3999s - forces a decimal point to be added, even if no digits follow 3999s - changes format from dd.dddd to exponential form for gG 3999s 3999s Kernel.printf formatting io is specified flags # applies to gG 3999s - does not remove trailing zeros 3999s 3999s Kernel.printf formatting io is specified flags + applies to numeric formats bBdiouxXaAeEfgG 3999s - adds a leading plus sign to non-negative numbers 3999s - does not use two's complement form for negative numbers for formats bBoxX 3999s 3999s Kernel.printf formatting io is specified flags - 3999s - left-justifies the result of conversion if width is specified 3999s 3999s Kernel.printf formatting io is specified flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 3999s - pads with zeros, not spaces 3999s - uses radix-1 when displays negative argument as a two's complement 3999s 3999s Kernel.printf formatting io is specified flags * 3999s - uses the previous argument as the field width 3999s - left-justifies the result if width is negative 3999s - uses the specified argument as the width if * is followed by a number and $ 3999s - left-justifies the result if specified with $ argument is negative 3999s - raises ArgumentError when is mixed with width 3999s 3999s Kernel.printf formatting io is specified width 3999s - specifies the minimum number of characters that will be written to the result 3999s - is ignored if argument's actual length is greater 3999s 3999s Kernel.printf formatting io is specified precision integer types 3999s - controls the number of decimal places displayed 3999s 3999s Kernel.printf formatting io is specified precision float types 3999s - controls the number of decimal places displayed in fraction part 3999s - does not affect G format 3999s 3999s Kernel.printf formatting io is specified precision string formats 3999s - determines the maximum number of characters to be copied from the string 3999s 3999s Kernel.printf formatting io is specified reference by name %s style 3999s - uses value passed in a hash argument 3999s - supports flags, width, precision and type 3999s - allows to place name in any position 3999s - cannot be mixed with unnamed style 3999s 3999s Kernel.printf formatting io is specified reference by name %{name} style 3999s - uses value passed in a hash argument 3999s - does not support type style 3999s - supports flags, width and precision 3999s - cannot be mixed with unnamed style 3999s - raises KeyError when there is no matching key 3999s - converts value to String with to_s 3999s 3999s Kernel.printf formatting io is specified faulty key 3999s - raises a KeyError 3999s - sets the Hash as the receiver of KeyError 3999s - sets the unmatched key as the key of KeyError 3999s 3999s Kernel.printf formatting io is not specified 3999s - does not raise error when passed more arguments than needed 3999s 3999s Kernel.printf formatting io is not specified integer formats 3999s - converts argument into Integer with to_int 3999s - converts argument into Integer with to_i if to_int isn't available 3999s - converts String argument with Kernel#Integer 3999s - raises TypeError exception if cannot convert to Integer 3999s 3999s Kernel.printf formatting io is not specified integer formats b 3999s - converts argument as a binary number 3999s - displays negative number as a two's complement prefixed with '..1' 3999s - collapse negative number representation if it equals 1 3999s 3999s Kernel.printf formatting io is not specified integer formats B 3999s - converts argument as a binary number 3999s - displays negative number as a two's complement prefixed with '..1' 3999s - collapse negative number representation if it equals 1 3999s 3999s Kernel.printf formatting io is not specified integer formats d 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is not specified integer formats i 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is not specified integer formats u 3999s - converts argument as a decimal number 3999s - works well with large numbers 3999s 3999s Kernel.printf formatting io is not specified integer formats o 3999s - converts argument as an octal number 3999s - displays negative number as a two's complement prefixed with '..7' 3999s - collapse negative number representation if it equals 7 3999s 3999s Kernel.printf formatting io is not specified integer formats x 3999s - converts argument as a hexadecimal number 3999s - displays negative number as a two's complement prefixed with '..f' 3999s - collapse negative number representation if it equals f 3999s 3999s Kernel.printf formatting io is not specified integer formats X 3999s - converts argument as a hexadecimal number with uppercase letters 3999s - displays negative number as a two's complement prefixed with '..f' 3999s - collapse negative number representation if it equals F 3999s 3999s Kernel.printf formatting io is not specified float formats 3999s - converts argument into Float 3999s - raises TypeError exception if cannot convert to Float 3999s 3999s Kernel.printf formatting io is not specified float formats e 3999s - converts argument into exponential notation [-]d.dddddde[+-]dd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats E 3999s - converts argument into exponential notation [-]d.dddddde[+-]dd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats f 3999s - converts floating point argument as [-]ddd.dddddd 3999s - cuts excessive digits and keeps only 6 ones 3999s - rounds the last significant digit to the closest one 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats g 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats g the exponent is less than -4 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is not specified float formats g the exponent is greater than or equal to the precision (6 by default) 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is not specified float formats g otherwise 3999s - converts a floating point number in dd.dddd form 3999s - cuts excessive digits in fractional part and keeps only 4 ones 3999s - rounds the last significant digit to the closest one in fractional part 3999s - cuts fraction part to have only 6 digits at all 3999s 3999s Kernel.printf formatting io is not specified float formats G 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats G the exponent is less than -4 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is not specified float formats G the exponent is greater than or equal to the precision (6 by default) 3999s - converts a floating point number using exponential form 3999s 3999s Kernel.printf formatting io is not specified float formats G otherwise 3999s - converts a floating point number in dd.dddd form 3999s - cuts excessive digits in fractional part and keeps only 4 ones 3999s - rounds the last significant digit to the closest one in fractional part 3999s - cuts fraction part to have only 6 digits at all 3999s 3999s Kernel.printf formatting io is not specified float formats a 3999s - converts floating point argument as [-]0xh.hhhhp[+-]dd 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified float formats A 3999s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 3999s - displays Float::INFINITY as Inf 3999s - displays Float::NAN as NaN 3999s 3999s Kernel.printf formatting io is not specified other formats c 3999s - displays character if argument is a numeric code of character 3999s - displays character if argument is a single character string 3999s - raises ArgumentError if argument is a string of several characters 3999s - raises ArgumentError if argument is an empty string 3999s - raises TypeError if argument is not String or Integer and cannot be converted to them 3999s - raises TypeError if argument is nil 3999s - tries to convert argument to String with to_str 3999s - tries to convert argument to Integer with to_int 3999s - raises TypeError if converting to String with to_str returns non-String 3999s - raises TypeError if converting to Integer with to_int returns non-Integer 3999s 3999s Kernel.printf formatting io is not specified other formats p 3999s - displays argument.inspect value 3999s 3999s Kernel.printf formatting io is not specified other formats s 3999s - substitute argument passes as a string 3999s - substitutes '' for nil 3999s - converts argument to string with to_s 3999s - does not try to convert with to_str 3999s - formats a partial substring without including omitted characters 3999s - formats string with precision 3999s - formats string with width 3999s - formats string with width and precision 3999s - formats nil with width 3999s - formats nil with precision 3999s - formats nil with width and precision 3999s - formats multibyte string with precision 3999s - preserves encoding of the format string 3999s 3999s Kernel.printf formatting io is not specified other formats % 3999s - alone raises an ArgumentError 3999s - is escaped by % 3999s 3999s Kernel.printf formatting io is not specified flags space applies to numeric formats bBdiouxXeEfgGaA 3999s - leaves a space at the start of non-negative numbers 3999s - does not leave a space at the start of negative numbers 3999s - prevents converting negative argument to two's complement form 3999s - treats several white spaces as one 3999s 3999s Kernel.printf formatting io is not specified flags (digit)$ 3999s - specifies the absolute argument number for this field 3999s - raises exception if argument number is bigger than actual arguments list 3999s - ignores '-' sign 3999s - raises ArgumentError exception when absolute and relative argument numbers are mixed 3999s 3999s Kernel.printf formatting io is not specified flags # applies to format o 3999s - increases the precision until the first digit will be `0' if it is not formatted as complements 3999s - does nothing for negative argument 3999s 3999s Kernel.printf formatting io is not specified flags # applies to formats bBxX 3999s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 3999s - does nothing for zero argument 3999s 3999s Kernel.printf formatting io is not specified flags # applies to formats aAeEfgG 3999s - forces a decimal point to be added, even if no digits follow 3999s - changes format from dd.dddd to exponential form for gG 3999s 3999s Kernel.printf formatting io is not specified flags # applies to gG 3999s - does not remove trailing zeros 3999s 3999s Kernel.printf formatting io is not specified flags + applies to numeric formats bBdiouxXaAeEfgG 3999s - adds a leading plus sign to non-negative numbers 3999s - does not use two's complement form for negative numbers for formats bBoxX 3999s 3999s Kernel.printf formatting io is not specified flags - 3999s - left-justifies the result of conversion if width is specified 3999s 3999s Kernel.printf formatting io is not specified flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 3999s - pads with zeros, not spaces 3999s - uses radix-1 when displays negative argument as a two's complement 3999s 3999s Kernel.printf formatting io is not specified flags * 3999s - uses the previous argument as the field width 3999s - left-justifies the result if width is negative 3999s - uses the specified argument as the width if * is followed by a number and $ 3999s - left-justifies the result if specified with $ argument is negative 3999s - raises ArgumentError when is mixed with width 3999s 3999s Kernel.printf formatting io is not specified width 3999s - specifies the minimum number of characters that will be written to the result 3999s - is ignored if argument's actual length is greater 3999s 3999s Kernel.printf formatting io is not specified precision integer types 3999s - controls the number of decimal places displayed 3999s 3999s Kernel.printf formatting io is not specified precision float types 3999s - controls the number of decimal places displayed in fraction part 3999s - does not affect G format 3999s 3999s Kernel.printf formatting io is not specified precision string formats 3999s - determines the maximum number of characters to be copied from the string 3999s 3999s Kernel.printf formatting io is not specified reference by name %s style 3999s - uses value passed in a hash argument 3999s - supports flags, width, precision and type 3999s - allows to place name in any position 3999s - cannot be mixed with unnamed style 3999s 3999s Kernel.printf formatting io is not specified reference by name %{name} style 3999s - uses value passed in a hash argument 3999s - does not support type style 3999s - supports flags, width and precision 3999s - cannot be mixed with unnamed style 3999s - raises KeyError when there is no matching key 3999s - converts value to String with to_s 3999s 3999s Kernel.printf formatting io is not specified faulty key 3999s - raises a KeyError 3999s - sets the Hash as the receiver of KeyError 3999s - sets the unmatched key as the key of KeyError 3999s 3999s Kernel#private_methods 3999s - returns a list of the names of privately accessible methods in the object 3999s - returns a list of the names of privately accessible methods in the object and its ancestors and mixed-in modules 3999s - returns private methods mixed in to the metaclass 3999s 3999s Kernel#private_methods when not passed an argument 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#private_methods when passed true 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#private_methods when passed false 3999s - returns a list of private methods in without its ancestors 3999s 3999s Kernel#private_methods when passed nil 3999s - returns a list of private methods in without its ancestors 3999s 3999s Kernel.proc 3999s - is a private method 3999s - creates a proc-style Proc if given a literal block 3999s - returned the passed Proc if given an existing Proc 3999s - returns a Proc object 3999s - raises an ArgumentError when no block is given 3999s - returns from the creation site of the proc, not just the proc itself 3999s 3999s Kernel#proc 3999s - raises an ArgumentError when passed no block 3999s 3999s Kernel#protected_methods 3999s - returns a list of the names of protected methods accessible in the object 3999s - returns a list of the names of protected methods accessible in the object and from its ancestors and mixed-in modules 3999s - returns methods mixed in to the metaclass 3999s 3999s Kernel#protected_methods when not passed an argument 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#protected_methods when passed true 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#protected_methods when passed false 3999s - returns a list of protected methods in without its ancestors 3999s 3999s Kernel#protected_methods when passed nil 3999s - returns a list of protected methods in without its ancestors 3999s 3999s Kernel#public_method 3999s - returns a method object for a valid method 3999s - returns a method object for a valid singleton method 3999s - returns a method object if respond_to_missing?(method) is true 3999s - the returned method object if respond_to_missing?(method) calls #method_missing with a Symbol name 3999s - raises a NameError for an invalid method name 3999s - raises a NameError for an invalid singleton method name 3999s - changes the method called for super on a target aliased method 3999s - raises a NameError when called on a private method 3999s - raises a NameError when called on a protected method 3999s - raises a NameError if we only repond_to_missing? method, true 3999s 3999s Kernel#public_methods 3999s - returns a list of the names of publicly accessible methods in the object 3999s - returns a list of names without protected accessible methods in the object 3999s - returns a list of the names of publicly accessible methods in the object and its ancestors and mixed-in modules 3999s - returns methods mixed in to the metaclass 3999s - returns public methods for immediates 3999s 3999s Kernel#public_methods when not passed an argument 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#public_methods when passed true 3999s - returns a unique list for an object extended by a module 3999s - returns a unique list for a class including a module 3999s - returns a unique list for a subclass of a class that includes a module 3999s 3999s Kernel#public_methods when passed false 3999s - returns a list of public methods in without its ancestors 3999s 3999s Kernel#public_methods when passed nil 3999s - returns a list of public methods in without its ancestors 3999s 3999s Kernel#public_send 3999s - invokes the named public method 3999s - invokes the named alias of a public method 3999s - raises a NoMethodError if the method is protected 3999s - raises a NoMethodError if the named method is private 3999s - raises a NoMethodError if the named method is an alias of a private method 3999s - raises a NoMethodError if the named method is an alias of a protected method 3999s - includes `public_send` in the backtrace when passed not enough arguments 3999s - includes `public_send` in the backtrace when passed a single incorrect argument 3999s - invokes the named method 3999s - accepts a String method name 3999s - invokes a class method if called on a class 3999s - raises a TypeError if the method name is not a string or symbol 3999s - raises a NameError if the corresponding method can't be found 3999s - raises a NameError if the corresponding singleton method can't be found 3999s - raises an ArgumentError if no arguments are given 3999s - raises an ArgumentError if called with more arguments than available parameters 3999s - raises an ArgumentError if called with fewer arguments than required parameters 3999s - succeeds if passed an arbitrary number of arguments as a splat parameter 3999s - succeeds when passing 1 or more arguments as a required and a splat parameter 3999s - succeeds when passing 0 arguments to a method with one parameter with a default 3999s - has a negative arity 3999s - invokes module methods with super correctly 3999s 3999s Kernel#public_send called from own public method 3999s - raises a NoMethodError if the method is protected 3999s - raises a NoMethodError if the method is private 3999s 3999s Kernel#putc 3999s - is a private instance method 3999s 3999s Kernel.putc 3999s - calls #to_int to convert an object to an Integer 3999s - raises IOError on a closed stream 3999s - raises a TypeError when passed nil 3999s - raises a TypeError when passed false 3999s - raises a TypeError when passed true 3999s 3999s Kernel.putc with an Integer argument 3999s - writes one character as a String 3999s - writes the low byte as a String 3999s 3999s Kernel.putc with a String argument 3999s - writes one character 3999s - writes the first character 3999s 3999s Kernel#putc 3999s - calls #to_int to convert an object to an Integer 3999s - raises IOError on a closed stream 3999s - raises a TypeError when passed nil 3999s - raises a TypeError when passed false 3999s - raises a TypeError when passed true 3999s 3999s Kernel#putc with an Integer argument 3999s - writes one character as a String 3999s - writes the low byte as a String 3999s 3999s Kernel#putc with a String argument 3999s - writes one character 3999s - writes the first character 3999s 3999s Kernel#puts 3999s - is a private method 3999s - delegates to $stdout.puts 3999s 3999s Kernel.puts 3999s - needs to be reviewed for spec completeness 3999s 3999s Kernel#raise 3999s - is a private method 3999s - re-raises the previously rescued exception if no exception is specified 3999s - accepts a cause keyword argument that sets the cause 3999s - accepts a cause keyword argument that overrides the last exception 3999s - raises an ArgumentError when only cause is given 3999s 3999s Kernel#raise 3999s - aborts execution 3999s - accepts an exception that implements to_hash 3999s - allows the message parameter to be a hash 3999s - allows extra keyword arguments for compatibility 3999s - does not allow message and extra keyword arguments 3999s - raises RuntimeError if no exception class is given 3999s - raises a given Exception instance 3999s - raises a RuntimeError if string given 3999s - passes no arguments to the constructor when given only an exception class 3999s - raises a TypeError when passed a non-Exception object 3999s - raises a TypeError when passed true 3999s - raises a TypeError when passed false 3999s - raises a TypeError when passed nil 3999s - re-raises a previously rescued exception without overwriting the backtrace 3999s - allows Exception, message, and backtrace parameters 3999s 3999s Kernel.raise 3999s - needs to be reviewed for spec completeness 3999s 3999s Kernel#rand 3999s - is a private method 3999s - returns a float if no argument is passed 3999s - returns an integer for an integer argument 3999s - returns an integer for a float argument greater than 1 3999s - returns a float for an argument between -1 and 1 3999s - ignores the sign of the argument 3999s - never returns a value greater or equal to 1.0 with no arguments 3999s - never returns a value greater or equal to any passed in max argument 3999s - calls to_int on its argument 3999s - returns a numeric for an range argument where max is < 1 3999s - returns nil when range is backwards 3999s - returns the range start/end when Float range is 0 3999s - returns the range start/end when Integer range is 0 3999s - supports custom object types 4003s - is random on boot 4003s 4003s Kernel#rand given an exclusive range 4003s - returns an Integer between the two Integers 4003s - returns a Float between the given Integer and Float 4003s - returns a Float between the given Float and Integer 4003s - returns a Float between the two given Floats 4003s 4003s Kernel#rand given an inclusive range 4003s - returns an Integer between the two Integers 4003s - returns a Float between the given Integer and Float 4003s - returns a Float between the given Float and Integer 4003s - returns a Float between the two given Floats 4003s 4003s Kernel#rand given an inclusive range between 0 and 1 4003s - returns an Integer between the two Integers 4003s - returns a Float if at least one side is Float 4003s 4003s Kernel#rand given an exclusive range between 0 and 1 4003s - returns zero as an Integer 4003s - returns a Float if at least one side is Float 4003s 4003s Kernel.rand 4003s - needs to be reviewed for spec completeness 4003s 4003s Kernel#readline 4003s - is a private method 4003s 4003s Kernel.readline 4003s - needs to be reviewed for spec completeness 4003s 4003s Kernel#readlines 4003s - is a private method 4003s 4003s Kernel.readlines 4003s - needs to be reviewed for spec completeness 4003s 4003s Kernel#remove_instance_variable 4003s - is a public method 4003s - raises a NameError if the instance variable is not defined 4003s - raises a NameError if the argument is not a valid instance variable name 4003s - raises a TypeError if passed an Object not defining #to_str 4003s 4003s Kernel#remove_instance_variable when passed a String 4003s - returns the instance variable's value 4003s - removes the instance variable 4003s 4003s Kernel#remove_instance_variable when passed a Symbol 4003s - returns the instance variable's value 4003s - removes the instance variable 4003s 4003s Kernel#remove_instance_variable when passed an Object 4003s - calls #to_str to convert the argument 4003s 4003s Kernel#require_relative with a relative path 4003s - loads a path relative to the current file 4003s - loads a file defining many methods 4003s - raises a LoadError if the file does not exist 4003s - raises a LoadError that includes the missing path 4003s - raises a LoadError if basepath does not exist 4003s - stores the missing path in a LoadError object 4003s - calls #to_str on non-String objects 4003s - raises a TypeError if argument does not respond to #to_str 4003s - raises a TypeError if passed an object that has #to_s but not #to_str 4003s - raises a TypeError if #to_str does not return a String 4003s - calls #to_path on non-String objects 4003s - calls #to_str on non-String objects returned by #to_path 4003s 4003s Kernel#require_relative with a relative path when file is a symlink 4003s - loads a path relative to current file 4003s 4003s Kernel#require_relative with a relative path in an #instance_eval with a 4003s - absolute file path loads a path relative to the absolute path 4003s - absolute file path loads a path relative to the root directory 4003s 4003s Kernel#require_relative with a relative path (file extensions) 4003s - loads a .rb extensioned file when passed a non-extensioned path 4003s - loads a .rb extensioned file when a C-extension file of the same name is loaded 4003s - does not load a C-extension file if a .rb extensioned file is already loaded 4003s - loads a .rb extensioned file when passed a non-.rb extensioned path 4003s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 4003s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 4003s 4003s Kernel#require_relative with a relative path ($LOADED_FEATURES) 4003s - stores an absolute path 4003s - does not store the path if the load fails 4003s - does not load an absolute path that is already stored 4003s - adds the suffix of the resolved filename 4003s - loads a path for a file already loaded with a relative path 4003s 4003s Kernel#require_relative with a relative path ($LOADED_FEATURES) with symlinks 4003s - stores the same path that __FILE__ returns in the required file 4003s 4003s Kernel#require_relative with an absolute path 4003s - loads a path relative to the current file 4003s - loads a file defining many methods 4003s - raises a LoadError if the file does not exist 4003s - raises a LoadError if basepath does not exist 4003s - stores the missing path in a LoadError object 4003s - calls #to_str on non-String objects 4003s - raises a TypeError if argument does not respond to #to_str 4003s - raises a TypeError if passed an object that has #to_s but not #to_str 4003s - raises a TypeError if #to_str does not return a String 4003s - calls #to_path on non-String objects 4003s - calls #to_str on non-String objects returned by #to_path 4003s 4003s Kernel#require_relative with an absolute path (file extensions) 4003s - loads a .rb extensioned file when passed a non-extensioned path 4003s - loads a .rb extensioned file when a C-extension file of the same name is loaded 4003s - does not load a C-extension file if a .rb extensioned file is already loaded 4003s - loads a .rb extensioned file when passed a non-.rb extensioned path 4003s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 4003s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 4003s 4003s Kernel#require_relative with an absolute path ($LOAD_FEATURES) 4003s - stores an absolute path 4003s - does not store the path if the load fails 4003s - does not load an absolute path that is already stored 4003s - adds the suffix of the resolved filename 4003s - loads a path for a file already loaded with a relative path 4003s 4003s Kernel#require 4003s - is a private method 4003s - stores the missing path in a LoadError object 4003s 4003s Kernel#require (path resolution) 4003s - loads an absolute path 4003s - loads a non-canonical absolute path 4003s - loads a file defining many methods 4003s - raises a LoadError if the file does not exist 4003s - calls #to_str on non-String objects 4003s - raises a TypeError if passed nil 4003s - raises a TypeError if passed an Integer 4003s - raises a TypeError if passed an Array 4003s - raises a TypeError if passed an object that does not provide #to_str 4003s - raises a TypeError if passed an object that has #to_s but not #to_str 4003s - raises a TypeError if #to_str does not return a String 4003s - calls #to_path on non-String objects 4003s - calls #to_path on a String 4003s - calls #to_str on non-String objects returned by #to_path 4003s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 4003s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 4003s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 4003s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 4003s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 4003s - resolves a filename against $LOAD_PATH entries 4003s - accepts an Object with #to_path in $LOAD_PATH 4003s - does not require file twice after $LOAD_PATH change 4003s - does not resolve a ./ relative path against $LOAD_PATH entries 4003s - does not resolve a ../ relative path against $LOAD_PATH entries 4003s - resolves a non-canonical path against $LOAD_PATH entries 4004s - loads a path with duplicate path separators 4004s 4004s Kernel#require (path resolution) with an unreadable file 4004s - raises a LoadError 4004s 4004s Kernel#require (path resolution) 4004s - loads .rb file when passed absolute path without extension 4004s - does not try an extra .rb if the path already ends in .rb 4004s - does not load a bare filename unless the current working directory is in $LOAD_PATH 4004s - does not load a relative path unless the current working directory is in $LOAD_PATH 4004s - loads a file that recursively requires itself 4004s - loads a file concurrently 4004s 4004s Kernel#require (non-extensioned path) 4004s - loads a .rb extensioned file when a C-extension file exists on an earlier load path 4004s - does not load a feature twice when $LOAD_PATH has been modified 4004s 4004s Kernel#require (file extensions) 4004s - loads a .rb extensioned file when passed a non-extensioned path 4004s - loads a .rb extensioned file when a C-extension file of the same name is loaded 4004s - does not load a C-extension file if a .rb extensioned file is already loaded 4004s - loads a .rb extensioned file when passed a non-.rb extensioned path 4004s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 4004s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 4004s 4004s Kernel#require ($LOADED_FEATURES) 4004s - stores an absolute path 4004s - does not store the path if the load fails 4004s - does not load an absolute path that is already stored 4004s - does not load a ./ relative path that is already stored 4004s - does not load a ../ relative path that is already stored 4004s - does not load a non-canonical path that is already stored 4004s - respects being replaced with a new array 4004s - does not load twice the same file with and without extension 4004s - stores ../ relative paths as absolute paths 4004s - stores ./ relative paths as absolute paths 4004s - collapses duplicate path separators 4004s - expands absolute paths containing .. 4004s - adds the suffix of the resolved filename 4004s - does not load a non-canonical path for a file already loaded 4004s - does not load a ./ relative path for a file already loaded 4004s - does not load a ../ relative path for a file already loaded 4004s - does not load a file earlier on the $LOAD_PATH when other similar features were already loaded 4004s 4004s Kernel#require ($LOADED_FEATURES) with symlinks 4004s - stores the same path that __FILE__ returns in the required file 4004s - requires only once when a new matching file added to path 4004s 4004s Kernel#require ($LOADED_FEATURES) when a non-extensioned file is in $LOADED_FEATURES 4004s - loads a .rb extensioned file when a non extensioned file is in $LOADED_FEATURES 4004s - loads a .rb extensioned file from a subdirectory 4004s - returns false if the file is not found 4004s - returns false when passed a path and the file is not found 4004s 4004s Kernel#require (shell expansion) 4004s - performs tilde expansion on a .rb file before storing paths in $LOADED_FEATURES 4004s - performs tilde expansion on a non-extensioned file before storing paths in $LOADED_FEATURES 4004s 4004s Kernel#require (concurrently) 4004s - blocks a second thread from returning while the 1st is still requiring 4004s - blocks based on the path 4004s - allows a 2nd require if the 1st raised an exception 4004s - blocks a 3rd require if the 1st raises an exception and the 2nd is still running 4004s 4004s Kernel.require 4004s - stores the missing path in a LoadError object 4004s 4004s Kernel.require (path resolution) 4004s - loads an absolute path 4004s - loads a non-canonical absolute path 4004s - loads a file defining many methods 4004s - raises a LoadError if the file does not exist 4004s - calls #to_str on non-String objects 4004s - raises a TypeError if passed nil 4004s - raises a TypeError if passed an Integer 4004s - raises a TypeError if passed an Array 4004s - raises a TypeError if passed an object that does not provide #to_str 4004s - raises a TypeError if passed an object that has #to_s but not #to_str 4004s - raises a TypeError if #to_str does not return a String 4004s - calls #to_path on non-String objects 4004s - calls #to_path on a String 4004s - calls #to_str on non-String objects returned by #to_path 4004s - loads a ./ relative path from the current working directory with empty $LOAD_PATH 4004s - loads a ../ relative path from the current working directory with empty $LOAD_PATH 4004s - loads a ./ relative path from the current working directory with non-empty $LOAD_PATH 4004s - loads a ../ relative path from the current working directory with non-empty $LOAD_PATH 4004s - loads a non-canonical path from the current working directory with non-empty $LOAD_PATH 4004s - resolves a filename against $LOAD_PATH entries 4004s - accepts an Object with #to_path in $LOAD_PATH 4004s - does not require file twice after $LOAD_PATH change 4004s - does not resolve a ./ relative path against $LOAD_PATH entries 4004s - does not resolve a ../ relative path against $LOAD_PATH entries 4004s - resolves a non-canonical path against $LOAD_PATH entries 4004s - loads a path with duplicate path separators 4004s 4004s Kernel.require (path resolution) with an unreadable file 4004s - raises a LoadError 4004s 4004s Kernel.require (path resolution) 4004s - loads .rb file when passed absolute path without extension 4004s - does not try an extra .rb if the path already ends in .rb 4004s - does not load a bare filename unless the current working directory is in $LOAD_PATH 4004s - does not load a relative path unless the current working directory is in $LOAD_PATH 4004s - loads a file that recursively requires itself 4004s - loads a file concurrently 4004s 4004s Kernel.require (non-extensioned path) 4004s - loads a .rb extensioned file when a C-extension file exists on an earlier load path 4004s - does not load a feature twice when $LOAD_PATH has been modified 4004s 4004s Kernel.require (file extensions) 4004s - loads a .rb extensioned file when passed a non-extensioned path 4004s - loads a .rb extensioned file when a C-extension file of the same name is loaded 4004s - does not load a C-extension file if a .rb extensioned file is already loaded 4004s - loads a .rb extensioned file when passed a non-.rb extensioned path 4004s - loads a .rb extensioned file when a complex-extensioned C-extension file of the same name is loaded 4004s - does not load a C-extension file if a complex-extensioned .rb file is already loaded 4004s 4004s Kernel.require ($LOADED_FEATURES) 4004s - stores an absolute path 4004s - does not store the path if the load fails 4004s - does not load an absolute path that is already stored 4004s - does not load a ./ relative path that is already stored 4004s - does not load a ../ relative path that is already stored 4004s - does not load a non-canonical path that is already stored 4004s - respects being replaced with a new array 4004s - does not load twice the same file with and without extension 4004s - stores ../ relative paths as absolute paths 4004s - stores ./ relative paths as absolute paths 4004s - collapses duplicate path separators 4004s - expands absolute paths containing .. 4004s - adds the suffix of the resolved filename 4004s - does not load a non-canonical path for a file already loaded 4004s - does not load a ./ relative path for a file already loaded 4004s - does not load a ../ relative path for a file already loaded 4004s - does not load a file earlier on the $LOAD_PATH when other similar features were already loaded 4004s 4004s Kernel.require ($LOADED_FEATURES) with symlinks 4004s - stores the same path that __FILE__ returns in the required file 4004s - requires only once when a new matching file added to path 4004s 4004s Kernel.require ($LOADED_FEATURES) when a non-extensioned file is in $LOADED_FEATURES 4004s - loads a .rb extensioned file when a non extensioned file is in $LOADED_FEATURES 4004s - loads a .rb extensioned file from a subdirectory 4004s - returns false if the file is not found 4004s - returns false when passed a path and the file is not found 4004s 4004s Kernel.require (shell expansion) 4004s - performs tilde expansion on a .rb file before storing paths in $LOADED_FEATURES 4004s - performs tilde expansion on a non-extensioned file before storing paths in $LOADED_FEATURES 4004s 4004s Kernel.require (concurrently) 4004s - blocks a second thread from returning while the 1st is still requiring 4004s - blocks based on the path 4004s - allows a 2nd require if the 1st raised an exception 4004s - blocks a 3rd require if the 1st raises an exception and the 2nd is still running 4004s 4004s Kernel#respond_to_missing? 4004s - is a private method 4004s - is only an instance method 4004s - is not called when #respond_to? would return true 4004s - is called with a 2nd argument of false when #respond_to? is 4004s - is called a 2nd argument of false when #respond_to? is called with only 1 argument 4004s - is called with true as the second argument when #respond_to? is 4004s - is called when #respond_to? would return false 4004s - causes #respond_to? to return true if called and not returning false 4004s - causes #respond_to? to return false if called and returning false 4004s - causes #respond_to? to return false if called and returning nil 4004s - isn't called when obj responds to the given public method 4004s - isn't called when obj responds to the given public method, include_private = true 4004s - is called when obj responds to the given protected method, include_private = false 4004s - isn't called when obj responds to the given protected method, include_private = true 4004s - is called when obj responds to the given private method, include_private = false 4004s - isn't called when obj responds to the given private method, include_private = true 4004s - is called for missing class methods 4004s 4004s Kernel#respond_to? 4004s - is a public method 4004s - is only an instance method 4004s - returns false if the given method was undefined 4004s - returns true if obj responds to the given public method 4004s - throws a type error if argument can't be coerced into a Symbol 4004s - returns false if obj responds to the given protected method 4004s - returns false if obj responds to the given private method 4004s - returns true if obj responds to the given protected method (include_private = true) 4004s - returns false if obj responds to the given protected method (include_private = false) 4004s - returns false even if obj responds to the given private method (include_private = false) 4004s - returns true if obj responds to the given private method (include_private = true) 4004s - does not change method visibility when finding private method 4004s - indicates if an object responds to a particular message 4004s 4004s Kernel#select 4004s - is a private method 4004s 4004s Kernel.select 4004s - does not block when timeout is 0 4004s 4004s Kernel#send 4004s - invokes the named public method 4004s - invokes the named alias of a public method 4004s - invokes the named protected method 4004s - invokes the named private method 4004s - invokes the named alias of a private method 4004s - invokes the named alias of a protected method 4004s - invokes the named method 4004s - accepts a String method name 4004s - invokes a class method if called on a class 4004s - raises a TypeError if the method name is not a string or symbol 4004s - raises a NameError if the corresponding method can't be found 4004s - raises a NameError if the corresponding singleton method can't be found 4004s - raises an ArgumentError if no arguments are given 4004s - raises an ArgumentError if called with more arguments than available parameters 4004s - raises an ArgumentError if called with fewer arguments than required parameters 4004s - succeeds if passed an arbitrary number of arguments as a splat parameter 4004s - succeeds when passing 1 or more arguments as a required and a splat parameter 4004s - succeeds when passing 0 arguments to a method with one parameter with a default 4004s - has a negative arity 4004s - invokes module methods with super correctly 4004s 4004s Kernel#set_trace_func 4004s - is a private method 4004s 4004s Kernel.set_trace_func 4004s - needs to be reviewed for spec completeness 4004s 4004s Kernel#singleton_class 4004s - returns class extended from an object 4004s - returns NilClass for nil 4004s - returns TrueClass for true 4004s - returns FalseClass for false 4004s - raises TypeError for Integer 4004s - raises TypeError for Float 4004s - raises TypeError for Symbol 4004s - returns a frozen singleton class if object is frozen 4004s 4004s Kernel#singleton_method 4004s - find a method defined on the singleton class 4004s - returns a Method which can be called 4004s - only looks at singleton methods and not at methods in the class 4004s - raises a NameError if there is no such method 4004s 4004s Kernel#singleton_methods when not passed an argument 4004s - returns an empty Array for an object with no singleton methods 4004s - returns the names of module methods for a module 4004s - does not return private module methods for a module 4004s - returns the names of class methods for a class 4004s - does not return private class methods for a class 4004s - returns the names of singleton methods for an object 4004s - returns the names of singleton methods for an object extended with a module 4004s - returns a unique list for an object extended with a module 4004s - returns the names of singleton methods for an object extended with two modules 4004s - returns the names of singleton methods for an object extended with a module including a module 4004s - returns the names of inherited singleton methods for a subclass 4004s - returns a unique list for a subclass 4004s - returns the names of inherited singleton methods for a subclass including a module 4004s - returns a unique list for a subclass including a module 4004s - returns the names of inherited singleton methods for a subclass of a class including a module 4004s - returns the names of inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 4004s - returns the names of inherited singleton methods for a class extended with a module 4004s - does not return any included methods for a module including a module 4004s - does not return any included methods for a class including a module 4004s - for a module does not return methods in a module prepended to Module itself 4004s - does not return private singleton methods for an object extended with a module 4004s - does not return private singleton methods for an object extended with two modules 4004s - does not return private singleton methods for an object extended with a module including a module 4004s - does not return private singleton methods for a class extended with a module 4004s - does not return private inherited singleton methods for a module including a module 4004s - does not return private inherited singleton methods for a class including a module 4004s - does not return private inherited singleton methods for a subclass 4004s - does not return private inherited singleton methods for a subclass including a module 4004s - does not return private inherited singleton methods for a subclass of a class including a module 4004s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 4004s 4004s Kernel#singleton_methods when passed true 4004s - returns an empty Array for an object with no singleton methods 4004s - returns the names of module methods for a module 4004s - does not return private module methods for a module 4004s - returns the names of class methods for a class 4004s - does not return private class methods for a class 4004s - returns the names of singleton methods for an object 4004s - returns the names of singleton methods for an object extended with a module 4004s - returns a unique list for an object extended with a module 4004s - returns the names of singleton methods for an object extended with two modules 4004s - returns the names of singleton methods for an object extended with a module including a module 4004s - returns the names of inherited singleton methods for a subclass 4004s - returns a unique list for a subclass 4004s - returns the names of inherited singleton methods for a subclass including a module 4004s - returns a unique list for a subclass including a module 4004s - returns the names of inherited singleton methods for a subclass of a class including a module 4004s - returns the names of inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 4004s - returns the names of inherited singleton methods for a class extended with a module 4004s - does not return any included methods for a module including a module 4004s - does not return any included methods for a class including a module 4004s - for a module does not return methods in a module prepended to Module itself 4004s - does not return private singleton methods for an object extended with a module 4004s - does not return private singleton methods for an object extended with two modules 4004s - does not return private singleton methods for an object extended with a module including a module 4004s - does not return private singleton methods for a class extended with a module 4004s - does not return private inherited singleton methods for a module including a module 4004s - does not return private inherited singleton methods for a class including a module 4004s - does not return private inherited singleton methods for a subclass 4004s - does not return private inherited singleton methods for a subclass including a module 4004s - does not return private inherited singleton methods for a subclass of a class including a module 4004s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 4004s 4004s Kernel#singleton_methods when passed false 4004s - returns an empty Array for an object with no singleton methods 4004s - returns the names of module methods for a module 4004s - does not return private module methods for a module 4004s - returns the names of class methods for a class 4004s - does not return private class methods for a class 4004s - returns the names of singleton methods for an object 4004s - does not return any included methods for a module including a module 4004s - does not return any included methods for a class including a module 4004s - for a module does not return methods in a module prepended to Module itself 4004s - does not return private singleton methods for an object extended with a module 4004s - does not return private singleton methods for an object extended with two modules 4004s - does not return private singleton methods for an object extended with a module including a module 4004s - does not return private singleton methods for a class extended with a module 4004s - does not return private inherited singleton methods for a module including a module 4004s - does not return private inherited singleton methods for a class including a module 4004s - does not return private inherited singleton methods for a subclass 4004s - does not return private inherited singleton methods for a subclass including a module 4004s - does not return private inherited singleton methods for a subclass of a class including a module 4004s - does not return private inherited singleton methods for a subclass of a class that includes a module, where the subclass also includes a module 4004s - returns an empty Array for an object extended with a module 4004s - returns an empty Array for an object extended with two modules 4004s - returns an empty Array for an object extended with a module including a module 4004s - returns the names of singleton methods of the subclass 4004s - does not return names of inherited singleton methods for a subclass 4004s - does not return the names of inherited singleton methods for a class extended with a module 4004s 4004s Kernel#sleep 4004s - is a private method 4004s - returns an Integer 4004s - accepts a Float 4004s - accepts an Integer 4004s - accepts a Rational 4004s - accepts any Object that reponds to divmod 4004s - raises an ArgumentError when passed a negative duration 4004s - raises a TypeError when passed a String 4004s - pauses execution indefinitely if not given a duration 4004s - raises a TypeError when passed nil 4004s 4004s Kernel.sleep 4004s - needs to be reviewed for spec completeness 4004s 4004s Kernel#spawn 4004s - is a private method 4004s - executes the given command 4004s 4004s Kernel.spawn 4004s - executes the given command 4004s 4004s Kernel#sprintf 4004s - does not raise error when passed more arguments than needed 4004s - can produce a string with valid encoding 4004s - can produce a string with invalid encoding 4004s - returns a String in the same encoding as the format String if compatible 4004s - returns a String in the argument's encoding if format encoding is more restrictive 4004s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 4004s - calls #to_str to convert the format object to a String 4004s 4004s Kernel#sprintf integer formats 4004s - converts argument into Integer with to_int 4004s - converts argument into Integer with to_i if to_int isn't available 4004s - converts String argument with Kernel#Integer 4004s - raises TypeError exception if cannot convert to Integer 4004s 4004s Kernel#sprintf integer formats b 4004s - converts argument as a binary number 4004s - displays negative number as a two's complement prefixed with '..1' 4004s - collapse negative number representation if it equals 1 4004s 4004s Kernel#sprintf integer formats B 4004s - converts argument as a binary number 4004s - displays negative number as a two's complement prefixed with '..1' 4004s - collapse negative number representation if it equals 1 4004s 4004s Kernel#sprintf integer formats d 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel#sprintf integer formats i 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel#sprintf integer formats u 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel#sprintf integer formats o 4004s - converts argument as an octal number 4004s - displays negative number as a two's complement prefixed with '..7' 4004s - collapse negative number representation if it equals 7 4004s 4004s Kernel#sprintf integer formats x 4004s - converts argument as a hexadecimal number 4004s - displays negative number as a two's complement prefixed with '..f' 4004s - collapse negative number representation if it equals f 4004s 4004s Kernel#sprintf integer formats X 4004s - converts argument as a hexadecimal number with uppercase letters 4004s - displays negative number as a two's complement prefixed with '..f' 4004s - collapse negative number representation if it equals F 4004s 4004s Kernel#sprintf float formats 4004s - converts argument into Float 4004s - raises TypeError exception if cannot convert to Float 4004s 4004s Kernel#sprintf float formats e 4004s - converts argument into exponential notation [-]d.dddddde[+-]dd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats E 4004s - converts argument into exponential notation [-]d.dddddde[+-]dd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats f 4004s - converts floating point argument as [-]ddd.dddddd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats g 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats g the exponent is less than -4 4004s - converts a floating point number using exponential form 4004s 4004s Kernel#sprintf float formats g the exponent is greater than or equal to the precision (6 by default) 4004s - converts a floating point number using exponential form 4004s 4004s Kernel#sprintf float formats g otherwise 4004s - converts a floating point number in dd.dddd form 4004s - cuts excessive digits in fractional part and keeps only 4 ones 4004s - rounds the last significant digit to the closest one in fractional part 4004s - cuts fraction part to have only 6 digits at all 4004s 4004s Kernel#sprintf float formats G 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats G the exponent is less than -4 4004s - converts a floating point number using exponential form 4004s 4004s Kernel#sprintf float formats G the exponent is greater than or equal to the precision (6 by default) 4004s - converts a floating point number using exponential form 4004s 4004s Kernel#sprintf float formats G otherwise 4004s - converts a floating point number in dd.dddd form 4004s - cuts excessive digits in fractional part and keeps only 4 ones 4004s - rounds the last significant digit to the closest one in fractional part 4004s - cuts fraction part to have only 6 digits at all 4004s 4004s Kernel#sprintf float formats a 4004s - converts floating point argument as [-]0xh.hhhhp[+-]dd 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf float formats A 4004s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel#sprintf other formats c 4004s - displays character if argument is a numeric code of character 4004s - displays character if argument is a single character string 4004s - raises ArgumentError if argument is a string of several characters 4004s - raises ArgumentError if argument is an empty string 4004s - raises TypeError if argument is not String or Integer and cannot be converted to them 4004s - raises TypeError if argument is nil 4004s - tries to convert argument to String with to_str 4004s - tries to convert argument to Integer with to_int 4004s - raises TypeError if converting to String with to_str returns non-String 4004s - raises TypeError if converting to Integer with to_int returns non-Integer 4004s 4004s Kernel#sprintf other formats p 4004s - displays argument.inspect value 4004s 4004s Kernel#sprintf other formats s 4004s - substitute argument passes as a string 4004s - substitutes '' for nil 4004s - converts argument to string with to_s 4004s - does not try to convert with to_str 4004s - formats a partial substring without including omitted characters 4004s - formats string with precision 4004s - formats string with width 4004s - formats string with width and precision 4004s - formats nil with width 4004s - formats nil with precision 4004s - formats nil with width and precision 4004s - formats multibyte string with precision 4004s - preserves encoding of the format string 4004s 4004s Kernel#sprintf other formats % 4004s - alone raises an ArgumentError 4004s - is escaped by % 4004s 4004s Kernel#sprintf flags space applies to numeric formats bBdiouxXeEfgGaA 4004s - leaves a space at the start of non-negative numbers 4004s - does not leave a space at the start of negative numbers 4004s - prevents converting negative argument to two's complement form 4004s - treats several white spaces as one 4004s 4004s Kernel#sprintf flags (digit)$ 4004s - specifies the absolute argument number for this field 4004s - raises exception if argument number is bigger than actual arguments list 4004s - ignores '-' sign 4004s - raises ArgumentError exception when absolute and relative argument numbers are mixed 4004s 4004s Kernel#sprintf flags # applies to format o 4004s - increases the precision until the first digit will be `0' if it is not formatted as complements 4004s - does nothing for negative argument 4004s 4004s Kernel#sprintf flags # applies to formats bBxX 4004s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 4004s - does nothing for zero argument 4004s 4004s Kernel#sprintf flags # applies to formats aAeEfgG 4004s - forces a decimal point to be added, even if no digits follow 4004s - changes format from dd.dddd to exponential form for gG 4004s 4004s Kernel#sprintf flags # applies to gG 4004s - does not remove trailing zeros 4004s 4004s Kernel#sprintf flags + applies to numeric formats bBdiouxXaAeEfgG 4004s - adds a leading plus sign to non-negative numbers 4004s - does not use two's complement form for negative numbers for formats bBoxX 4004s 4004s Kernel#sprintf flags - 4004s - left-justifies the result of conversion if width is specified 4004s 4004s Kernel#sprintf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 4004s - pads with zeros, not spaces 4004s - uses radix-1 when displays negative argument as a two's complement 4004s 4004s Kernel#sprintf flags * 4004s - uses the previous argument as the field width 4004s - left-justifies the result if width is negative 4004s - uses the specified argument as the width if * is followed by a number and $ 4004s - left-justifies the result if specified with $ argument is negative 4004s - raises ArgumentError when is mixed with width 4004s 4004s Kernel#sprintf width 4004s - specifies the minimum number of characters that will be written to the result 4004s - is ignored if argument's actual length is greater 4004s 4004s Kernel#sprintf precision integer types 4004s - controls the number of decimal places displayed 4004s 4004s Kernel#sprintf precision float types 4004s - controls the number of decimal places displayed in fraction part 4004s - does not affect G format 4004s 4004s Kernel#sprintf precision string formats 4004s - determines the maximum number of characters to be copied from the string 4004s 4004s Kernel#sprintf reference by name %s style 4004s - uses value passed in a hash argument 4004s - supports flags, width, precision and type 4004s - allows to place name in any position 4004s - cannot be mixed with unnamed style 4004s 4004s Kernel#sprintf reference by name %{name} style 4004s - uses value passed in a hash argument 4004s - does not support type style 4004s - supports flags, width and precision 4004s - cannot be mixed with unnamed style 4004s - raises KeyError when there is no matching key 4004s - converts value to String with to_s 4004s 4004s Kernel#sprintf faulty key 4004s - raises a KeyError 4004s - sets the Hash as the receiver of KeyError 4004s - sets the unmatched key as the key of KeyError 4004s 4004s Kernel#sprintf %c 4004s - supports Unicode characters 4004s - raises error when a codepoint isn't representable in an encoding of a format string 4004s - uses the encoding of the format string to interpret codepoints 4004s 4004s Kernel.sprintf 4004s - does not raise error when passed more arguments than needed 4004s - can produce a string with valid encoding 4004s - can produce a string with invalid encoding 4004s - returns a String in the same encoding as the format String if compatible 4004s - returns a String in the argument's encoding if format encoding is more restrictive 4004s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 4004s - calls #to_str to convert the format object to a String 4004s 4004s Kernel.sprintf integer formats 4004s - converts argument into Integer with to_int 4004s - converts argument into Integer with to_i if to_int isn't available 4004s - converts String argument with Kernel#Integer 4004s - raises TypeError exception if cannot convert to Integer 4004s 4004s Kernel.sprintf integer formats b 4004s - converts argument as a binary number 4004s - displays negative number as a two's complement prefixed with '..1' 4004s - collapse negative number representation if it equals 1 4004s 4004s Kernel.sprintf integer formats B 4004s - converts argument as a binary number 4004s - displays negative number as a two's complement prefixed with '..1' 4004s - collapse negative number representation if it equals 1 4004s 4004s Kernel.sprintf integer formats d 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel.sprintf integer formats i 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel.sprintf integer formats u 4004s - converts argument as a decimal number 4004s - works well with large numbers 4004s 4004s Kernel.sprintf integer formats o 4004s - converts argument as an octal number 4004s - displays negative number as a two's complement prefixed with '..7' 4004s - collapse negative number representation if it equals 7 4004s 4004s Kernel.sprintf integer formats x 4004s - converts argument as a hexadecimal number 4004s - displays negative number as a two's complement prefixed with '..f' 4004s - collapse negative number representation if it equals f 4004s 4004s Kernel.sprintf integer formats X 4004s - converts argument as a hexadecimal number with uppercase letters 4004s - displays negative number as a two's complement prefixed with '..f' 4004s - collapse negative number representation if it equals F 4004s 4004s Kernel.sprintf float formats 4004s - converts argument into Float 4004s - raises TypeError exception if cannot convert to Float 4004s 4004s Kernel.sprintf float formats e 4004s - converts argument into exponential notation [-]d.dddddde[+-]dd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats E 4004s - converts argument into exponential notation [-]d.dddddde[+-]dd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats f 4004s - converts floating point argument as [-]ddd.dddddd 4004s - cuts excessive digits and keeps only 6 ones 4004s - rounds the last significant digit to the closest one 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats g 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats g the exponent is less than -4 4004s - converts a floating point number using exponential form 4004s 4004s Kernel.sprintf float formats g the exponent is greater than or equal to the precision (6 by default) 4004s - converts a floating point number using exponential form 4004s 4004s Kernel.sprintf float formats g otherwise 4004s - converts a floating point number in dd.dddd form 4004s - cuts excessive digits in fractional part and keeps only 4 ones 4004s - rounds the last significant digit to the closest one in fractional part 4004s - cuts fraction part to have only 6 digits at all 4004s 4004s Kernel.sprintf float formats G 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats G the exponent is less than -4 4004s - converts a floating point number using exponential form 4004s 4004s Kernel.sprintf float formats G the exponent is greater than or equal to the precision (6 by default) 4004s - converts a floating point number using exponential form 4004s 4004s Kernel.sprintf float formats G otherwise 4004s - converts a floating point number in dd.dddd form 4004s - cuts excessive digits in fractional part and keeps only 4 ones 4004s - rounds the last significant digit to the closest one in fractional part 4004s - cuts fraction part to have only 6 digits at all 4004s 4004s Kernel.sprintf float formats a 4004s - converts floating point argument as [-]0xh.hhhhp[+-]dd 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf float formats A 4004s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 4004s - displays Float::INFINITY as Inf 4004s - displays Float::NAN as NaN 4004s 4004s Kernel.sprintf other formats c 4004s - displays character if argument is a numeric code of character 4004s - displays character if argument is a single character string 4004s - raises ArgumentError if argument is a string of several characters 4004s - raises ArgumentError if argument is an empty string 4004s - raises TypeError if argument is not String or Integer and cannot be converted to them 4004s - raises TypeError if argument is nil 4004s - tries to convert argument to String with to_str 4004s - tries to convert argument to Integer with to_int 4004s - raises TypeError if converting to String with to_str returns non-String 4004s - raises TypeError if converting to Integer with to_int returns non-Integer 4004s 4004s Kernel.sprintf other formats p 4004s - displays argument.inspect value 4004s 4004s Kernel.sprintf other formats s 4004s - substitute argument passes as a string 4004s - substitutes '' for nil 4004s - converts argument to string with to_s 4004s - does not try to convert with to_str 4004s - formats a partial substring without including omitted characters 4004s - formats string with precision 4004s - formats string with width 4004s - formats string with width and precision 4004s - formats nil with width 4004s - formats nil with precision 4004s - formats nil with width and precision 4004s - formats multibyte string with precision 4004s - preserves encoding of the format string 4004s 4004s Kernel.sprintf other formats % 4004s - alone raises an ArgumentError 4004s - is escaped by % 4004s 4004s Kernel.sprintf flags space applies to numeric formats bBdiouxXeEfgGaA 4004s - leaves a space at the start of non-negative numbers 4004s - does not leave a space at the start of negative numbers 4004s - prevents converting negative argument to two's complement form 4004s - treats several white spaces as one 4004s 4004s Kernel.sprintf flags (digit)$ 4004s - specifies the absolute argument number for this field 4004s - raises exception if argument number is bigger than actual arguments list 4004s - ignores '-' sign 4004s - raises ArgumentError exception when absolute and relative argument numbers are mixed 4004s 4004s Kernel.sprintf flags # applies to format o 4004s - increases the precision until the first digit will be `0' if it is not formatted as complements 4004s - does nothing for negative argument 4004s 4004s Kernel.sprintf flags # applies to formats bBxX 4004s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 4004s - does nothing for zero argument 4004s 4004s Kernel.sprintf flags # applies to formats aAeEfgG 4004s - forces a decimal point to be added, even if no digits follow 4004s - changes format from dd.dddd to exponential form for gG 4004s 4004s Kernel.sprintf flags # applies to gG 4004s - does not remove trailing zeros 4004s 4004s Kernel.sprintf flags + applies to numeric formats bBdiouxXaAeEfgG 4004s - adds a leading plus sign to non-negative numbers 4004s - does not use two's complement form for negative numbers for formats bBoxX 4004s 4004s Kernel.sprintf flags - 4004s - left-justifies the result of conversion if width is specified 4004s 4004s Kernel.sprintf flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 4004s - pads with zeros, not spaces 4004s - uses radix-1 when displays negative argument as a two's complement 4004s 4004s Kernel.sprintf flags * 4004s - uses the previous argument as the field width 4004s - left-justifies the result if width is negative 4004s - uses the specified argument as the width if * is followed by a number and $ 4004s - left-justifies the result if specified with $ argument is negative 4004s - raises ArgumentError when is mixed with width 4004s 4004s Kernel.sprintf width 4004s - specifies the minimum number of characters that will be written to the result 4004s - is ignored if argument's actual length is greater 4004s 4004s Kernel.sprintf precision integer types 4004s - controls the number of decimal places displayed 4004s 4004s Kernel.sprintf precision float types 4004s - controls the number of decimal places displayed in fraction part 4004s - does not affect G format 4004s 4004s Kernel.sprintf precision string formats 4004s - determines the maximum number of characters to be copied from the string 4004s 4004s Kernel.sprintf reference by name %s style 4004s - uses value passed in a hash argument 4004s - supports flags, width, precision and type 4004s - allows to place name in any position 4004s - cannot be mixed with unnamed style 4004s 4004s Kernel.sprintf reference by name %{name} style 4004s - uses value passed in a hash argument 4004s - does not support type style 4004s - supports flags, width and precision 4004s - cannot be mixed with unnamed style 4004s - raises KeyError when there is no matching key 4004s - converts value to String with to_s 4004s 4004s Kernel.sprintf faulty key 4004s - raises a KeyError 4004s - sets the Hash as the receiver of KeyError 4004s - sets the unmatched key as the key of KeyError 4004s 4004s Kernel.sprintf %c 4004s - supports Unicode characters 4004s - raises error when a codepoint isn't representable in an encoding of a format string 4004s - uses the encoding of the format string to interpret codepoints 4004s 4004s Kernel#srand 4004s - is a private method 4004s - returns the previous seed value 4006s - returns the system-initialized seed value on the first call 4006s - seeds the RNG correctly and repeatably 4006s - defaults number to a random value 4006s - accepts and uses a seed of 0 4006s - accepts a negative seed 4006s - accepts an Integer as a seed 4006s - calls #to_int on seed 4006s - raises a TypeError when passed nil 4006s - raises a TypeError when passed a String 4006s 4006s Kernel.srand 4006s - needs to be reviewed for spec completeness 4006s 4006s Kernel#syscall 4006s - is a private method 4006s 4006s Kernel.syscall 4006s - needs to be reviewed for spec completeness 4006s 4006s Kernel#system 4006s - is a private method 4006s - executes the specified command in a subprocess 4009s - returns true when the command exits with a zero exit status 4011s - returns false when the command exits with a non-zero exit status 4014s - raises RuntimeError when `exception: true` is given and the command exits with a non-zero exit status 4014s - raises Errno::ENOENT when `exception: true` is given and the specified command does not exist 4014s - returns nil when command execution fails 4014s - does not write to stderr when command execution fails 4014s - executes with `sh` if the command contains shell characters 4014s - ignores SHELL env var and always uses `sh` 4014s - expands shell variables when given a single string argument 4014s - does not expand shell variables when given multiples arguments 4014s 4014s Kernel.system 4014s - executes the specified command in a subprocess 4017s - returns true when the command exits with a zero exit status 4020s - returns false when the command exits with a non-zero exit status 4023s - raises RuntimeError when `exception: true` is given and the command exits with a non-zero exit status 4023s - raises Errno::ENOENT when `exception: true` is given and the specified command does not exist 4023s - returns nil when command execution fails 4023s - does not write to stderr when command execution fails 4023s - executes with `sh` if the command contains shell characters 4023s - ignores SHELL env var and always uses `sh` 4023s - expands shell variables when given a single string argument 4023s - does not expand shell variables when given multiples arguments 4023s 4023s Kernel#taint 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#tainted? 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#tap 4023s - always yields self and returns self 4023s - raises a LocalJumpError when no block given 4023s 4023s Kernel#test 4023s - is a private method 4023s - returns true when passed ?f if the argument is a regular file 4023s - returns true when passed ?e if the argument is a file 4023s - returns true when passed ?d if the argument is a directory 4023s - returns true when passed ?l if the argument is a symlink 4023s - returns true when passed ?r if the argument is readable by the effective uid 4023s - returns true when passed ?R if the argument is readable by the real uid 4023s - calls #to_path on second argument when passed ?f and a filename 4023s - calls #to_path on second argument when passed ?e and a filename 4023s - calls #to_path on second argument when passed ?d and a directory 4023s 4023s Kernel#test writable test 4023s - returns true when passed ?w if the argument is readable by the effective uid 4023s - returns true when passed ?W if the argument is readable by the real uid 4023s 4023s Kernel.test 4023s - needs to be reviewed for spec completeness 4023s 4023s Kernel#then 4023s - yields self 4023s - returns the block return value 4023s - returns a sized Enumerator when no block given 4023s 4023s Kernel.throw 4023s - transfers control to the end of the active catch block waiting for symbol 4023s - transfers control to the innermost catch block waiting for the same symbol 4023s - sets the return value of the catch block to nil by default 4023s - sets the return value of the catch block to a value specified as second parameter 4023s - raises an ArgumentError if there is no catch block for the symbol 4023s - raises an UncaughtThrowError if there is no catch block for the symbol 4023s - raises ArgumentError if 3 or more arguments provided 4023s - can throw an object 4023s 4023s Kernel#throw 4023s - is a private method 4023s 4023s Kernel#to_enum 4023s - needs to be reviewed for spec completeness 4023s 4023s Kernel#to_s 4023s - returns a String containing the name of self's class 4023s 4023s Kernel#trace_var 4023s - is a private method 4023s - hooks assignments to a global variable 4023s - accepts a proc argument instead of a block 4023s - raises ArgumentError if no block or proc is provided 4023s 4023s Kernel#trap 4023s - is a private method 4023s 4023s Kernel#trust 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#untaint 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#untrace_var 4023s - is a private method 4023s 4023s Kernel.untrace_var 4023s - needs to be reviewed for spec completeness 4023s 4023s Kernel#untrust 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#untrusted? 4023s - is a no-op 4023s - warns in verbose mode 4023s 4023s Kernel#warn 4023s - is a private method 4023s - accepts multiple arguments 4023s - does not append line-end if last character is line-end 4023s - calls #write on $stderr if $VERBOSE is true 4023s - calls #write on $stderr if $VERBOSE is false 4023s - does not call #write on $stderr if $VERBOSE is nil 4023s - writes each argument on a line when passed multiple arguments 4023s - writes each array element on a line when passes an array 4023s - does not write strings when passed no arguments 4023s - writes the default record separator and NOT $/ to $stderr after the warning message 4023s - writes to_s representation if passed a non-string 4023s - treats empty hash as no keyword argument 4023s - calls Warning.warn without keyword arguments if Warning.warn does not accept keyword arguments 4023s - calls Warning.warn with category: nil if Warning.warn accepts keyword arguments 4023s - calls Warning.warn with given category keyword converted to a symbol 4024s - does not call Warning.warn if self is the Warning module 4026s - avoids recursion if Warning#warn is redefined and calls super 4026s 4026s Kernel#warn :uplevel keyword argument 4026s - prepends a message with specified line from the backtrace 4028s - shows the caller of #require and not #require itself without RubyGems 4031s - shows the caller of #require and not #require itself with RubyGems loaded 4033s - skips 31 bits as a Bignum 4033s - dumps a negative Fixnum > 31 bits as a Bignum 4033s 4033s Marshal.dump with a Symbol 4033s - dumps a Symbol 4033s - dumps a big Symbol 4033s - dumps an encoded Symbol 4033s 4033s Marshal.dump with an object responding to #marshal_dump 4033s - dumps the object returned by #marshal_dump 4033s - does not use Class#name 4033s 4033s Marshal.dump with an object responding to #_dump 4033s - dumps the String returned by #_dump 4033s - ignores overridden name method 4033s - raises a TypeError if _dump returns a non-string 4033s - favors marshal_dump over _dump 4033s - indexes instance variables of a String returned by #_dump at first and then indexes the object itself 4033s 4033s Marshal.dump with a Class 4033s - dumps a builtin Class 4033s - dumps a user Class 4033s - dumps a nested Class 4033s - ignores overridden name method 4033s - raises TypeError with an anonymous Class 4033s - raises TypeError with a singleton Class 4033s 4033s Marshal.dump with a Module 4033s - dumps a builtin Module 4033s - ignores overridden name method 4033s - raises TypeError with an anonymous Module 4033s 4033s Marshal.dump with a Float 4033s - dumps a Float 4033s 4033s Marshal.dump with a Bignum 4033s - dumps a Bignum 4033s - dumps a Bignum 4033s - increases the object links counter 4033s 4033s Marshal.dump with a Rational 4033s - dumps a Rational 4033s 4033s Marshal.dump with a Complex 4033s - dumps a Complex 4033s 4033s Marshal.dump with a String 4033s - dumps a blank String 4033s - dumps a short String 4033s - dumps a long String 4033s - dumps a String extended with a Module 4033s - dumps a String subclass 4033s - dumps a String subclass extended with a Module 4033s - ignores overridden name method when dumps a String subclass 4033s - dumps a String with instance variables 4033s - dumps a US-ASCII String 4033s - dumps a UTF-8 String 4033s - dumps a String in another encoding 4033s - dumps multiple strings using symlinks for the :E (encoding) symbol 4033s 4033s Marshal.dump with a Regexp 4033s - dumps a Regexp 4033s - dumps a Regexp with flags 4033s - dumps a Regexp with instance variables 4033s - dumps an extended Regexp 4033s - dumps a Regexp subclass 4033s - dumps a binary Regexp 4033s - dumps an ascii-compatible Regexp 4033s - dumps a UTF-8 Regexp 4033s - dumps a Regexp in another encoding 4033s - ignores overridden name method when dumps a Regexp subclass 4033s 4033s Marshal.dump with an Array 4033s - dumps an empty Array 4033s - dumps a non-empty Array 4033s - dumps an Array subclass 4033s - dumps a recursive Array 4033s - dumps an Array with instance variables 4033s - dumps an extended Array 4033s - ignores overridden name method when dumps an Array subclass 4033s 4033s Marshal.dump with a Hash 4033s - dumps a Hash 4033s - dumps a non-empty Hash 4033s - dumps a Hash subclass 4033s - dumps a Hash with a default value 4033s - raises a TypeError with hash having default proc 4033s - dumps a Hash with instance variables 4033s - dumps an extended Hash 4033s - dumps an Hash subclass with a parameter to initialize 4033s - ignores overridden name method when dumps a Hash subclass 4033s 4033s Marshal.dump with a Struct 4033s - dumps a Struct 4033s - dumps a Struct 4033s - dumps a Struct with instance variables 4033s - dumps an extended Struct 4033s - ignores overridden name method 4033s - raises TypeError with an anonymous Struct 4033s 4033s Marshal.dump with an Object 4033s - dumps an Object 4033s - dumps an extended Object 4033s - dumps an Object with an instance variable 4033s - dumps an Object that has had an instance variable added and removed as though it was never set 4033s - dumps an Object if it has a singleton class but no singleton methods and no singleton instance variables 4033s - ignores overridden name method 4033s - raises TypeError if an Object has a singleton class and singleton methods 4033s - raises TypeError if an Object has a singleton class and singleton instance variables 4033s - raises TypeError if an Object is an instance of an anonymous class 4033s - dumps a BasicObject subclass if it defines respond_to? 4033s - dumps without marshaling any attached finalizer 4033s 4033s Marshal.dump with a Range 4033s - dumps a Range inclusive of end (with indeterminant order) 4033s - dumps a Range exclusive of end (with indeterminant order) 4033s - raises TypeError with an anonymous Range subclass 4033s 4033s Marshal.dump with a Time 4033s - ignores overridden name method 4033s 4033s Marshal.dump with an Exception 4033s - dumps an empty Exception 4033s - dumps the message for the exception 4033s - contains the filename in the backtrace 4033s - dumps the message for the raised NoMethodError exception 4033s - raises TypeError if an Object is an instance of an anonymous class 4033s 4033s Marshal.dump when passed an IO 4033s - writes the serialized data to the IO-Object 4033s - returns the IO-Object 4033s - raises an Error when the IO-Object does not respond to #write 4033s - calls binmode when it's defined 4033s 4033s Marshal.dump when passed a StringIO 4033s - should raise an error 4033s 4033s Marshal.dump with Float 4033s - represents NaN 4033s - represents +Infinity 4033s - represents -Infinity 4033s - represents zero 4033s - represents a Float less than 1 4033s - represents a Float greater than 1 4033s - represents a Float much greater than 1 4033s - represents a Float much greater than 1 with a very small fractional part 4033s 4033s Marshal.load with Float 4033s - loads NaN 4033s - loads +Infinity 4033s - loads -Infinity 4033s - loads zero 4033s - loads a Float less than 1 4033s - loads a Float much less than 1 4033s - loads a Float greater than 1 4033s - loads a Float much greater than 1 4033s - loads a Float much greater than 1 with a very small fractional part 4033s 4033s Marshal.load 4033s - raises an ArgumentError when the dumped data is truncated 4033s - raises an ArgumentError when the argument is empty String 4033s - raises an ArgumentError when the dumped class is missing 4033s - loads an array containing objects having _dump method, and with proc 4033s - loads an array containing objects having marshal_dump method, and with proc 4033s - assigns classes to nested subclasses of Array correctly 4033s - loads subclasses of Array with overridden << and push correctly 4033s - raises a TypeError with bad Marshal version 4033s - raises EOFError on loading an empty file 4033s - loads a nil 4033s - loads a 1..2 4033s - loads a 1...2 4033s - loads a 'a'..'b' 4033s - loads a Struct 4033s - loads a Symbol 4033s - loads a true 4033s - loads a false 4033s - loads a String empty 4033s - loads a String small 4033s - loads a String big 4033s - loads a String extended 4033s - loads a String subclass 4033s - loads a String subclass extended 4033s - loads a Symbol small 4033s - loads a Symbol big 4033s - loads a Integer -2**64 4033s - loads a Integer -2**63 4033s - loads a Integer -2**24 4033s - loads a Integer -4516727 4033s - loads a Integer -2**16 4033s - loads a Integer -2**8 4033s - loads a Integer -123 4033s - loads a Integer -124 4033s - loads a Integer 0 4033s - loads a Integer 5 4033s - loads a Integer 122 4033s - loads a Integer 123 4033s - loads a Integer 2**8 4033s - loads a Integer 2**16 4033s - loads a Integer 2**24 4033s - loads a Integer 2**64 4033s - loads a Integer 2**90 4033s - loads a Class String 4033s - loads a Module Marshal 4033s - loads a Module nested 4033s - loads a _dump object 4033s - loads a _dump object extended 4033s - loads a marshal_dump object 4033s - loads a Regexp 4033s - loads a Regexp subclass /i 4033s - loads a Float 0.0 4033s - loads a Float -0.0 4033s - loads a Float Infinity 4033s - loads a Float -Infinity 4033s - loads a Float 1.0 4033s - loads a Float 8323434.342 4033s - loads a Float 1.0799999999999912 4033s - loads a Hash 4033s - loads a Hash subclass 4033s - loads a Array 4033s - loads a Array subclass 4033s - loads a Struct Pyramid 4033s - loads a nil 4033s - loads a 1..2 4033s - loads a 1...2 4033s - loads a 'a'..'b' 4033s - loads a Struct 4033s - loads a Symbol 4033s - loads a true 4033s - loads a false 4033s - loads a String empty 4033s - loads a String small 4033s - loads a String big 4033s - loads a String extended 4033s - loads a String subclass 4033s - loads a String subclass extended 4033s - loads a Symbol small 4033s - loads a Symbol big 4033s - loads a Integer -2**64 4033s - loads a Integer -2**63 4033s - loads a Integer -2**24 4033s - loads a Integer -2**16 4033s - loads a Integer -2**8 4033s - loads a Integer -123 4033s - loads a Integer 0 4033s - loads a Integer 5 4033s - loads a Integer 2**8 4033s - loads a Integer 2**16 4033s - loads a Integer 2**24 4033s - loads a Integer 2**64 4033s - loads a Integer 2**90 4033s - loads a Class String 4033s - loads a Module Marshal 4033s - loads a Module nested 4033s - loads a _dump object 4033s - loads a _dump object extended 4033s - loads a marshal_dump object 4033s - loads a Regexp 4033s - loads a Regexp subclass /i 4033s - loads a Float 0.0 4033s - loads a Float -0.0 4033s - loads a Float Infinity 4033s - loads a Float -Infinity 4033s - loads a Float 1.0 4033s - loads a Hash 4033s - loads a Hash subclass 4033s - loads a Array 4033s - loads a Array subclass 4033s - loads a Struct Pyramid 4033s - loads a Random 4033s - raises an ArgumentError with full constant name when the dumped constant is missing 4033s 4033s Marshal.load when called with freeze: true 4033s - returns frozen strings 4033s - returns frozen arrays 4033s - returns frozen hashes 4033s - returns frozen regexps 4033s - returns frozen structs 4033s - returns frozen objects 4033s - does not freeze modules 4033s - does not freeze classes 4033s - does not call freeze method 4033s - returns frozen object even if object does not respond to freeze method 4033s - returns a frozen object when is an instance of String/Array/Regexp/Hash subclass and has instance variables 4033s 4033s Marshal.load when called with freeze: true deep freezing 4033s - returns hashes with frozen keys and values 4033s - returns arrays with frozen elements 4033s - returns structs with frozen members 4033s - returns objects with frozen instance variables 4033s - deduplicates frozen strings 4033s 4033s Marshal.load when called with freeze: true when called with a proc 4033s - call the proc with frozen objects 4033s - does not freeze the object returned by the proc 4033s 4033s Marshal.load when called with a proc 4033s - call the proc with fully initialized strings 4033s - no longer mutate the object after it was passed to the proc 4033s - returns the value of the proc 4033s - calls the proc for recursively visited data 4033s - loads an Array with proc 4033s 4033s Marshal.load when called with nil for the proc argument 4033s - behaves as if no proc argument was passed 4033s 4033s Marshal.load when called on objects with custom _dump methods 4033s - does not set instance variables of an object with user-defined _dump/_load 4033s - loads the String in non US-ASCII and non UTF-8 encoding 4033s 4033s Marshal.load when called on objects with custom _dump methods that returns an immediate value 4033s - loads an array containing an instance of the object, followed by multiple instances of another object 4033s - loads any structure with multiple references to the same object, followed by multiple instances of another object 4033s - loads an array containing references to multiple instances of the object, followed by multiple instances of another object 4033s 4033s Marshal.load for an Array 4033s - loads an array containing the same objects 4033s - loads an array having ivar 4033s - loads an extended Array object containing a user-marshaled object 4033s 4033s Marshal.load for a Hash 4033s - loads an extended_user_hash with a parameter to initialize 4033s - loads an extended hash object containing a user-marshaled object 4033s - preserves hash ivars when hash contains a string having ivar 4033s - allocates an instance of the proper class when Hash subclass with compare_by_identity behaviour 4033s 4033s Marshal.load for a Symbol 4033s - loads a Symbol 4033s - loads a big Symbol 4033s - loads an encoded Symbol 4033s - loads multiple Symbols sharing the same encoding 4033s - raises ArgumentError when end of byte sequence reached before symbol characters end 4033s 4033s Marshal.load for a String 4033s - loads a string having ivar with ref to self 4033s - loads a string through StringIO stream 4033s - sets binmode if it is loading through StringIO stream 4033s - loads a string with an ivar 4033s - loads a String subclass with custom constructor 4033s - loads a US-ASCII String 4033s - loads a UTF-8 String 4033s - loads a String in another encoding 4033s - loads a String as BINARY if no encoding is specified at the end 4033s - raises ArgumentError when end of byte sequence reached before string characters end 4033s 4033s Marshal.load for a Struct 4033s - loads a extended_struct having fields with same objects 4033s - loads a struct having ivar 4033s - loads a struct having fields 4033s - does not call initialize on the unmarshaled struct 4033s 4033s Marshal.load for an Exception 4033s - loads a marshalled exception with no message 4033s - loads a marshalled exception with a message 4033s - loads a marshalled exception with a backtrace 4033s - loads an marshalled exception with ivars 4033s 4033s Marshal.load for an Object 4033s - loads an object 4033s - loads an extended Object 4033s - loads an object having ivar 4033s - loads an Object with a non-US-ASCII instance variable 4033s - raises ArgumentError when end of byte sequence reached before class name end 4033s 4033s Marshal.load for an object responding to #marshal_dump and #marshal_load 4033s - loads a user-marshaled object 4033s 4033s Marshal.load for a user object 4033s - loads a user-marshaled extended object 4033s - loads a UserObject 4033s 4033s Marshal.load for a user object that extends a core type other than Object or BasicObject 4033s - raises ArgumentError if the resulting class does not extend the same type 4033s 4033s Marshal.load for a Regexp 4033s - loads an extended Regexp 4033s - loads a Regexp subclass instance variables when it is extended with a module 4033s - restore the regexp instance variables 4033s - preserves Regexp encoding 4033s - raises ArgumentError when end of byte sequence reached before source string end 4033s 4033s Marshal.load for a Float 4033s - loads a Float NaN 4033s - loads a Float 1.3 4033s - loads a Float -5.1867345e-22 4033s - loads a Float 1.1867345e+22 4033s - raises ArgumentError when end of byte sequence reached before float string representation end 4033s 4033s Marshal.load for an Integer 4033s - loads 0 4033s - loads an Integer 8 4033s - loads and Integer -8 4033s - loads an Integer 1234 4033s - loads an Integer -1234 4033s - loads an Integer 4611686018427387903 4033s - loads an Integer -4611686018427387903 4033s - loads an Integer 2361183241434822606847 4033s - loads an Integer -2361183241434822606847 4033s - raises ArgumentError if the input is too short 4033s - roundtrips 4611686018427387903 from dump/load correctly 4033s 4033s Marshal.load for a Bignum that is Bignum on 32-bit platforms but Fixnum on 64-bit 4033s - dumps a Fixnum 4033s - dumps an array containing multiple references to the Bignum as an array of Fixnum 4033s 4033s Marshal.load for a Time 4033s - loads 4033s - loads serialized instance variables 4033s - loads Time objects stored as links 4033s - keeps the local zone 4033s - keeps UTC zone 4033s - keeps the zone 4033s - keeps utc offset 4033s - keeps nanoseconds 4033s - does not add any additional instance variable 4033s 4033s Marshal.load for nil 4033s - loads 4033s 4033s Marshal.load for true 4033s - loads 4033s 4033s Marshal.load for false 4033s - loads 4033s 4033s Marshal.load for a Class 4033s - loads 4033s - raises ArgumentError if given the name of a non-Module 4033s - raises ArgumentError if given a nonexistent class 4033s - raises ArgumentError when end of byte sequence reached before class name end 4033s 4033s Marshal.load for a Module 4033s - loads a module 4033s - raises ArgumentError if given the name of a non-Class 4033s - loads an old module 4033s - raises ArgumentError when end of byte sequence reached before module name end 4033s 4033s Marshal.load for a wrapped C pointer 4033s - loads 4033s - raises TypeError when the local class is missing _load_data 4033s 4033s Marshal.load when a class does not exist in the namespace 4033s - raises an ArgumentError 4033s 4033s Marshal::MAJOR_VERSION 4033s - is 4 4033s 4033s Marshal::MINOR_VERSION 4033s - is 8 4033s 4033s Marshal.restore 4033s - raises an ArgumentError when the dumped data is truncated 4033s - raises an ArgumentError when the argument is empty String 4033s - raises an ArgumentError when the dumped class is missing 4033s - loads an array containing objects having _dump method, and with proc 4033s - loads an array containing objects having marshal_dump method, and with proc 4033s - assigns classes to nested subclasses of Array correctly 4033s - loads subclasses of Array with overridden << and push correctly 4033s - raises a TypeError with bad Marshal version 4033s - raises EOFError on loading an empty file 4033s - loads a nil 4033s - loads a 1..2 4033s - loads a 1...2 4033s - loads a 'a'..'b' 4033s - loads a Struct 4033s - loads a Symbol 4033s - loads a true 4033s - loads a false 4033s - loads a String empty 4033s - loads a String small 4033s - loads a String big 4033s - loads a String extended 4033s - loads a String subclass 4033s - loads a String subclass extended 4033s - loads a Symbol small 4033s - loads a Symbol big 4033s - loads a Integer -2**64 4033s - loads a Integer -2**63 4033s - loads a Integer -2**24 4033s - loads a Integer -4516727 4033s - loads a Integer -2**16 4033s - loads a Integer -2**8 4033s - loads a Integer -123 4033s - loads a Integer -124 4033s - loads a Integer 0 4033s - loads a Integer 5 4033s - loads a Integer 122 4033s - loads a Integer 123 4033s - loads a Integer 2**8 4033s - loads a Integer 2**16 4033s - loads a Integer 2**24 4033s - loads a Integer 2**64 4033s - loads a Integer 2**90 4033s - loads a Class String 4033s - loads a Module Marshal 4033s - loads a Module nested 4033s - loads a _dump object 4033s - loads a _dump object extended 4033s - loads a marshal_dump object 4033s - loads a Regexp 4033s - loads a Regexp subclass /i 4033s - loads a Float 0.0 4033s - loads a Float -0.0 4033s - loads a Float Infinity 4033s - loads a Float -Infinity 4033s - loads a Float 1.0 4033s - loads a Float 8323434.342 4033s - loads a Float 1.0799999999999912 4033s - loads a Hash 4033s - loads a Hash subclass 4033s - loads a Array 4033s - loads a Array subclass 4033s - loads a Struct Pyramid 4033s - loads a nil 4033s - loads a 1..2 4033s - loads a 1...2 4033s - loads a 'a'..'b' 4033s - loads a Struct 4033s - loads a Symbol 4033s - loads a true 4033s - loads a false 4033s - loads a String empty 4033s - loads a String small 4033s - loads a String big 4033s - loads a String extended 4033s - loads a String subclass 4033s - loads a String subclass extended 4033s - loads a Symbol small 4033s - loads a Symbol big 4033s - loads a Integer -2**64 4033s - loads a Integer -2**63 4033s - loads a Integer -2**24 4033s - loads a Integer -2**16 4033s - loads a Integer -2**8 4033s - loads a Integer -123 4033s - loads a Integer 0 4033s - loads a Integer 5 4033s - loads a Integer 2**8 4033s - loads a Integer 2**16 4033s - loads a Integer 2**24 4033s - loads a Integer 2**64 4033s - loads a Integer 2**90 4033s - loads a Class String 4033s - loads a Module Marshal 4033s - loads a Module nested 4033s - loads a _dump object 4033s - loads a _dump object extended 4033s - loads a marshal_dump object 4033s - loads a Regexp 4033s - loads a Regexp subclass /i 4033s - loads a Float 0.0 4033s - loads a Float -0.0 4033s - loads a Float Infinity 4033s - loads a Float -Infinity 4033s - loads a Float 1.0 4033s - loads a Hash 4033s - loads a Hash subclass 4033s - loads a Array 4033s - loads a Array subclass 4033s - loads a Struct Pyramid 4033s - loads a Random 4033s - raises an ArgumentError with full constant name when the dumped constant is missing 4033s 4033s Marshal.restore when called with freeze: true 4033s - returns frozen strings 4033s - returns frozen arrays 4033s - returns frozen hashes 4033s - returns frozen regexps 4033s - returns frozen structs 4033s - returns frozen objects 4033s - does not freeze modules 4033s - does not freeze classes 4033s - does not call freeze method 4033s - returns frozen object even if object does not respond to freeze method 4033s - returns a frozen object when is an instance of String/Array/Regexp/Hash subclass and has instance variables 4033s 4033s Marshal.restore when called with freeze: true deep freezing 4033s - returns hashes with frozen keys and values 4033s - returns arrays with frozen elements 4033s - returns structs with frozen members 4033s - returns objects with frozen instance variables 4033s - deduplicates frozen strings 4033s 4033s Marshal.restore when called with freeze: true when called with a proc 4033s - call the proc with frozen objects 4033s - does not freeze the object returned by the proc 4033s 4033s Marshal.restore when called with a proc 4033s - call the proc with fully initialized strings 4033s - no longer mutate the object after it was passed to the proc 4033s - returns the value of the proc 4033s - calls the proc for recursively visited data 4033s - loads an Array with proc 4033s 4033s Marshal.restore when called with nil for the proc argument 4033s - behaves as if no proc argument was passed 4033s 4033s Marshal.restore when called on objects with custom _dump methods 4033s - does not set instance variables of an object with user-defined _dump/_load 4033s - loads the String in non US-ASCII and non UTF-8 encoding 4033s 4033s Marshal.restore when called on objects with custom _dump methods that returns an immediate value 4033s - loads an array containing an instance of the object, followed by multiple instances of another object 4033s - loads any structure with multiple references to the same object, followed by multiple instances of another object 4033s - loads an array containing references to multiple instances of the object, followed by multiple instances of another object 4033s 4033s Marshal.restore for an Array 4033s - loads an array containing the same objects 4033s - loads an array having ivar 4033s - loads an extended Array object containing a user-marshaled object 4033s 4033s Marshal.restore for a Hash 4033s - loads an extended_user_hash with a parameter to initialize 4033s - loads an extended hash object containing a user-marshaled object 4033s - preserves hash ivars when hash contains a string having ivar 4033s - allocates an instance of the proper class when Hash subclass with compare_by_identity behaviour 4033s 4033s Marshal.restore for a Symbol 4033s - loads a Symbol 4033s - loads a big Symbol 4033s - loads an encoded Symbol 4033s - loads multiple Symbols sharing the same encoding 4033s - raises ArgumentError when end of byte sequence reached before symbol characters end 4033s 4033s Marshal.restore for a String 4033s - loads a string having ivar with ref to self 4033s - loads a string through StringIO stream 4033s - sets binmode if it is loading through StringIO stream 4033s - loads a string with an ivar 4033s - loads a String subclass with custom constructor 4033s - loads a US-ASCII String 4033s - loads a UTF-8 String 4033s - loads a String in another encoding 4033s - loads a String as BINARY if no encoding is specified at the end 4033s - raises ArgumentError when end of byte sequence reached before string characters end 4033s 4033s Marshal.restore for a Struct 4033s - loads a extended_struct having fields with same objects 4033s - loads a struct having ivar 4033s - loads a struct having fields 4033s - does not call initialize on the unmarshaled struct 4033s 4033s Marshal.restore for an Exception 4033s - loads a marshalled exception with no message 4033s - loads a marshalled exception with a message 4033s - loads a marshalled exception with a backtrace 4033s - loads an marshalled exception with ivars 4033s 4033s Marshal.restore for an Object 4033s - loads an object 4033s - loads an extended Object 4033s - loads an object having ivar 4033s - loads an Object with a non-US-ASCII instance variable 4033s - raises ArgumentError when end of byte sequence reached before class name end 4033s 4033s Marshal.restore for an object responding to #marshal_dump and #marshal_load 4033s - loads a user-marshaled object 4033s 4033s Marshal.restore for a user object 4033s - loads a user-marshaled extended object 4033s - loads a UserObject 4033s 4033s Marshal.restore for a user object that extends a core type other than Object or BasicObject 4033s - raises ArgumentError if the resulting class does not extend the same type 4033s 4033s Marshal.restore for a Regexp 4033s - loads an extended Regexp 4033s - loads a Regexp subclass instance variables when it is extended with a module 4033s - restore the regexp instance variables 4033s - preserves Regexp encoding 4033s - raises ArgumentError when end of byte sequence reached before source string end 4033s 4033s Marshal.restore for a Float 4033s - loads a Float NaN 4033s - loads a Float 1.3 4033s - loads a Float -5.1867345e-22 4033s - loads a Float 1.1867345e+22 4033s - raises ArgumentError when end of byte sequence reached before float string representation end 4033s 4033s Marshal.restore for an Integer 4033s - loads 0 4033s - loads an Integer 8 4033s - loads and Integer -8 4033s - loads an Integer 1234 4033s - loads an Integer -1234 4033s - loads an Integer 4611686018427387903 4033s - loads an Integer -4611686018427387903 4033s - loads an Integer 2361183241434822606847 4033s - loads an Integer -2361183241434822606847 4033s - raises ArgumentError if the input is too short 4033s - roundtrips 4611686018427387903 from dump/load correctly 4033s 4033s Marshal.restore for a Bignum that is Bignum on 32-bit platforms but Fixnum on 64-bit 4033s - dumps a Fixnum 4033s - dumps an array containing multiple references to the Bignum as an array of Fixnum 4033s 4033s Marshal.restore for a Time 4033s - loads 4033s - loads serialized instance variables 4033s - loads Time objects stored as links 4033s - keeps the local zone 4033s - keeps UTC zone 4033s - keeps the zone 4033s - keeps utc offset 4033s - keeps nanoseconds 4033s - does not add any additional instance variable 4033s 4033s Marshal.restore for nil 4033s - loads 4033s 4033s Marshal.restore for true 4033s - loads 4033s 4033s Marshal.restore for false 4033s - loads 4033s 4033s Marshal.restore for a Class 4033s - loads 4033s - raises ArgumentError if given the name of a non-Module 4033s - raises ArgumentError if given a nonexistent class 4033s - raises ArgumentError when end of byte sequence reached before class name end 4033s 4033s Marshal.restore for a Module 4033s - loads a module 4033s - raises ArgumentError if given the name of a non-Class 4033s - loads an old module 4033s - raises ArgumentError when end of byte sequence reached before module name end 4033s 4033s Marshal.restore for a wrapped C pointer 4033s - loads 4033s - raises TypeError when the local class is missing _load_data 4033s 4033s Marshal.restore when a class does not exist in the namespace 4033s - raises an ArgumentError 4033s 4033s MatchData.allocate 4033s - is undefined 4034s 4034s MatchData#begin when passed an integer argument 4034s - returns the character offset of the start of the nth element 4034s - returns nil when the nth match isn't found 4034s - returns the character offset for multi-byte strings 4034s - returns the character offset for multi-byte strings with unicode regexp 4034s - tries to convert the passed argument to an Integer using #to_int 4034s - raises IndexError if index is out of bounds 4034s 4034s MatchData#begin when passed a String argument 4034s - return the character offset of the start of the named capture 4034s - returns the character offset for multi byte strings 4034s - returns the character offset for multi byte strings with unicode regexp 4034s - returns the character offset for the farthest match when multiple named captures use the same name 4034s - returns the character offset for multi-byte names 4034s - raises IndexError if there is no group with the provided name 4034s 4034s MatchData#begin when passed a Symbol argument 4034s - return the character offset of the start of the named capture 4034s - returns the character offset for multi byte strings 4034s - returns the character offset for multi byte strings with unicode regexp 4034s - returns the character offset for the farthest match when multiple named captures use the same name 4034s - returns the character offset for multi-byte names 4034s - raises IndexError if there is no group with the provided name 4034s 4034s MatchData#captures 4034s - returns an array of the match captures 4034s - returns instances of String when given a String subclass 4034s 4034s MatchData#dup 4034s - duplicates the match data 4034s 4034s MatchData#[] 4034s - acts as normal array indexing [index] 4034s - supports accessors [start, length] 4034s - supports ranges [start..end] 4034s - supports endless ranges [start..] 4034s - supports beginningless ranges [..end] 4034s - supports beginningless endless ranges [nil..nil] 4034s - returns instances of String when given a String subclass 4034s 4034s MatchData#[Symbol] 4034s - returns the corresponding named match when given a Symbol 4034s - returns the corresponding named match when given a String 4034s - returns the matching version of multiple corresponding named match 4034s - returns the last match when multiple named matches exist with the same name 4034s - returns nil on non-matching named matches 4034s - raises an IndexError if there is no named match corresponding to the Symbol 4034s - raises an IndexError if there is no named match corresponding to the String 4034s - returns matches in the String's encoding 4034s 4034s MatchData#end when passed an integer argument 4034s - returns the character offset of the end of the nth element 4034s - returns nil when the nth match isn't found 4034s - returns the character offset for multi-byte strings 4034s - returns the character offset for multi-byte strings with unicode regexp 4034s - tries to convert the passed argument to an Integer using #to_int 4034s 4034s MatchData#end when passed a String argument 4034s - return the character offset of the start of the named capture 4034s - returns the character offset for multi byte strings 4034s - returns the character offset for multi byte strings with unicode regexp 4034s - returns the character offset for the farthest match when multiple named captures use the same name 4034s - returns the character offset for multi-byte names 4034s 4034s MatchData#end when passed a Symbol argument 4034s - return the character offset of the start of the named capture 4034s - returns the character offset for multi byte strings 4034s - returns the character offset for multi byte strings with unicode regexp 4034s - returns the character offset for the farthest match when multiple named captures use the same name 4034s - returns the character offset for multi-byte names 4034s 4034s MatchData#eql? 4034s - returns true if both operands have equal target strings, patterns, and match positions 4034s - returns false if the operands have different target strings 4034s - returns false if the operands have different patterns 4034s - returns false if the argument is not a MatchData object 4034s 4034s MatchData#== 4034s - returns true if both operands have equal target strings, patterns, and match positions 4034s - returns false if the operands have different target strings 4034s - returns false if the operands have different patterns 4034s - returns false if the argument is not a MatchData object 4034s 4034s MatchData#hash 4034s - needs to be reviewed for spec completeness 4034s 4034s MatchData#inspect 4034s - returns a String 4034s - returns a human readable representation that contains entire matched string and the captures 4034s - returns a human readable representation of named captures 4034s 4034s MatchData#length 4034s - length should return the number of elements in the match array 4034s 4034s MatchData#match_length 4034s - returns the length of the corresponding match when given an Integer 4034s - returns nil on non-matching index matches 4034s - returns the length of the corresponding named match when given a Symbol 4034s - returns nil on non-matching index matches 4034s 4034s MatchData#match 4034s - returns the corresponding match when given an Integer 4034s - returns nil on non-matching index matches 4034s - returns the corresponding named match when given a Symbol 4034s - returns nil on non-matching index matches 4034s 4034s MatchData#named_captures 4034s - returns a Hash that has captured name and the matched string pairs 4034s - prefers later captures 4034s - returns the latest matched capture, even if a later one that does not match exists 4034s 4034s MatchData#names 4034s - returns an Array 4034s - sets each element to a String 4034s - returns the names of the named capture groups 4034s - returns [] if there were no named captures 4034s - returns each name only once 4034s - equals Regexp#names 4034s 4034s MatchData#offset 4034s - returns a two element array with the begin and end of the nth match 4034s - returns [nil, nil] when the nth match isn't found 4034s - returns the offset for multi byte strings 4034s - returns the offset for multi byte strings with unicode regexp 4034s 4034s MatchData#post_match 4034s - returns the string after the match equiv. special var $' 4034s - sets the encoding to the encoding of the source String 4034s - sets an empty result to the encoding of the source String 4034s - returns an instance of String when given a String subclass 4034s 4034s MatchData#pre_match 4034s - returns the string before the match, equiv. special var $` 4034s - sets the encoding to the encoding of the source String 4034s - sets an empty result to the encoding of the source String 4034s - returns an instance of String when given a String subclass 4034s 4034s MatchData#regexp 4034s - returns a Regexp object 4034s - returns the pattern used in the match 4034s - returns the same Regexp used to match 4034s - returns a Regexp for the result of gsub(String) 4034s 4034s MatchData#size 4034s - length should return the number of elements in the match array 4034s 4034s MatchData#string 4034s - returns a copy of the match string 4034s - returns a frozen copy of the match string 4034s - returns the same frozen string for every call 4034s - returns a frozen copy of the matched string for gsub(String) 4034s 4034s MatchData#to_a 4034s - returns an array of matches 4034s - returns instances of String when given a String subclass 4034s 4034s MatchData#to_s 4034s - returns the entire matched string 4034s - returns an instance of String when given a String subclass 4034s 4034s MatchData#values_at 4034s - supports multiple integer Ranges 4034s - supports mixing integer Ranges and Integers 4034s - supports mixing of names and indices 4034s - returns a new empty Array if no arguments given 4034s - fails when passed arguments of unsupported types 4034s 4034s MatchData#values_at when passed a list of Integers 4034s - returns an array containing each value given by one of integers 4034s - returns nil value for any integer that is out of range 4034s 4034s MatchData#values_at when passed an integer Range 4034s - returns an array containing each value given by the elements of the range 4034s - fills with nil values for range elements larger than the captured values number 4034s - raises RangeError if any element of the range is negative and out of range 4034s - supports endless Range 4034s - supports beginningless Range 4034s - returns an empty Array when Range is empty 4034s 4034s MatchData#values_at when passed names 4034s - slices captures with the given names 4034s - slices captures with the given String names 4034s 4034s Math.acos 4034s - returns a float 4034s - returns the arccosine of the argument 4034s - raises an Math::DomainError if the argument is greater than 1.0 4034s - raises an Math::DomainError if the argument is less than -1.0 4034s - raises a TypeError if the string argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#acos 4034s - is accessible as a private instance method 4034s 4034s Math.acosh 4034s - returns a float 4034s - returns the principle value of the inverse hyperbolic cosine of the argument 4034s - raises Math::DomainError if the passed argument is less than -1.0 or greater than 1.0 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#acosh 4034s - is accessible as a private instance method 4034s 4034s Math.asin 4034s - returns a float 4034s - returns the arcsine of the argument 4034s - raises an Math::DomainError if the argument is greater than 1.0 4034s - raises an Math::DomainError if the argument is less than -1.0 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#asin 4034s - is accessible as a private instance method 4034s 4034s Math.asinh 4034s - returns a float 4034s - returns the inverse hyperbolic sin of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#asinh 4034s - is accessible as a private instance method 4034s 4034s Math.atan2 4034s - returns a float 4034s - returns the arc tangent of y, x 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s - returns positive zero when passed 0.0, 0.0 4034s - returns negative zero when passed -0.0, 0.0 4034s - returns Pi when passed 0.0, -0.0 4034s - returns -Pi when passed -0.0, -0.0 4034s 4034s Math#atan2 4034s - is accessible as a private instance method 4034s 4034s Math.atan 4034s - returns a float 4034s - returns the arctangent of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#atan 4034s - is accessible as a private instance method 4034s 4034s Math.atanh 4034s - returns a float 4034s - returns the inverse hyperbolic tangent of the argument 4034s - raises a TypeError if the argument is nil 4034s - raises a TypeError if the argument is not a Numeric 4034s - returns Infinity if x == 1.0 4034s - return -Infinity if x == -1.0 4034s - raises a Math::DomainError for arguments greater than 1.0 4034s - raises a Math::DomainError for arguments less than -1.0 4034s 4034s Math#atanh 4034s - is a private instance method 4034s - returns a float 4034s - returns the inverse hyperbolic tangent of the argument 4034s - raises a TypeError if the argument is nil 4034s - raises a TypeError if the argument is not a Numeric 4034s - returns Infinity if x == 1.0 4034s - return -Infinity if x == -1.0 4034s - raises a Math::DomainError for arguments greater than 1.0 4034s - raises a Math::DomainError for arguments less than -1.0 4034s 4034s Math.cbrt 4034s - returns a float 4034s - returns the cubic root of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math::PI 4034s - approximates the value of pi 4034s - is accessible to a class that includes Math 4034s 4034s Math::E 4034s - approximates the value of Napier's constant 4034s - is accessible to a class that includes Math 4034s 4034s Math.cos 4034s - returns a float 4034s - returns the cosine of the argument expressed in radians 4034s - raises a TypeError unless the argument is Numeric and has #to_f 4034s - returns NaN given NaN 4034s 4034s Math.cos coerces its argument with #to_f 4034s - coerces its argument with #to_f 4034s - raises a TypeError if the given argument can't be converted to a Float 4034s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a Float 4034s 4034s Math#cos 4034s - is accessible as a private instance method 4034s 4034s Math.cosh 4034s - returns a float 4034s - returns the hyperbolic cosine of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#cosh 4034s - is accessible as a private instance method 4034s 4034s Math.erf 4034s - returns a float 4034s - returns the error function of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#erf 4034s - is accessible as a private instance method 4034s 4034s Math.erfc 4034s - returns a float 4034s - returns the complementary error function of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#erfc 4034s - is accessible as a private instance method 4034s 4034s Math.exp 4034s - returns a float 4034s - returns the base-e exponential of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#exp 4034s - is accessible as a private instance method 4034s 4034s Math.frexp 4034s - returns the normalized fraction and exponent 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#frexp 4034s - is accessible as a private instance method 4034s 4034s Math.gamma 4034s - returns +infinity given 0 4034s - returns -infinity given -0.0 4034s - returns Math.sqrt(Math::PI) given 0.5 4034s - returns exactly (n-1)! given n for n between 2 and 23 4034s - returns approximately (n-1)! given n for n between 24 and 30 4034s - returns good numerical approximation for gamma(3.2) 4034s - returns good numerical approximation for gamma(-2.15) 4034s - returns good numerical approximation for gamma(0.00001) 4034s - returns good numerical approximation for gamma(-0.00001) 4034s - raises Math::DomainError given -1 4034s - returns +infinity given +infinity 4034s - raises Math::DomainError given negative infinity 4034s - returns NaN given NaN 4034s 4034s Math.hypot 4034s - returns a float 4034s - returns the length of the hypotenuse of a right triangle with legs given by the arguments 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#hypot 4034s - is accessible as a private instance method 4034s 4034s Math.ldexp 4034s - returns a float 4034s - returns the argument multiplied by 2**n 4034s - raises a TypeError if the first argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises RangeError if NaN is given as the second arg 4034s - raises a TypeError if the second argument cannot be coerced with Integer() 4034s - raises a TypeError if the first argument is nil 4034s - raises a TypeError if the second argument is nil 4034s - accepts any first argument that can be coerced with Float() 4034s - accepts any second argument that can be coerced with Integer() 4034s - returns correct value that closes to the max value of double type 4034s 4034s Math#ldexp 4034s - is accessible as a private instance method 4034s 4034s Math.lgamma 4034s - returns [Infinity, 1] when passed 0 4034s - returns [Infinity, 1] when passed -1 4034s - returns [Infinity, -1] when passed -0.0 4034s - returns [log(sqrt(PI)), 1] when passed 0.5 4034s - returns [log(2/3*PI, 1] when passed 6.0 4034s - returns an approximate value when passed -0.5 4034s - returns an approximate value when passed -1.5 4034s - raises Math::DomainError when passed -Infinity 4034s - returns [Infinity, 1] when passed Infinity 4034s - returns [NaN, 1] when passed NaN 4034s 4034s Math.log10 4034s - returns a float 4034s - returns the base-10 logarithm of the argument 4034s - raises an Math::DomainError if the argument is less than 0 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#log10 4034s - is accessible as a private instance method 4034s 4034s Math.log2 4034s - returns a float 4034s - returns the natural logarithm of the argument 4034s - raises Math::DomainError if the argument is less than 0 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - raises a TypeError if passed a numerical argument as a string 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math.log 4034s - returns a float 4034s - returns the natural logarithm of the argument 4034s - raises an Math::DomainError if the argument is less than 0 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - raises a TypeError for numerical values passed as string 4034s - accepts a second argument for the base 4034s - raises a TypeError when the numerical base cannot be coerced to a float 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#log 4034s - is accessible as a private instance method 4034s 4034s Math.sin 4034s - returns a float 4034s - returns the sine of the argument expressed in radians 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#sin 4034s - is accessible as a private instance method 4034s 4034s Math.sinh 4034s - returns a float 4034s - returns the hyperbolic sin of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#sinh 4034s - is accessible as a private instance method 4034s 4034s Math.sqrt 4034s - returns a float 4034s - returns the square root of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s - raises a Math::DomainError when given a negative number 4034s 4034s Math#sqrt 4034s - is accessible as a private instance method 4034s 4034s Math.tan 4034s - returns a float 4034s - returns the tangent of the argument 4034s - returns NaN if called with +-Infinity 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#tan 4034s - is accessible as a private instance method 4034s 4034s Math.tanh 4034s - returns a float 4034s - returns the hyperbolic tangent of the argument 4034s - raises a TypeError if the argument cannot be coerced with Float() 4034s - returns NaN given NaN 4034s - raises a TypeError if the argument is nil 4034s - accepts any argument that can be coerced with Float() 4034s 4034s Math#tanh 4034s - is accessible as a private instance method 4034s 4034s Method#arity returns zero 4034s - for method definition 'def m() end' 4034s - for method definition 'def n(&b) end' 4034s 4034s Method#arity returns positive values 4034s - for method definition 4034s def m(a) end 4034s def n(a, b) end 4034s def o(a, b, c) end 4034s def p(a, b, c, d) end 4034s - for method definition 4034s def m(a:) end 4034s def n(a:, b:) end 4034s def o(a: 1, b:, c:, d: 2) end 4034s - for method definition 4034s def m(a, b:) end 4034s def n(a, b:, &l) end 4034s - for method definition 4034s def m(a, b, c:, d: 1) end 4034s def n(a, b, c:, d: 1, **k, &l) end 4034s 4034s Method#arity returns negative values 4034s - for method definition 4034s def m(a=1) end 4034s def n(a=1, b=2) end 4034s - for method definition 4034s def m(a, b=1) end 4034s def n(a, b, c=1, d=2) end 4034s - for method definition 4034s def m(a=1, *b) end 4034s def n(a=1, b=2, *c) end 4034s - for method definition 4034s def m(*) end 4034s def n(*a) end 4034s - for method definition 4034s def m(a, *) end 4034s def n(a, *b) end 4034s def o(a, b, *c) end 4034s def p(a, b, c, *d) end 4034s - for method definition 4034s def m(*a, b) end 4034s def n(*a, b, c) end 4034s def o(*a, b, c, d) end 4034s - for method definition 4034s def m(a, *b, c) end 4034s def n(a, b, *c, d, e) end 4034s - for method definition 4034s def m(a, b=1, c=2, *d, e, f) end 4034s def n(a, b, c=1, *d, e, f, g) end 4034s - for method definition 4034s def m(a: 1) end 4034s def n(a: 1, b: 2) end 4034s - for method definition 4034s def m(a=1, b: 2) end 4034s def n(*a, b: 1) end 4034s def o(a=1, b: 2) end 4034s def p(a=1, *b, c: 2, &l) end 4034s - for method definition 4034s def m(**k, &l) end 4034s def n(*a, **k) end 4034s def o(a: 1, b: 2, **k) end 4034s - for method definition 'def m(a=1, *b, c:, d: 2, **k, &l) end' 4034s - for method definition 4034s def m(a, b=1, *c, d, e:, f: 2, **k, &l) end 4034s def n(a, b=1, *c, d:, e:, f: 2, **k, &l) end 4034s def o(a=0, b=1, *c, d, e:, f: 2, **k, &l) end 4034s def p(a=0, b=1, *c, d:, e:, f: 2, **k, &l) end 4034s 4034s Method#arity for a Method generated by respond_to_missing? 4034s - returns -1 4034s 4034s Method#arity for a Method generated by attr_reader 4034s - return 0 4034s 4034s Method#arity for a Method generated by attr_writer 4034s - returns 1 4034s 4034s Method#call 4034s - invokes the method with the specified arguments, returning the method's return value 4034s - raises an ArgumentError when given incorrect number of arguments 4034s 4034s Method#call for a Method generated by respond_to_missing? 4034s - invokes method_missing with the specified arguments and returns the result 4034s - invokes method_missing with the method name and the specified arguments 4034s - invokes method_missing dynamically 4034s - does not call the original method name even if it now exists 4034s 4034s Method#=== 4034s - invokes the method with the specified arguments, returning the method's return value 4034s - raises an ArgumentError when given incorrect number of arguments 4034s 4034s Method#=== for a Method generated by respond_to_missing? 4034s - invokes method_missing with the specified arguments and returns the result 4034s - invokes method_missing with the method name and the specified arguments 4034s - invokes method_missing dynamically 4034s - does not call the original method name even if it now exists 4034s 4034s Method#clone 4034s - returns a copy of the method 4034s 4034s Method#<< 4034s - returns a Proc that is the composition of self and the passed Proc 4034s - calls passed Proc with arguments and then calls self with result 4034s - accepts any callable object 4034s - raises TypeError if passed not callable object 4034s - does not try to coerce argument with #to_proc 4034s 4034s Method#<< composition 4034s - is a lambda 4034s - may accept multiple arguments 4034s 4034s Method#>> 4034s - returns a Proc that is the composition of self and the passed Proc 4034s - calls passed Proc with arguments and then calls self with result 4034s - accepts any callable object 4034s - raises TypeError if passed not callable object 4034s - does not try to coerce argument with #to_proc 4034s 4034s Method#>> composition 4034s - is a lambda 4034s - may accept multiple arguments 4034s 4034s Method#curry 4034s - returns a curried proc 4034s 4034s Method#curry with optional arity argument 4034s - returns a curried proc when given correct arity 4034s - raises ArgumentError when the method requires less arguments than the given arity 4034s - raises ArgumentError when the method requires more arguments than the given arity 4034s 4034s Method#[] 4034s - invokes the method with the specified arguments, returning the method's return value 4034s - raises an ArgumentError when given incorrect number of arguments 4034s 4034s Method#[] for a Method generated by respond_to_missing? 4034s - invokes method_missing with the specified arguments and returns the result 4034s - invokes method_missing with the method name and the specified arguments 4034s - invokes method_missing dynamically 4034s - does not call the original method name even if it now exists 4034s 4034s Method#eql? 4034s - returns true if methods are the same 4034s - returns true on aliased methods 4034s - returns true if the two core methods are aliases 4034s - returns false on a method which is neither aliased nor the same method 4034s - returns false for a method which is not bound to the same object 4034s - returns false if the two methods are bound to the same object but were defined independently 4034s - returns true if a method was defined using the other one 4034s - returns false if comparing a method defined via define_method and def 4034s - returns false if the two methods are bound to different objects, have the same names, and identical bodies 4034s - returns false if the argument is not a Method object 4034s - returns false if the argument is an unbound version of self 4034s 4034s Method#eql? missing methods 4034s - returns true for the same method missing 4034s - calls respond_to_missing? with true to include private methods 4034s 4034s Method#== 4034s - returns true if methods are the same 4034s - returns true on aliased methods 4034s - returns true if the two core methods are aliases 4034s - returns false on a method which is neither aliased nor the same method 4034s - returns false for a method which is not bound to the same object 4034s - returns false if the two methods are bound to the same object but were defined independently 4034s - returns true if a method was defined using the other one 4034s - returns false if comparing a method defined via define_method and def 4034s - returns false if the two methods are bound to different objects, have the same names, and identical bodies 4034s - returns false if the argument is not a Method object 4034s - returns false if the argument is an unbound version of self 4034s 4034s Method#== missing methods 4034s - returns true for the same method missing 4034s - calls respond_to_missing? with true to include private methods 4034s 4034s Method#hash 4034s - returns the same value for user methods that are eql? 4034s - returns the same value for builtin methods that are eql? 4034s 4034s Method#inspect 4034s - returns a String 4034s - returns a String for methods defined with attr_accessor 4034s - returns a String containing 'Method' 4034s - returns a String containing the method name 4034s - returns a String containing method arguments 4034s - returns a String containing the Module the method is defined in 4034s - returns a String containing the Module the method is referenced from 4034s - returns a String including all details 4034s - does not show the defining module if it is the same as the receiver class 4034s - returns a String containing the Module containing the method if object has a singleton class but method is not defined in the singleton class 4034s - returns a String containing the singleton class if method is defined in the singleton class 4034s - shows the metaclass and the owner for a Module instance method retrieved from a class 4034s 4034s Method#name 4034s - returns the name of the method 4034s - returns the name even when aliased 4034s 4034s Method#name for a Method generated by respond_to_missing? 4034s - returns the name passed to respond_to_missing? 4034s 4034s Method#original_name 4034s - returns the name of the method 4034s - returns the original name when aliased 4034s - returns the original name even when aliased twice 4034s 4034s Method#owner 4034s - returns the owner of the method 4034s - returns the same owner when aliased in the same classes 4034s - returns the class/module it was defined in 4034s 4034s Method#owner for a Method generated by respond_to_missing? 4034s - returns the owner of the method 4034s 4034s Method#parameters 4034s - returns an empty Array when the method expects no arguments 4034s - returns [[:req,:name]] for a method expecting one required argument called 'name' 4034s - returns [[:req,:a],[:req,:b]] for a method expecting two required arguments called 'a' and 'b'' 4034s - returns [[:block,:blk]] for a method expecting one block argument called 'a' 4034s - returns [[:req,:a],[:block,:b] for a method expecting a required argument ('a') and a block argument ('b') 4034s - returns [[:req,:a],[:req,:b],[:block,:c] for a method expecting two required arguments ('a','b') and a block argument ('c') 4034s - returns [[:opt,:a]] for a method expecting one optional argument ('a') 4034s - returns [[:req,:a],[:opt,:b]] for a method expecting one required argument ('a') and one optional argument ('b') 4034s - returns [[:req,:a],[:opt,:b]] for a method expecting one required argument ('a') and one optional argument ('b') 4034s - returns [[:req,:a],[:opt,:b],[:opt,:c]] for a method expecting one required argument ('a') and two optional arguments ('b','c') 4034s - returns [[:req,:a],[:req,:b],[:opt,:c]] for a method expecting two required arguments ('a','b') and one optional arguments ('c') 4034s - returns [[:opt,:a],[:block,:b]] for a method expecting one required argument ('a') and one block argument ('b') 4034s - returns [[:req,:a],[:opt,:b],[:block,:c]] for a method expecting one required argument ('a'), one optional argument ('b'), and a block ('c') 4034s - 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') 4034s - returns [[:rest,:a]] for a method expecting a single splat argument ('a') 4034s - returns [[:req,:a],[:rest,:b]] for a method expecting a splat argument ('a') and a required argument ('b') 4034s - returns [[:req,:a],[:req,:b],[:rest,:c]] for a method expecting two required arguments ('a','b') and a splat argument ('c') 4034s - 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') 4034s - 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') 4034s - 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') 4034s - returns [[:rest,:a],[:block,:b]] for a method expecting a splat argument ('a') and a block argument ('b') 4034s - returns [[:req,:a],[:rest,:b],[:block,:c]] for a method expecting a required argument ('a'), a splat argument ('b'), and a block ('c') 4034s - 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') 4034s - 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') 4034s - 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') 4034s - returns [[:rest,:a],[:req,:b]] for a method expecting a splat argument ('a') and a required argument ('b') 4034s - returns [[:rest,:a],[:req,:b],[:req,:c]] for a method expecting a splat argument ('a') and two required arguments ('b','c') 4034s - returns [[:rest,:a],[:req,:b],[:block,:c]] for a method expecting a splat argument ('a'), a required argument ('b'), and a block ('c') 4034s - returns [[:key,:a]] for a method with a single optional keyword argument 4034s - returns [[:keyrest,:a]] for a method with a keyword rest argument 4034s - returns [[:keyreq,:a]] for a method with a single required keyword argument 4034s - works with ->(){} as the value of an optional argument 4034s - returns [] for a define_method method with explicit no-args || specification 4034s - returns [[:rest, :x]] for a define_method method with rest arg 'x' only 4034s - returns [[:req, :x]] for a define_method method expecting one required argument 'x' 4034s - returns [[:req, :x], [:req, :y]] for a define_method method expecting two required arguments 'x' and 'y' 4034s - returns [] for a define_method method with no args specification 4034s - returns [[:req]] for a define_method method with a grouping as its only argument 4034s - returns [[:opt, :x]] for a define_method method with an optional argument 'x' 4034s - returns [[:rest]] for a Method generated by respond_to_missing? 4034s - adds nameless rest arg for "star" argument 4034s - adds nameless keyrest arg for "double star" argument 4034s - adds block arg with name & for anonymous block argument 4034s - returns the args and block for a splat and block argument 4034s - returns [] for a Method generated by attr_reader 4034s - return [[:req]] for a Method generated by attr_writer 4034s - returns all parameters defined with the name _ as _ 4034s - returns [[:rest]] for core methods with variable-length argument lists 4034s - returns [[:rest]] or [[:opt]] for core methods with optional arguments 4034s - returns [[:req]] for each parameter for core methods with fixed-length argument lists 4034s 4034s Method#private? 4034s - returns false when the method is public 4034s - returns false when the method is protected 4034s - returns true when the method is private 4034s 4034s Method#protected? 4034s - returns false when the method is public 4034s - returns true when the method is protected 4034s - returns false when the method is private 4034s 4034s Method#public? 4034s - returns true when the method is public 4034s - returns false when the method is protected 4034s - returns false when the method is private 4034s 4034s Method#receiver 4034s - returns the receiver of the method 4034s - returns the right receiver even when aliased 4034s 4034s Method#receiver for a Method generated by respond_to_missing? 4034s - returns the receiver of the method 4034s 4034s Method#source_location 4034s - returns an Array 4034s - sets the first value to the path of the file in which the method was defined 4034s - sets the last value to an Integer representing the line on which the method was defined 4034s - returns the last place the method was defined 4034s - returns the location of the original method even if it was aliased 4034s - works for methods defined with a block 4034s - works for methods defined with a Method 4034s - works for methods defined with an UnboundMethod 4034s - works for methods whose visibility has been overridden in a subclass 4034s - works for core methods where it returns nil or 4036s - returns -1 if self is a subclass of or includes the given module 4036s - returns 0 if self is the same as the given module 4036s - returns +1 if self is a superclass of or included by the given module 4036s - returns nil if self and the given module are not related 4036s - returns nil if the argument is not a class/module 4036s 4036s Module#const_defined? 4036s - returns true if the given Symbol names a constant defined in the receiver 4036s - returns true if the constant is defined in the receiver's superclass 4036s - returns true if the constant is defined in a mixed-in module of the receiver's parent 4036s - returns true if the constant is defined in a mixed-in module (with prepends) of the receiver 4036s - returns true if the constant is defined in Object and the receiver is a module 4036s - returns true if the constant is defined in Object and the receiver is a class that has Object among its ancestors 4036s - returns false if the constant is defined in the receiver's superclass and the inherit flag is false 4036s - returns true if the constant is defined in the receiver's superclass and the inherit flag is true 4036s - coerces the inherit flag to a boolean 4036s - returns true if the given String names a constant defined in the receiver 4036s - returns true when passed a constant name with unicode characters 4036s - returns true when passed a constant name with EUC-JP characters 4036s - returns false if the constant is not defined in the receiver, its superclass, or any included modules 4036s - does not call #const_missing if the constant is not defined in the receiver 4036s - special cases Object and checks it's included Modules 4036s - returns true for toplevel constant when the name begins with '::' 4036s - returns true when passed a scoped constant name 4036s - returns true when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is default 4036s - returns true when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is true 4036s - returns false when passed a scoped constant name for a constant in the inheritance hierarchy and the inherited flag is false 4036s - returns false when the name begins with '::' and the toplevel constant does not exist 4036s - raises a NameError if the name does not start with a capital letter 4036s - raises a NameError if the name starts with '_' 4036s - raises a NameError if the name starts with '@' 4036s - raises a NameError if the name starts with '!' 4036s - returns true or false for the nested name 4036s - raises a NameError if the name contains non-alphabetic characters except '_' 4036s - raises a TypeError if conversion to a String by calling #to_str fails 4036s 4036s Module#const_defined? converts the given name to a String using #to_str 4036s - calls #to_str to convert the given name to a String 4036s - raises a TypeError if the given name can't be converted to a String 4036s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 4036s 4036s Module#const_get 4036s - accepts a String or Symbol name 4036s - raises a NameError if no constant is defined in the search path 4036s - raises a NameError with the not found constant symbol 4036s - raises a NameError if the name does not start with a capital letter 4036s - raises a NameError if the name starts with a non-alphabetic character 4036s - raises a NameError if the name contains non-alphabetic characters except '_' 4036s - calls #to_str to convert the given name to a String 4036s - raises a TypeError if conversion to a String by calling #to_str fails 4036s - calls #const_missing on the receiver if unable to locate the constant 4036s - does not search the singleton class of a Class or Module 4036s - does not search the containing scope 4036s - raises a NameError if the constant is defined in the receiver's superclass and the inherit flag is false 4036s - searches into the receiver superclasses if the inherit flag is true 4036s - raises a NameError when the receiver is a Module, the constant is defined at toplevel and the inherit flag is false 4036s - raises a NameError when the receiver is a Class, the constant is defined at toplevel and the inherit flag is false 4036s - coerces the inherit flag to a boolean 4036s - accepts a toplevel scope qualifier 4036s - accepts a toplevel scope qualifier when inherit is false 4036s - returns a constant whose module is defined the toplevel 4036s - accepts a scoped constant name 4036s - raises a NameError if the name includes two successive scope separators 4036s - raises a NameError if only '::' is passed 4036s - raises a NameError if a Symbol has a toplevel scope qualifier 4036s - raises a NameError if a Symbol is a scoped constant name 4036s - does read private constants 4036s - does autoload a constant 4036s - does autoload a constant with a toplevel scope qualifier 4036s - does autoload a module and resolve a constant within 4036s - does autoload a non-toplevel module 4036s - raises a NameError when the nested constant does not exist on the module but exists in Object 4036s 4036s Module#const_get with statically assigned constants 4036s - searches the immediate class or module first 4036s - searches a module included in the immediate class before the superclass 4036s - searches the superclass before a module included in the superclass 4036s - searches a module included in the superclass 4036s - searches the superclass chain 4036s - returns a toplevel constant when the receiver is a Class 4036s - returns a toplevel constant when the receiver is a Module 4036s 4036s Module#const_get with dynamically assigned constants 4036s - searches the immediate class or module first 4036s - searches a module included in the immediate class before the superclass 4036s - searches the superclass before a module included in the superclass 4036s - searches a module included in the superclass 4036s - searches the superclass chain 4036s - returns a toplevel constant when the receiver is a Class 4036s - returns a toplevel constant when the receiver is a Module 4036s - returns the updated value of a constant 4036s 4036s Module#const_missing 4036s - is called when an undefined constant is referenced via literal form 4036s - is called when an undefined constant is referenced via #const_get 4036s - raises NameError and includes the name of the value that wasn't found 4036s - raises NameError and does not include toplevel Object 4036s - is called regardless of visibility 4036s 4036s Module#const_set 4036s - sets the constant specified by a String or Symbol to the given value 4036s - returns the value set 4036s - sets the name of an anonymous module 4036s - sets the name of a module scoped by an anonymous module 4036s - sets the name of contained modules when assigning a toplevel anonymous module 4036s - raises a NameError if the name does not start with a capital letter 4036s - raises a NameError if the name starts with a non-alphabetic character 4036s - raises a NameError if the name contains non-alphabetic characters except '_' 4036s - calls #to_str to convert the given name to a String 4036s - raises a TypeError if conversion to a String by calling #to_str fails 4036s 4036s Module#const_set when overwriting an existing constant 4036s - warns if the previous value was a normal value 4036s - does not warn if the previous value was an autoload 4036s - does not warn after a failed autoload 4036s - does not warn if the new value is an autoload 4036s 4036s Module#const_set on a frozen module 4036s - raises a FrozenError before setting the name 4036s 4036s Module#const_source_location 4036s - return empty path if constant defined in C code 4036s - accepts a String or Symbol name 4036s - returns nil if no constant is defined in the search path 4036s - raises a NameError if the name does not start with a capital letter 4036s - raises a NameError if the name starts with a non-alphabetic character 4036s - raises a NameError if the name contains non-alphabetic characters except '_' 4036s - calls #to_str to convert the given name to a String 4036s - raises a TypeError if conversion to a String by calling #to_str fails 4036s - does not search the singleton class of a Class or Module 4036s - does not search the containing scope 4036s - returns nil if the constant is defined in the receiver's superclass and the inherit flag is false 4036s - searches into the receiver superclasses if the inherit flag is true 4036s - returns nil when the receiver is a Module, the constant is defined at toplevel and the inherit flag is false 4036s - returns nil when the receiver is a Class, the constant is defined at toplevel and the inherit flag is false 4036s - accepts a toplevel scope qualifier 4036s - accepts a scoped constant name 4036s - returns updated location from const_set 4036s - raises a NameError if the name includes two successive scope separators 4036s - raises a NameError if only '::' is passed 4036s - raises a NameError if a Symbol has a toplevel scope qualifier 4036s - raises a NameError if a Symbol is a scoped constant name 4036s - does search private constants path 4036s - works for eval with a given line 4036s 4036s Module#const_source_location with dynamically assigned constants 4036s - searches a path in the immediate class or module first 4036s - searches a path in a module included in the immediate class before the superclass 4036s - searches a path in the superclass before a module included in the superclass 4036s - searches a path in a module included in the superclass 4036s - searches a path in the superclass chain 4036s - returns path to a toplevel constant when the receiver is a Class 4036s - returns path to a toplevel constant when the receiver is a Module 4036s - returns path to the updated value of a constant 4036s 4036s Module#const_source_location with statically assigned constants 4036s - works for the module and class keywords 4036s - searches location path the immediate class or module first 4036s - searches location path a module included in the immediate class before the superclass 4036s - searches location path the superclass before a module included in the superclass 4036s - searches location path a module included in the superclass 4036s - searches location path the superclass chain 4036s - returns location path a toplevel constant when the receiver is a Class 4036s - returns location path a toplevel constant when the receiver is a Module 4036s 4036s Module#const_source_location autoload 4036s - returns the autoload location while not resolved 4036s - returns where the constant was resolved when resolved 4036s 4036s Module.constants 4036s - returns an array of the names of all toplevel constants 4036s - returns an array of Symbol names 4036s - returns Module's constants when given a parameter 4036s 4036s Module#constants 4036s - returns an array of Symbol names of all constants defined in the module and all included modules 4036s - returns all constants including inherited when passed true 4036s - returns all constants including inherited when passed some object 4036s - doesn't returns inherited constants when passed false 4036s - doesn't returns inherited constants when passed nil 4036s - returns only public constants 4036s - returns only constants starting with an uppercase letter 4036s 4036s Module#constants 4036s - includes names of constants defined after a module is included 4036s 4036s passed { |a, b = 1| } creates a method that 4036s - raises an ArgumentError when passed zero arguments 4036s - has a default value for b when passed one argument 4036s - overrides the default argument when passed two arguments 4036s - raises an ArgumentError when passed three arguments 4036s 4036s Module#define_method when given an UnboundMethod 4036s - passes the given arguments to the new method 4036s - adds the new method to the methods list 4036s - sets the new method's visibility to the current frame's visibility 4036s 4036s Module#define_method when given an UnboundMethod defining a method on a singleton class 4036s - doesn't raise TypeError when calling the method 4036s 4036s Module#define_method when name is not a special private name given an UnboundMethod 4036s - sets the method owner for a dynamically added method with a different original owner 4036s 4036s Module#define_method when name is not a special private name given an UnboundMethod and called from the target module 4036s - sets the visibility of the method to the current visibility 4036s 4036s Module#define_method when name is not a special private name given an UnboundMethod and called from another module 4036s - sets the visibility of the method to public 4036s 4036s Module#define_method when name is not a special private name passed a block and called from the target module 4036s - sets the visibility of the method to the current visibility 4036s 4036s Module#define_method when name is not a special private name passed a block and called from another module 4036s - sets the visibility of the method to public 4036s 4036s Module#define_method when name is :initialize passed a block 4036s - sets visibility to private when method name is :initialize 4036s 4036s Module#define_method when name is :initialize given an UnboundMethod 4036s - sets the visibility to private when method is named :initialize 4036s 4036s Module#define_method 4036s - defines the given method as an instance method with the given name in self 4036s - calls #method_added after the method is added to the Module 4036s - defines a new method with the given name and the given block as body in self 4036s - raises TypeError if name cannot converted to String 4036s - converts non-String name to String with #to_str 4036s - raises TypeError when #to_str called on non-String name returns non-String value 4036s - raises a TypeError when the given method is no Method/Proc 4036s - uses provided Method/Proc even if block is specified 4036s - raises an ArgumentError when no block is given 4036s - does not use the caller block when no block is given 4036s - does not change the arity check style of the original proc 4036s - raises a FrozenError if frozen 4036s - accepts a Method (still bound) 4036s - raises a TypeError when a Method from a singleton class is defined on another class 4036s - raises a TypeError when a Method from one class is defined on an unrelated class 4036s - accepts an UnboundMethod from an attr_accessor method 4036s - accepts a proc from a method 4036s - accepts a proc from a Symbol 4036s - maintains the Proc's scope 4036s - accepts a String method name 4036s - is a public method 4036s - returns its symbol 4036s - allows an UnboundMethod from a module to be defined on a class 4036s - allows an UnboundMethod from a parent class to be defined on a child class 4036s - allows an UnboundMethod from a module to be defined on another unrelated module 4036s - allows an UnboundMethod of a Kernel method retrieved from Object to defined on a BasicObject subclass 4036s - raises a TypeError when an UnboundMethod from a child class is defined on a parent class 4036s - raises a TypeError when an UnboundMethod from one class is defined on an unrelated class 4036s - raises a TypeError when an UnboundMethod from a singleton class is defined on another class 4036s - 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 4036s - 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 4036s 4036s Module#define_method passed { } creates a method that 4036s - returns the value computed by the block when passed zero arguments 4036s - raises an ArgumentError when passed one argument 4036s - raises an ArgumentError when passed two arguments 4036s 4036s Module#define_method passed { || } creates a method that 4036s - returns the value computed by the block when passed zero arguments 4036s - raises an ArgumentError when passed one argument 4036s - raises an ArgumentError when passed two arguments 4036s 4036s Module#define_method passed { |a| } creates a method that 4036s - raises an ArgumentError when passed zero arguments 4036s - raises an ArgumentError when passed zero arguments and a block 4036s - raises an ArgumentError when passed two arguments 4036s - receives the value passed as the argument when passed one argument 4036s 4036s Module#define_method passed { |a,| } creates a method that 4036s - raises an ArgumentError when passed zero arguments 4036s - raises an ArgumentError when passed zero arguments and a block 4036s - raises an ArgumentError when passed two arguments 4036s - receives the value passed as the argument when passed one argument 4036s - does not destructure the passed argument 4036s 4036s Module#define_method passed { |*a| } creates a method that 4036s - receives an empty array as the argument when passed zero arguments 4036s - receives the value in an array when passed one argument 4036s - receives the values in an array when passed two arguments 4036s 4036s Module#define_method passed { |a, *b| } creates a method that 4036s - raises an ArgumentError when passed zero arguments 4036s - returns the value computed by the block when passed one argument 4036s - returns the value computed by the block when passed two arguments 4036s - returns the value computed by the block when passed three arguments 4036s 4036s Module#define_method passed { |a, b| } creates a method that 4036s - returns the value computed by the block when passed two arguments 4036s - raises an ArgumentError when passed zero arguments 4036s - raises an ArgumentError when passed one argument 4036s - raises an ArgumentError when passed one argument and a block 4036s - raises an ArgumentError when passed three arguments 4036s 4036s Module#define_method passed { |a, b, *c| } creates a method that 4036s - raises an ArgumentError when passed zero arguments 4036s - raises an ArgumentError when passed one argument 4036s - raises an ArgumentError when passed one argument and a block 4036s - receives an empty array as the third argument when passed two arguments 4036s - receives the third argument in an array when passed three arguments 4036s 4036s Module#define_method when passed a Method object 4036s - defines a method with the same #arity as the original 4036s - defines a method with the same #parameters as the original 4036s 4036s Module#define_method when passed an UnboundMethod object 4036s - defines a method with the same #arity as the original 4036s - defines a method with the same #parameters as the original 4036s 4036s Module#define_method when passed a block behaves exactly like a lambda 4036s - for return 4036s - for redo 4036s 4036s Module#define_singleton_method 4036s - defines the given method as an class method with the given name in self 4036s 4036s Module#deprecate_constant 4036s - accepts multiple symbols and strings as constant names 4036s - returns self 4036s - raises a NameError when given an undefined name 4036s 4036s Module#deprecate_constant when accessing the deprecated module 4036s - passes the accessing 4036s - warns with a message 4036s - does not warn if Warning[:deprecated] is false 4036s 4036s Module#eql? 4036s - returns true if self and the given module are the same 4036s 4036s Module#equal? 4036s - returns true if self and the given module are the same 4036s 4036s Module#== 4036s - returns true if self and the given module are the same 4036s 4036s Module#extend_object 4036s - is a private method 4036s - is called when #extend is called on an object 4036s - extends the given object with its constants and methods by default 4036s - is called even when private 4036s 4036s Module#extend_object on Class 4036s - is undefined 4036s - raises a TypeError if calling after rebinded to Class 4036s 4036s Module#extend_object when given a frozen object 4036s - raises a RuntimeError before extending the object 4036s 4036s Module#extended 4036s - is called when an object gets extended with self 4036s - is called after Module#extend_object 4036s - is private in its default implementation 4036s 4036s Module#freeze 4036s - needs to be reviewed for spec completeness 4036s 4036s Module#> 4036s - returns false if self is a subclass of or includes the given module 4036s - returns true if self is a superclass of or included by the given module 4036s - returns false if self is the same as the given module 4036s - returns nil if self is not related to the given module 4036s - raises a TypeError if the argument is not a class/module 4036s 4036s Module#>= 4036s - returns true if self is a superclass of, the same as or included by given module 4036s - returns nil if self is not related to the given module 4036s - returns false if self is a subclass of or includes the given module 4036s - raises a TypeError if the argument is not a class/module 4036s 4036s Module#include 4036s - is a public method 4036s - calls #append_features(self) in reversed order on each module 4036s - adds all ancestor modules when a previously included module is included again 4036s - raises a TypeError when the argument is not a Module 4036s - does not raise a TypeError when the argument is an instance of a subclass of Module 4036s - imports constants to modules and classes 4036s - shadows constants from ancestors 4036s - does not override existing constants in modules and classes 4036s - imports instance methods to modules and classes 4036s - does not import methods to modules and classes 4036s - attaches the module as the caller's immediate ancestor 4036s - doesn't include module if it is included in a super class 4036s - recursively includes new mixins 4036s - preserves ancestor order 4036s - detects cyclic includes 4036s - doesn't accept no-arguments 4036s - returns the class it's included into 4036s - ignores modules it has already included via module mutual inclusion 4036s - clears any caches 4036s - updates the method when an included module is updated 4036s - updates the method when a module included after a call is later updated 4036s - updates the method when a nested included module is updated 4036s - updates the method when a new module is included 4036s - updates the method when a new module with nested module is included 4036s - updates the constant when an included module is updated 4036s - updates the constant when a module included after a call is later updated 4036s - updates the constant when a module included in another module after a call is later updated 4036s - updates the constant when a nested included module is updated 4036s - updates the constant when a new module is included 4036s - updates the constant when a new module with nested module is included 4036s - overrides a previous super method call 4036s 4036s Module#include? 4036s - returns true if the given module is included by self or one of it's ancestors 4036s - returns false if given module is equal to self 4036s - raises a TypeError when no module was given 4036s 4036s Module#included_modules 4036s - returns a list of modules included in self 4036s 4036s Module#included 4036s - is invoked when self is included in another module or class 4036s - allows extending self with the object into which it is being included 4036s - is private in its default implementation 4036s - works with super using a singleton class 4036s 4036s Module#initialize_copy 4036s - should retain singleton methods when duped 4036s - should produce a duped module with inspectable class methods 4036s 4036s Module#initialize 4036s - accepts a block 4036s - is called on subclasses 4036s 4036s Module#instance_method 4036s - is a public method 4036s - requires an argument 4036s - returns an UnboundMethod corresponding to the given name 4036s - returns an UnboundMethod corresponding to the given name from a superclass 4036s - returns an UnboundMethod corresponding to the given name from an included Module 4036s - returns an UnboundMethod when given a protected method name 4036s - returns an UnboundMethod when given a private method name 4036s - gives UnboundMethod method name, Module defined in and Module extracted from 4036s - raises a TypeError if the given name is not a String/Symbol 4036s - accepts String name argument 4036s - accepts Symbol name argument 4036s - converts non-String name by calling #to_str method 4036s - raises TypeError when passed non-String name and #to_str returns non-String value 4036s - raises a NameError if the method has been undefined 4036s - raises a NameError if the method does not exist 4036s - sets the NameError#name attribute to the name of the missing method 4036s 4036s Module#instance_methods 4036s - does not return methods undefined in a superclass 4036s - only includes module methods on an included module 4036s - does not return methods undefined in a subclass 4036s - does not return methods undefined in the current class 4036s - does not return methods from an included module that are undefined in the class 4036s - returns the public and protected methods of self if include_super is false 4036s - returns the public and protected methods of self and it's ancestors 4036s - makes a private Object instance method public in Kernel 4036s 4036s Module#< 4036s - returns true if self is a subclass of or includes the given module 4036s - returns false if self is a superclass of or included by the given module 4036s - returns false if self is the same as the given module 4036s - returns nil if self is not related to the given module 4036s - raises a TypeError if the argument is not a class/module 4036s 4036s Module#<= 4036s - returns true if self is a subclass of, the same as or includes the given module 4036s - returns nil if self is not related to the given module 4036s - returns false if self is a superclass of or is included by the given module 4036s - raises a TypeError if the argument is not a class/module 4036s 4036s Module#method_added 4036s - is a private instance method 4036s - returns nil in the default implementation 4036s - is called when a new instance method is defined in self 4036s - is not called when a singleton method is added 4036s - is not called when a method is undefined in self 4036s - is not called when a method changes visibility 4036s - is not called when a method is copied via module_function, rather #singleton_method_added is called 4036s - is called with a precise caller location with the line of the 'def' 4036s 4036s Module#method_defined? 4036s - 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 4036s - does not search Object or Kernel when called on a module 4036s - raises a TypeError when the given object is not a string/symbol 4036s - converts the given name to a string using to_str 4036s 4036s Module#method_defined? when passed true as a second optional argument 4036s - performs a lookup in ancestors 4036s 4036s Module#method_defined? when passed false as a second optional argument 4036s - checks only the class itself 4036s 4036s Module#method_removed 4036s - is a private instance method 4036s - returns nil in the default implementation 4036s - is called when a method is removed from self 4036s 4036s Module#method_undefined 4036s - is a private instance method 4036s - returns nil in the default implementation 4036s - is called when a method is undefined from self 4036s 4036s Module#module_eval 4036s - evaluates a given string in the context of self 4036s - does not add defined methods to other classes 4036s - resolves constants in the caller scope 4036s - resolves constants in the caller scope ignoring send 4036s - resolves constants in the receiver's scope 4036s - defines constants in the receiver's scope 4036s - evaluates a given block in the context of self 4036s - passes the module as the first argument of the block 4036s - uses the optional filename and lineno parameters for error messages 4036s - converts a non-string filename to a string using to_str 4036s - raises a TypeError when the given filename can't be converted to string using to_str 4036s - converts non string eval-string to string using to_str 4036s - raises a TypeError when the given eval-string can't be converted to string using to_str 4036s - raises an ArgumentError when no arguments and no block are given 4036s - raises an ArgumentError when more than 3 arguments are given 4036s - raises an ArgumentError when a block and normal arguments are given 4036s - adds methods respecting the lexical constant scope 4036s - activates refinements from the eval scope 4036s - activates refinements from the eval scope with block 4036s 4036s Module#module_exec 4036s - does not add defined methods to other classes 4036s - defines method in the receiver's scope 4036s - evaluates a given block in the context of self 4036s - raises a LocalJumpError when no block is given 4036s - passes arguments to the block 4036s 4036s Module#module_function 4036s - is a private method 4036s 4036s Module#module_function on Class 4036s - is undefined 4036s - raises a TypeError if calling after rebinded to Class 4036s 4036s Module#module_function with specific method names 4036s - creates duplicates of the given instance methods on the Module object 4036s - returns argument or arguments if given 4036s - creates an independent copy of the method, not a redirect 4036s - makes the instance methods private 4036s - makes the new Module methods public 4036s - tries to convert the given names to strings using to_str 4036s - raises a TypeError when the given names can't be converted to string using to_str 4036s - can make accessible private methods 4036s - creates Module methods that super up the singleton class of the module 4036s 4036s Module#module_function with specific method names methods created with define_method passed a block 4036s - creates duplicates of the given instance methods 4036s 4036s Module#module_function with specific method names methods created with define_method passed a method 4036s - creates duplicates of the given instance methods 4036s 4036s Module#module_function with specific method names methods created with define_method passed an unbound method 4036s - creates duplicates of the given instance methods 4036s 4036s Module#module_function as a toggle (no arguments) in a Module body 4036s - makes any subsequently defined methods module functions with the normal semantics 4036s - returns nil 4036s - stops creating module functions if the body encounters another toggle like public/protected/private without arguments 4036s - does not stop creating module functions if the body encounters public/protected/private WITH arguments 4036s - does not affect module_evaled method definitions also if outside the eval itself 4036s - has no effect if inside a module_eval if the definitions are outside of it 4036s - functions normally if both toggle and definitions inside a module_eval 4036s - affects eval'ed method definitions also even when outside the eval itself 4036s - functions normally if both toggle and definitions inside a eval 4036s 4036s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed a block 4036s - makes any subsequently defined methods module functions with the normal semantics 4036s 4036s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed a method 4036s - makes any subsequently defined methods module functions with the normal semantics 4036s 4036s Module#module_function as a toggle (no arguments) in a Module body methods are defined with define_method passed an unbound method 4036s - makes any subsequently defined methods module functions with the normal semantics 4036s 4036s Module#name 4036s - is nil for an anonymous module 4036s - is not nil when assigned to a constant in an anonymous module 4036s - is not nil for a nested module created with the module keyword 4036s - returns nil for a singleton class 4036s - may be the repeated in different module objects 4036s - is set after it is removed from a constant 4036s - is set after it is removed from a constant under an anonymous module 4036s - is set when opened with the module keyword 4036s - is set when a nested module is opened with the module keyword 4036s - is set when assigning to a constant (constant path matches outer module name) 4036s - is set when assigning to a constant (constant path does not match outer module name) 4036s - is not modified when assigning to a new constant after it has been accessed 4036s - is not modified when assigned to a different anonymous module 4036s - is set with a conditional assignment to a nested constant 4036s - is set with a conditional assignment to a constant 4036s - preserves the encoding in which the class was defined 4036s - is set when the anonymous outer module name is set (module in one single constant) 4036s - is set when the anonymous outer module name is set (module in several constants) 4036s - returns a frozen String 4036s - always returns the same String for a given Module 4036s 4036s Module::Nesting 4036s - returns the list of Modules nested at the point of call 4036s - returns the nesting for module/class declaring the called method 4036s 4036s Module.nesting 4036s - needs to be reviewed for spec completeness 4036s 4036s Module.new 4036s - creates a new anonymous Module 4036s - creates a new Module and passes it to the provided block 4036s - evaluates a passed block in the context of the module 4036s 4036s Module#prepend_features 4036s - is a private method 4036s - gets called when self is included in another module/class 4036s - raises an ArgumentError on a cyclic prepend 4036s - clears caches of the given module 4036s 4036s Module#prepend_features on Class 4036s - is undefined 4036s - raises a TypeError if calling after rebinded to Class 4036s 4036s Module#prepend 4036s - is a public method 4036s - does not affect the superclass 4036s - calls #prepend_features(self) in reversed order on each module 4036s - updates the method when a module is prepended 4036s - updates the method when a prepended module is updated 4036s - updates the method when there is a base included method and the prepended module overrides it 4036s - updates the method when there is a base included method and the prepended module is later updated 4036s - updates the method when a module prepended after a call is later updated 4036s - updates the method when a module is prepended after another and the method is defined later on that module 4036s - updates the method when a module is included in a prepended module and the method is defined later 4036s - updates the method when a new module with an included module is prepended 4036s - updates the constant when a module is prepended 4036s - updates the constant when a prepended module is updated 4036s - updates the constant when there is a base included constant and the prepended module overrides it 4036s - updates the constant when there is a base included constant and the prepended module is later updated 4036s - updates the constant when a module prepended after a constant is later updated 4036s - updates the constant when a module is prepended after another and the constant is defined later on that module 4036s - updates the constant when a module is included in a prepended module and the constant is defined later 4036s - updates the constant when a new module with an included module is prepended 4036s - raises a TypeError when the argument is not a Module 4036s - does not raise a TypeError when the argument is an instance of a subclass of Module 4036s - imports constants 4036s - imports instance methods 4036s - does not import methods to modules and classes 4036s - allows wrapping methods 4036s - also prepends included modules 4036s - prepends multiple modules in the right order 4036s - includes prepended modules in ancestors 4036s - reports the prepended module as the method owner 4036s - reports the prepended module as the unbound method owner 4036s - causes the prepended module's method to be aliased by alias_method 4036s - reports the class for the owner of an aliased method on the class 4036s - reports the class for the owner of a method aliased from the prepended module 4036s - sees an instance of a prepended class as kind of the prepended module 4036s - keeps the module in the chain when dupping the class 4036s - depends on prepend_features to add the module 4036s - adds the module in the subclass chains 4036s - inserts a later prepended module into the chain 4036s - works with subclasses 4036s - throws a NoMethodError when there is no more superclass 4036s - calls prepended after prepend_features 4036s - prepends a module if it is included in a super class 4036s - detects cyclic prepends 4036s - doesn't accept no-arguments 4036s - returns the class it's included into 4036s - clears any caches 4036s - supports super when the module is prepended into a singleton class 4036s - supports super when the module is prepended into a singleton class with a class super 4036s - does not interfere with a define_method super in the original class 4036s - does not prepend a second copy if the module already indirectly exists in the hierarchy 4036s 4036s Module#prepend called on a module 4036s - does not obscure the module's methods from reflective access 4036s 4036s Module#prepended 4036s - is a private method 4036s - is invoked when self is prepended to another module or class 4036s 4036s Module#private_class_method 4036s - makes an existing class method private 4036s - makes an existing class method private up the inheritance tree 4036s - accepts more than one method at a time 4036s - raises a NameError if class method doesn't exist 4036s - makes a class method private 4036s - raises a NameError when the given name is not a method 4036s - raises a NameError when the given name is an instance method 4036s 4036s Module#private_class_method when single argument is passed and is an array 4036s - sets the visibility of the given methods to private 4036s 4036s Module#private_constant 4036s - can only be passed constant names defined in the target (self) module 4036s - accepts strings as constant names 4036s - accepts multiple names 4036s 4036s Module#private_instance_methods 4036s - returns a list of private methods in module and its ancestors 4036s - when passed false as a parameter, should return only methods defined in that module 4036s - default list should be the same as passing true as an argument 4036s 4036s Module#private_instance_methods when not passed an argument 4036s - returns a unique list for a class including a module 4036s - returns a unique list for a subclass 4036s 4036s Module#private_instance_methods when passed true 4036s - returns a unique list for a class including a module 4036s - returns a unique list for a subclass 4036s 4036s Module#private_method_defined? 4036s - returns true if the named private method is defined by module or its ancestors 4036s - returns false if method is not a private method 4036s - returns false if the named method is not defined by the module or its ancestors 4036s - accepts symbols for the method name 4037s - raises a TypeError if passed an Integer 4037s - raises a TypeError if passed nil 4037s - raises a TypeError if passed false 4037s - raises a TypeError if passed an object that does not defined #to_str 4037s - raises a TypeError if passed an object that defines #to_sym 4037s - calls #to_str to convert an Object 4037s 4037s Module#private_method_defined? when passed true as a second optional argument 4037s - performs a lookup in ancestors 4037s 4037s Module#private_method_defined? when passed false as a second optional argument 4037s - checks only the class itself 4037s 4037s Module#private 4037s - is a private method 4037s - makes the target method uncallable from other types 4037s - makes a public Object instance method private in a new module 4037s - makes a public Object instance method private in Kernel 4037s - returns argument or arguments if given 4037s - raises a NameError when given an undefined name 4037s - only makes the method private in the class it is called on 4037s - continues to allow a prepended module method to call super 4037s 4037s Module#private with argument 4037s - does not clone method from the ancestor when setting to the same visibility in a child 4037s 4037s Module#private with argument one or more arguments 4037s - sets visibility of given method names 4037s 4037s Module#private with argument array as a single argument 4037s - sets visibility of given method names 4037s 4037s Module#private without arguments 4037s - sets visibility to following method definitions 4037s - stops setting visibility if the body encounters other visibility setters without arguments 4037s - continues setting visibility if the body encounters other visibility setters with arguments 4037s - does not affect module_evaled method definitions when itself is outside the eval 4037s - does not affect outside method definitions when itself is inside a module_eval 4037s - affects normally if itself and method definitions are inside a module_eval 4037s - affects evaled method definitions when itself is outside the eval 4037s - affects normally if itself and following method definitions are inside a eval 4037s 4037s Module#protected_instance_methods 4037s - returns a list of protected methods in module and its ancestors 4037s - when passed false as a parameter, should return only methods defined in that module 4037s - default list should be the same as passing true as an argument 4037s 4037s Module#protected_instance_methods when not passed an argument 4037s - returns a unique list for a class including a module 4037s - returns a unique list for a subclass 4037s 4037s Module#protected_instance_methods when passed true 4037s - returns a unique list for a class including a module 4037s - returns a unique list for a subclass 4037s 4037s Module#protected_method_defined? 4037s - returns true if the named protected method is defined by module or its ancestors 4037s - returns false if method is not a protected method 4037s - returns false if the named method is not defined by the module or its ancestors 4037s - accepts symbols for the method name 4037s - raises a TypeError if passed an Integer 4037s - raises a TypeError if passed nil 4037s - raises a TypeError if passed false 4037s - raises a TypeError if passed an object that does not defined #to_str 4037s - raises a TypeError if passed an object that defines #to_sym 4037s - calls #to_str to convert an Object 4037s 4037s Module#protected_method_defined? when passed true as a second optional argument 4037s - performs a lookup in ancestors 4037s 4037s Module#protected_method_defined? when passed false as a second optional argument 4037s - checks only the class itself 4037s 4037s Module#protected 4037s - is a private method 4037s - makes an existing class method protected 4037s - makes a public Object instance method protected in a new module 4037s - makes a public Object instance method protected in Kernel 4037s - returns argument or arguments if given 4037s - raises a NameError when given an undefined name 4037s 4037s Module#protected with argument 4037s - does not clone method from the ancestor when setting to the same visibility in a child 4037s 4037s Module#protected with argument one or more arguments 4037s - sets visibility of given method names 4037s 4037s Module#protected with argument array as a single argument 4037s - sets visibility of given method names 4037s 4037s Module#protected without arguments 4037s - sets visibility to following method definitions 4037s - stops setting visibility if the body encounters other visibility setters without arguments 4037s - continues setting visibility if the body encounters other visibility setters with arguments 4037s - does not affect module_evaled method definitions when itself is outside the eval 4037s - does not affect outside method definitions when itself is inside a module_eval 4037s - affects normally if itself and method definitions are inside a module_eval 4037s - affects evaled method definitions when itself is outside the eval 4037s - affects normally if itself and following method definitions are inside a eval 4037s 4037s Module#public_class_method 4037s - makes an existing class method public 4037s - makes an existing class method public up the inheritance tree 4037s - accepts more than one method at a time 4037s - raises a NameError if class method doesn't exist 4037s - makes a class method public 4037s - raises a NameError when the given name is not a method 4037s - raises a NameError when the given name is an instance method 4037s 4037s Module#public_class_method when single argument is passed and is an array 4037s - makes a class method public 4037s 4037s Module#public_constant 4037s - can only be passed constant names defined in the target (self) module 4037s - accepts strings as constant names 4037s - accepts multiple names 4037s 4037s Module#public_instance_method 4037s - is a public method 4037s - requires an argument 4037s - raises a TypeError when given a name is not Symbol or String 4037s - raises a NameError when given a protected method name 4037s - raises a NameError if the method is private 4037s - raises a NameError if the method has been undefined 4037s - raises a NameError if the method does not exist 4037s - sets the NameError#name attribute to the name of the missing method 4037s 4037s Module#public_instance_method when given a public method name 4037s - returns an UnboundMethod corresponding to the defined Module 4037s - accepts if the name is a Symbol or String 4037s 4037s Module#public_instance_methods 4037s - returns a list of public methods in module and its ancestors 4037s - when passed false as a parameter, should return only methods defined in that module 4037s - default list should be the same as passing true as an argument 4037s 4037s Module#public_instance_methods when not passed an argument 4037s - returns a unique list for a class including a module 4037s - returns a unique list for a subclass 4037s 4037s Module#public_instance_methods when passed true 4037s - returns a unique list for a class including a module 4037s - returns a unique list for a subclass 4037s 4037s Module#public_method_defined? 4037s - returns true if the named public method is defined by module or its ancestors 4037s - returns false if method is not a public method 4037s - returns false if the named method is not defined by the module or its ancestors 4037s - accepts symbols for the method name 4037s - raises a TypeError if passed an Integer 4037s - raises a TypeError if passed nil 4037s - raises a TypeError if passed false 4037s - raises a TypeError if passed an object that does not defined #to_str 4037s - raises a TypeError if passed an object that defines #to_sym 4037s - calls #to_str to convert an Object 4037s 4037s Module#public 4037s - is a private method 4037s - makes a private Object instance method public in a new module 4037s - makes a private Object instance method public in Kernel 4037s - returns argument or arguments if given 4037s - raises a NameError when given an undefined name 4037s 4037s Module#public with argument 4037s - does not clone method from the ancestor when setting to the same visibility in a child 4037s 4037s Module#public with argument one or more arguments 4037s - sets visibility of given method names 4037s 4037s Module#public with argument array as a single argument 4037s - sets visibility of given method names 4037s 4037s Module#public without arguments 4037s - sets visibility to following method definitions 4037s - stops setting visibility if the body encounters other visibility setters without arguments 4037s - continues setting visibility if the body encounters other visibility setters with arguments 4037s - does not affect module_evaled method definitions when itself is outside the eval 4037s - does not affect outside method definitions when itself is inside a module_eval 4037s - affects normally if itself and method definitions are inside a module_eval 4037s - affects evaled method definitions when itself is outside the eval 4037s - affects normally if itself and following method definitions are inside a eval 4037s 4037s Module#public without arguments within a closure 4037s - sets the visibility outside the closure 4037s 4037s Module#refine 4037s - runs its block in an anonymous module 4037s - uses the same anonymous module for future refines of the same class 4037s - adds methods defined in its block to the anonymous module's public instance methods 4037s - returns created anonymous module 4037s - raises ArgumentError if not passed an argument 4037s - raises TypeError if not passed a class 4037s - accepts a module as argument 4037s - applies refinements to the module 4037s - raises ArgumentError if not given a block 4037s - applies refinements to calls in the refine block 4037s - doesn't apply refinements outside the refine block 4037s - does not apply refinements to external scopes not using the module 4037s - makes available all refinements from the same module 4037s - does not make available methods from another refinement module 4037s - does not override methods in subclasses 4037s - and alias aliases a method within a refinement module, but not outside it 4037s - and alias_method aliases a method within a refinement module, but not outside it 4037s - and instance_methods returns a list of methods including those of the refined module 4037s - does not list methods defined only in refinement 4037s 4037s Module#refine method lookup 4037s - looks in the object singleton class first 4039s - looks in the included modules for builtin methods 4039s - looks in later included modules of the refined module first 4039s - looks in the class then 4039s 4039s Module#refine for methods accessed indirectly 4039s - is honored by Kernel#send 4039s - is honored by BasicObject#__send__ 4039s - is honored by Symbol#to_proc 4039s - is honored by Kernel#public_send 4039s - is honored by string interpolation 4039s - is honored by Kernel#binding 4039s - is honored by Kernel#method 4039s - is honored by Kernel#instance_method 4039s - is honored by Kernel#respond_to? 4039s 4039s Module#refine when super is called in a refinement 4039s - looks in the refined class 4039s - looks in the refined class first if called from refined method 4039s - looks only in the refined class even if there is another active refinement 4039s 4039s Module#refine module inclusion 4039s - activates all refinements from all ancestors 4039s - overrides methods of ancestors by methods in descendants 4039s 4039s Module#remove_class_variable 4039s - removes class variable 4039s - returns the value of removing class variable 4039s - removes a class variable defined in a metaclass 4039s - raises a NameError when removing class variable declared in included module 4039s - raises a NameError when passed a symbol with one leading @ 4039s - raises a NameError when passed a symbol with no leading @ 4039s - raises a NameError when an uninitialized class variable is given 4039s - is public 4039s 4039s Module#remove_const 4040s - removes the constant specified by a String or Symbol from the receiver's constant table 4040s - returns the value of the removed constant 4040s - raises a NameError and does not call #const_missing if the constant is not defined 4040s - raises a NameError and does not call #const_missing if the constant is not defined directly in the module 4040s - raises a NameError if the name does not start with a capital letter 4040s - raises a NameError if the name starts with a non-alphabetic character 4040s - raises a NameError if the name contains non-alphabetic characters except '_' 4040s - calls #to_str to convert the given name to a String 4040s - raises a TypeError if conversion to a String by calling #to_str fails 4040s - is a private method 4040s - returns nil when removing autoloaded constant 4040s - updates the constant value 4040s 4040s Module#remove_method 4040s - is a public method 4040s - removes the method from a class 4040s - removes method from subclass, but not parent 4040s - updates the method implementation 4040s - removes multiple methods with 1 call 4040s - accepts multiple arguments 4040s - does not remove any instance methods when argument not given 4040s - returns self 4040s - raises a NameError when attempting to remove method further up the inheritance tree 4040s - raises a NameError when attempting to remove a missing method 4040s 4040s Module#remove_method on frozen instance 4040s - raises a FrozenError when passed a name 4040s - raises a FrozenError when passed a missing name 4040s - raises a TypeError when passed a not name 4040s - does not raise exceptions when no arguments given 4040s 4040s Module#ruby2_keywords 4040s - marks the final hash argument as keyword hash 4040s - makes a copy of the hash and only marks the copy as keyword hash 4040s - makes a copy and unmark the Hash when calling a method taking (**kw) 4040s - applies to the underlying method and applies across aliasing 4040s - returns nil 4040s - raises NameError when passed not existing method name 4040s - accepts String as well 4040s - raises TypeError when passed not Symbol or String 4040s - prints warning when a method does not accept argument splat 4040s - prints warning when a method accepts keywords 4040s - prints warning when a method accepts keyword splat 4040s 4040s Module#singleton_class? 4040s - returns true for singleton classes 4040s - returns false for other classes 4040s 4040s Module#singleton_class? with singleton values 4040s - returns false for nil's singleton class 4040s - returns false for true's singleton class 4040s - returns false for false's singleton class 4040s 4040s Module#to_s 4040s - returns the name of the module if it has a name 4040s - returns the full constant path leading to the module 4040s - works with an anonymous module 4040s - works with an anonymous class 4040s - for the singleton class of an object of an anonymous class 4040s - for a singleton class of a module includes the module name 4040s - for a metaclass includes the class name 4040s - for objects includes class name and object ID 4040s - always show the refinement name, even if the module is named 4040s - does not call #inspect or #to_s for singleton classes 4040s 4040s Module#undef_method 4040s - is a public method 4040s - requires multiple arguments 4040s - allows multiple methods to be removed at once 4040s - does not undef any instance methods when argument not given 4040s - returns self 4040s - raises a NameError when passed a missing name for a module 4040s - raises a NameError when passed a missing name for a class 4040s - raises a NameError when passed a missing name for a singleton class 4040s - raises a NameError when passed a missing name for a metaclass 4040s 4040s Module#undef_method on frozen instance 4040s - raises a FrozenError when passed a name 4040s - raises a FrozenError when passed a missing name 4040s - raises a TypeError when passed a not name 4040s - does not raise exceptions when no arguments given 4040s 4040s Module#undef_method with symbol 4040s - removes a method defined in a class 4040s - removes a method defined in a super class 4040s - does not remove a method defined in a super class when removed from a subclass 4040s 4040s Module#undef_method with string 4040s - removes a method defined in a class 4040s - removes a method defined in a super class 4040s - does not remove a method defined in a super class when removed from a subclass 4040s 4040s Module#using 4040s - imports class refinements from module into the current class/module 4040s - accepts module as argument 4040s - accepts module without refinements 4040s - does not accept class 4040s - raises TypeError if passed something other than module 4040s - returns self 4040s - works in classes too 4040s - raises error in method scope 4040s - activates refinement even for existed objects 4040s - activates updates when refinement reopens later 4040s 4040s Module#using scope of refinement 4040s - is active until the end of current class/module 4040s - is not active before the `using` call 4040s - is not active for code defined outside the current scope 4040s - is active for method defined in a scope wherever it's called 4040s - is active for module defined via Module.new {} 4040s - is active for class defined via Class.new {} 4040s - is active for block called via instance_exec 4040s - is active for block called via instance_eval 4040s - is not active if `using` call is not evaluated 4040s - is not active when class/module reopens 4040s 4040s Mutex#lock 4040s - returns self 4040s - blocks the caller if already locked 4040s - does not block the caller if not locked 4040s - raises a ThreadError when used recursively 4040s 4040s Mutex#locked? 4040s - returns true if locked 4040s - returns false if unlocked 4040s - returns the status of the lock 4040s 4040s Mutex#owned? 4040s - is held per Fiber 4040s 4040s Mutex#owned? when unlocked 4040s - returns false 4040s 4040s Mutex#owned? when locked by the current thread 4040s - returns true 4040s 4040s Mutex#owned? when locked by another thread 4040s - returns false 4040s 4040s Mutex#sleep 4040s - raises an ArgumentError if passed a negative duration 4040s - pauses execution for approximately the duration requested 4040s - unlocks the mutex while sleeping 4040s - relocks the mutex when woken 4040s - relocks the mutex when woken by an exception being raised 4040s - returns the rounded number of seconds asleep 4040s - wakes up when requesting sleep times near or equal to zero 4040s 4040s Mutex#sleep when not locked by the current thread 4040s - raises a ThreadError 4040s - raises an ArgumentError if passed a negative duration 4040s 4040s Mutex#synchronize 4040s - wraps the lock/unlock pair in an ensure 4040s - blocks the caller if already locked 4040s - does not block the caller if not locked 4040s - blocks the caller if another thread is also in the synchronize block 4040s - is not recursive 4040s 4040s Mutex#try_lock when unlocked 4040s - returns true 4040s - locks the mutex 4040s 4040s Mutex#try_lock when locked by the current thread 4040s - returns false 4040s 4040s Mutex#try_lock when locked by another thread 4040s - returns false 4040s 4040s Mutex#unlock 4040s - raises ThreadError unless Mutex is locked 4040s - raises ThreadError unless thread owns Mutex 4040s - raises ThreadError if previously locking thread is gone 4040s 4040s NilClass#& 4040s - returns false 4040s 4040s NilClass#=== 4040s - returns true for nil 4040s - returns false for non-nil object 4040s 4040s NilClass#dup 4040s - returns self 4040s 4040s NilClass#inspect 4040s - returns the string 'nil' 4040s 4040s NilClass#=~ 4040s - returns nil matching any object 4040s - should not warn 4040s 4040s NilClass#nil? 4040s - returns true 4040s 4040s NilClass 4040s - .allocate raises a TypeError 4040s - .new is undefined 4040s 4040s NilClass#| 4040s - returns false if other is nil or false, otherwise true 4040s 4040s NilClass#rationalize 4040s - returns 0/1 4040s - ignores a single argument 4040s - raises ArgumentError when passed more than one argument 4040s 4040s NilClass#to_a 4040s - returns an empty array 4040s 4040s NilClass#to_c 4040s - returns Complex(0, 0) 4040s 4040s NilClass#to_f 4040s - returns 0.0 4040s - does not cause NilClass to be coerced to Float 4040s 4040s NilClass#to_h 4040s - returns an empty hash 4040s 4040s NilClass#to_i 4040s - returns 0 4040s - does not cause NilClass to be coerced to Integer 4040s 4040s NilClass#to_r 4040s - returns 0/1 4040s 4040s NilClass#to_s 4040s - returns the string '' 4040s - returns a frozen string 4040s - always returns the same string 4040s 4040s NilClass#^ 4040s - returns false if other is nil or false, otherwise true 4040s 4040s Numeric#abs2 4040s - returns the square of the absolute value of self 4040s - calls #* on self 4040s - returns NaN when self is NaN 4040s 4040s Numeric#abs 4040s - returns self when self is greater than 0 4040s - returns self#@- when self is less than 0 4040s 4040s Numeric#angle 4040s - returns 0 if positive 4040s - returns Pi if negative 4040s 4040s Numeric#angle with a Numeric subclass 4040s - returns 0 if self#<(0) returns false 4040s - returns Pi if self#<(0) returns true 4040s 4040s Numeric#arg 4040s - returns 0 if positive 4040s - returns Pi if negative 4040s 4040s Numeric#arg with a Numeric subclass 4040s - returns 0 if self#<(0) returns false 4040s - returns Pi if self#<(0) returns true 4040s 4040s Numeric#ceil 4040s - converts self to a Float (using #to_f) and returns the #ceil'ed result 4040s 4040s Numeric#clone 4040s - returns self 4040s - does not change frozen status 4040s - accepts optional keyword argument :freeze 4040s - raises ArgumentError if passed freeze: false 4040s - does not change frozen status if passed freeze: nil 4040s 4040s Numeric#coerce 4040s - returns [other, self] if self and other are instances of the same class 4040s - returns [other.to_f, self.to_f] if self and other are instances of different classes 4040s - raise TypeError if they are instances of different classes and other does not respond to #to_f 4040s - raises a TypeError when passed nil 4040s - raises a TypeError when passed a boolean 4040s - raises a TypeError when passed a Symbol 4040s - raises an ArgumentError when passed a non-numeric String 4040s 4040s Numeric#<=> 4040s - returns 0 if self equals other 4040s - returns nil if self does not equal other 4040s 4040s Numeric#<=> with subclasses of Numeric 4040s - is called when instances are compared with #< 4040s - is called when instances are compared with #<= 4040s - is called when instances are compared with #> 4040s - is called when instances are compared with #>= 4040s 4040s Numeric#conj 4040s - returns self 4040s 4040s Numeric#conjugate 4040s - returns self 4040s 4040s Numeric#denominator 4040s - returns 1 4040s - works with Numeric subclasses 4040s 4040s Numeric#div 4040s - calls self#/ with other, then returns the #floor'ed result 4040s - raises ZeroDivisionError for 0 4040s 4040s Numeric#divmod 4040s - returns [quotient, modulus], with quotient being obtained as in Numeric#div then #floor and modulus being obtained by calling self#- with quotient * other 4040s 4040s Numeric#dup 4040s - returns self 4040s - does not change frozen status 4040s 4040s Numeric#eql? 4040s - returns false if self's and other's types don't match 4040s - returns the result of calling self#== with other when self's and other's types match 4040s 4040s Numeric#fdiv 4040s - coerces self with #to_f 4040s - coerces other with #to_f 4040s - performs floating-point division 4040s - returns a Float 4040s - returns Infinity if other is 0 4040s - returns NaN if other is NaN 4040s 4040s Numeric#finite? 4040s - returns true by default 4040s 4040s Numeric#floor 4040s - converts self to a Float (using #to_f) and returns the #floor'ed result 4040s 4040s Numeric#i 4040s - returns a Complex object 4040s - sets the real part to 0 4040s - sets the imaginary part to self 4040s 4040s Numeric#imag 4040s - returns 0 4040s - raises an ArgumentError if given any arguments 4040s 4040s Numeric#imaginary 4040s - returns 0 4040s - raises an ArgumentError if given any arguments 4040s 4040s Numeric#infinite? 4040s - returns nil by default 4040s 4040s Numeric#integer? 4040s - returns false 4040s 4040s Numeric#magnitude 4040s - returns self when self is greater than 0 4040s - returns self#@- when self is less than 0 4040s 4040s Numeric#modulo 4040s - returns self - other * self.div(other) 4040s 4040s Numeric#% 4040s - returns self - other * self.div(other) 4040s 4040s Numeric#negative? on positive numbers 4040s - returns false 4040s 4040s Numeric#negative? on zero 4040s - returns false 4040s 4040s Numeric#negative? on negative numbers 4040s - returns true 4040s 4040s Numeric#negative? 4040s - returns true if self is less than 0 4040s - returns false if self is greater than 0 4040s 4040s Numeric#nonzero? 4040s - returns self if self#zero? is false 4040s - returns nil if self#zero? is true 4040s 4040s Numeric#numerator 4040s - converts self to a Rational object then returns its numerator 4040s - works with Numeric subclasses 4040s 4040s Numeric 4040s - includes Comparable 4040s 4040s Numeric#phase 4040s - returns 0 if positive 4040s - returns Pi if negative 4040s 4040s Numeric#phase with a Numeric subclass 4040s - returns 0 if self#<(0) returns false 4040s - returns Pi if self#<(0) returns true 4040s 4040s Numeric#polar 4040s - returns a two-element Array 4040s - sets the first value to the absolute value of self 4040s - sets the last value to 0 if self is positive 4040s - sets the last value to Pi if self is negative 4040s - returns [NaN, NaN] if self is NaN 4040s 4040s Numeric#positive? on positive numbers 4040s - returns true 4040s 4040s Numeric#positive? on zero 4040s - returns false 4040s 4040s Numeric#positive? on negative numbers 4040s - returns false 4040s 4040s Numeric#positive? 4040s - returns true if self is greater than 0 4040s - returns false if self is less than 0 4040s 4040s Numeric#quo 4040s - returns the result of self divided by the given Integer as a Rational 4040s - returns the result of self divided by the given Float as a Float 4040s - returns the result of self divided by the given Bignum as a Float 4040s - raises a ZeroDivisionError when the given Integer is 0 4040s - calls #to_r to convert the object to a Rational 4040s - raises a TypeError of #to_r does not return a Rational 4040s - raises a TypeError when given a non-Integer 4040s - returns the result of calling self#/ with other 4040s - raises a ZeroDivisionError if the given argument is zero and not a Float 4040s - returns infinity if the given argument is zero and is a Float 4040s 4040s Numeric#real 4040s - returns self 4040s - raises an ArgumentError if given any arguments 4040s 4040s Numeric#real? 4040s - returns true 4040s 4040s Numeric#rect 4040s - returns an Array 4040s - returns a two-element Array 4040s - returns self as the first element 4040s - returns 0 as the last element 4040s - raises an ArgumentError if given any arguments 4040s 4040s Numeric#rectangular 4040s - returns an Array 4040s - returns a two-element Array 4040s - returns self as the first element 4040s - returns 0 as the last element 4040s - raises an ArgumentError if given any arguments 4040s 4040s Numeric#remainder 4040s - returns the result of calling self#% with other if self is 0 4040s - returns the result of calling self#% with other if self and other are greater than 0 4040s - returns the result of calling self#% with other if self and other are less than 0 4040s - returns the result of calling self#% with other - other if self is greater than 0 and other is less than 0 4040s - returns the result of calling self#% with other - other if self is less than 0 and other is greater than 0 4040s 4040s Numeric#round 4040s - converts self to a Float (using #to_f) and returns the #round'ed result 4040s 4040s Numeric#singleton_method_added 4040s - raises a TypeError when trying to define a singleton method on a Numeric 4040s 4040s Numeric#step with positional args 4040s - raises an ArgumentError when step is 0 4040s - raises an ArgumentError when step is 0.0 4040s - defaults to step = 1 4040s - defaults to an infinite limit with a step size of 1 for Integers 4040s - defaults to an infinite limit with a step size of 1.0 for Floats 4040s - does not rescue ArgumentError exceptions 4040s - does not rescue TypeError exceptions 4040s 4040s Numeric#step with positional args when self, stop and step are Integers 4040s - yields only Integers 4040s 4040s Numeric#step with positional args when self, stop and step are Integers with a positive step 4040s - yields while increasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s 4040s Numeric#step with positional args when self, stop and step are Integers with a negative step 4040s - yields while decreasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s 4040s Numeric#step with positional args when at least one of self, stop or step is a Float 4040s - yields Floats even if only self is a Float 4040s - yields Floats even if only stop is a Float 4040s - yields Floats even if only step is a Float 4040s 4040s Numeric#step with positional args when at least one of self, stop or step is a Float with a positive step 4040s - yields while increasing self by step while < stop 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s - is careful about not yielding a value greater than limit 4040s 4040s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative step 4040s - yields while decreasing self by step while self > stop 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s - is careful about not yielding a value smaller than limit 4040s 4040s Numeric#step with positional args when at least one of self, stop or step is a Float with a positive Infinity step 4040s - yields once if self < stop 4040s - yields once when stop is Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is -Infinity 4040s 4040s Numeric#step with positional args when at least one of self, stop or step is a Float with a negative Infinity step 4040s - yields once if self > stop 4040s - yields once if stop is -Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is Infinity 4040s 4040s 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 4040s - does not yield when self is infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s - does not yield when self is positive infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s Numeric#step with positional args when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with positional args when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with positional args when no block is given 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 4040s - returns an Enumerator::ArithmeticSequence that uses the given step 4040s 4040s Numeric#step with positional args when no block is given when step is a String with self and stop as Integers 4040s - returns an Enumerator 4040s 4040s Numeric#step with positional args when no block is given when step is a String with self and stop as Floats 4040s - returns an Enumerator 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s - returns 1 if step is infinity_value 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s - returns 1 if step is infinity_value 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when stop is not passed 4040s - returns infinity_value 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator size when stop is nil 4040s - returns infinity_value 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator::ArithmeticSequence size 4040s - defaults to an infinite size 4040s 4040s Numeric#step with positional args when no block is given returned Enumerator::ArithmeticSequence type 4040s - returns an instance of Enumerator::ArithmeticSequence 4040s 4040s Numeric#step with keyword arguments 4040s - defaults to step = 1 4040s - defaults to an infinite limit with a step size of 1 for Integers 4040s - defaults to an infinite limit with a step size of 1.0 for Floats 4040s - does not rescue ArgumentError exceptions 4040s - does not rescue TypeError exceptions 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size 4040s - should return infinity_value when limit is nil 4040s - should return infinity_value when ascending towards a limit of Float::INFINITY 4040s - should return infinity_value when descending towards a limit of -Float::INFINITY 4040s - should return 1 when the both limit and step are Float::INFINITY 4040s - should return 1 when the both limit and step are -Float::INFINITY 4040s 4040s Numeric#step with keyword arguments when self, stop and step are Integers 4040s - yields only Integers 4040s 4040s Numeric#step with keyword arguments when self, stop and step are Integers with a positive step 4040s - yields while increasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s 4040s Numeric#step with keyword arguments when self, stop and step are Integers with a negative step 4040s - yields while decreasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s 4040s Numeric#step with keyword arguments when at least one of self, stop or step is a Float 4040s - yields Floats even if only self is a Float 4040s - yields Floats even if only stop is a Float 4040s - yields Floats even if only step is a Float 4040s 4040s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a positive step 4040s - yields while increasing self by step while < stop 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s - is careful about not yielding a value greater than limit 4040s 4040s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative step 4040s - yields while decreasing self by step while self > stop 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s - is careful about not yielding a value smaller than limit 4040s 4040s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a positive Infinity step 4040s - yields once if self < stop 4040s - yields once when stop is Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is -Infinity 4040s 4040s Numeric#step with keyword arguments when at least one of self, stop or step is a Float with a negative Infinity step 4040s - yields once if self > stop 4040s - yields once if stop is -Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is Infinity 4040s 4040s 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 4040s - does not yield when self is infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s - does not yield when self is positive infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s Numeric#step with keyword arguments when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with keyword arguments when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with keyword arguments when no block is given 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 4040s - returns an Enumerator::ArithmeticSequence that uses the given step 4040s 4040s Numeric#step with keyword arguments when no block is given when step is a String with self and stop as Integers 4040s - returns an Enumerator 4040s 4040s Numeric#step with keyword arguments when no block is given when step is a String with self and stop as Floats 4040s - returns an Enumerator 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s - returns 1 if step is infinity_value 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s - returns 1 if step is infinity_value 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when stop is not passed 4040s - returns infinity_value 4040s 4040s Numeric#step with keyword arguments when no block is given returned Enumerator size when stop is nil 4040s - returns infinity_value 4040s 4040s Numeric#step with mixed arguments 4040s - raises an ArgumentError when step is 0 4040s - raises an ArgumentError when step is 0.0 4040s - raises a ArgumentError when limit and to are defined 4040s - raises a ArgumentError when step and by are defined 4040s - defaults to step = 1 4040s - defaults to an infinite limit with a step size of 1 for Integers 4040s - defaults to an infinite limit with a step size of 1.0 for Floats 4040s - does not rescue ArgumentError exceptions 4040s - does not rescue TypeError exceptions 4040s 4040s Numeric#step with mixed arguments when self, stop and step are Integers 4040s - yields only Integers 4040s 4040s Numeric#step with mixed arguments when self, stop and step are Integers with a positive step 4040s - yields while increasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s 4040s Numeric#step with mixed arguments when self, stop and step are Integers with a negative step 4040s - yields while decreasing self by step until stop is reached 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s 4040s Numeric#step with mixed arguments when at least one of self, stop or step is a Float 4040s - yields Floats even if only self is a Float 4040s - yields Floats even if only stop is a Float 4040s - yields Floats even if only step is a Float 4040s 4040s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a positive step 4040s - yields while increasing self by step while < stop 4040s - yields once when self equals stop 4040s - does not yield when self is greater than stop 4040s - is careful about not yielding a value greater than limit 4040s 4040s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative step 4040s - yields while decreasing self by step while self > stop 4040s - yields once when self equals stop 4040s - does not yield when self is less than stop 4040s - is careful about not yielding a value smaller than limit 4040s 4040s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a positive Infinity step 4040s - yields once if self < stop 4040s - yields once when stop is Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is -Infinity 4040s 4040s Numeric#step with mixed arguments when at least one of self, stop or step is a Float with a negative Infinity step 4040s - yields once if self > stop 4040s - yields once if stop is -Infinity 4040s - yields once when self equals stop 4040s - yields once when self and stop are Infinity 4040s - does not yield when self > stop 4040s - does not yield when stop is Infinity 4040s 4040s 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 4040s - does not yield when self is infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s - does not yield when self is positive infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s 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 4040s - does not yield when self is negative infinity 4040s 4040s Numeric#step with mixed arguments when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with mixed arguments when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with mixed arguments when no block is given 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self > stop 4040s - returns an Enumerator::ArithmeticSequence when not passed a block and self < stop 4040s - returns an Enumerator::ArithmeticSequence that uses the given step 4040s 4040s Numeric#step with mixed arguments when no block is given when step is a String with self and stop as Integers 4040s - returns an Enumerator 4040s 4040s Numeric#step with mixed arguments when no block is given when step is a String with self and stop as Floats 4040s - returns an Enumerator 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when step is a String with self and stop as Integers 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when step is a String with self and stop as Floats 4040s - raises an ArgumentError when step is a numeric representation 4040s - raises an ArgumentError with step as an alphanumeric string 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is positive 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when self, stop and step are Integers and step is negative 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value > limit 4040s - returns 1 if step is infinity_value 4040s 4040s 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 4040s - returns the difference between self and stop divided by the number of steps 4040s - returns 0 if value < limit 4040s - returns 1 if step is infinity_value 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when stop is not passed 4040s - returns infinity_value 4040s 4040s Numeric#step with mixed arguments when no block is given returned Enumerator size when stop is nil 4040s - returns infinity_value 4040s 4040s Numeric#to_c 4040s - returns a Complex object 4040s - uses self as the real component 4040s - uses 0 as the imaginary component 4040s 4040s Numeric#to_int 4040s - returns self#to_i 4040s 4040s Numeric#truncate 4040s - converts self to a Float (using #to_f) and returns the #truncate'd result 4040s 4040s Numeric#-@ 4040s - returns the same value with opposite sign (integers) 4040s - returns the same value with opposite sign (floats) 4040s - returns the same value with opposite sign (two complement) 4040s 4040s Numeric#-@ with a Numeric subclass 4040s - calls #coerce(0) on self, then subtracts the second element of the result from the first 4040s 4040s Numeric#+@ 4040s - returns self 4040s 4040s Numeric#zero? 4040s - returns true if self is 0 4040s - returns false if self is not 0 4040s 4040s ObjectSpace._id2ref 4040s - converts an object id to a reference to the object 4040s - retrieves true by object_id 4040s - retrieves false by object_id 4040s - retrieves nil by object_id 4040s - retrieves a small Integer by object_id 4040s - retrieves a large Integer by object_id 4040s - retrieves a Symbol by object_id 4040s - retrieves a String by object_id 4040s - retrieves a frozen literal String by object_id 4040s - retrieves an Encoding by object_id 4040s 4040s ObjectSpace.add_finalizer 4040s - needs to be reviewed for spec completeness 4040s 4040s ObjectSpace.call_finalizer 4040s - needs to be reviewed for spec completeness 4040s 4040s ObjectSpace.count_objects 4040s - needs to be reviewed for spec completeness 4040s 4040s ObjectSpace.define_finalizer 4040s - raises an ArgumentError if the action does not respond to call 4040s - accepts an object and a proc 4040s - accepts an object and a bound method 4040s - accepts an object and a callable 4040s - accepts an object and a block 4043s - calls finalizer on process termination 4046s - warns if the finalizer has the object as the receiver 4048s - warns if the finalizer is a method bound to the receiver 4051s - warns if the finalizer was a block in the receiver 4054s - calls a finalizer at exit even if it is self-referencing 4057s - calls a finalizer at exit even if it is indirectly self-referencing 4060s - allows multiple finalizers with different 'callables' to be defined 4060s 4060s ObjectSpace.define_finalizer when $VERBOSE is nil 4063s - does not warn even if an exception is raised in finalizer 4063s 4063s ObjectSpace.finalizers 4063s - needs to be reviewed for spec completeness 4063s 4063s ObjectSpace.garbage_collect 4063s - can be invoked without any exceptions 4063s - accepts keyword arguments 4063s - ignores the supplied block 4063s - always returns nil 4063s 4063s ObjectSpace.remove_finalizer 4063s - needs to be reviewed for spec completeness 4063s 4063s ObjectSpace.undefine_finalizer 4063s - needs to be reviewed for spec completeness 4063s 4063s ObjectSpace::WeakMap#each_key 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#each_key 4063s - must take a block, except when empty 4063s 4063s ObjectSpace::WeakMap#each_pair 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#each_key 4063s - must take a block, except when empty 4063s 4063s ObjectSpace::WeakMap#each 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#each_key 4063s - must take a block, except when empty 4063s 4063s ObjectSpace::WeakMap#each_value 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#each_key 4063s - must take a block, except when empty 4063s 4063s ObjectSpace::WeakMap#[] 4063s - is faithful to the map's content 4063s - matches using identity semantics 4063s 4063s ObjectSpace::WeakMap#[]= 4063s - is correct 4063s - accepts primitive or frozen keys or values 4063s 4063s ObjectSpace::WeakMap#include? 4063s - recognizes keys in use 4063s - matches using identity semantics 4063s - reports true if the pair exists and the value is nil 4063s 4063s ObjectSpace::WeakMap#inspect 4063s - displays object pointers in output 4063s 4063s ObjectSpace::WeakMap#key? 4063s - recognizes keys in use 4063s - matches using identity semantics 4063s - reports true if the pair exists and the value is nil 4063s 4063s ObjectSpace::WeakMap#keys 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#length 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#member? 4063s - recognizes keys in use 4063s - matches using identity semantics 4063s - reports true if the pair exists and the value is nil 4063s 4063s ObjectSpace::WeakMap#size 4063s - is correct 4063s 4063s ObjectSpace::WeakMap#values 4063s - is correct 4063s 4063s Proc.allocate 4063s - raises a TypeError 4063s 4063s Proc#arity for instances created with -> () { } returns zero 4063s - for definition '@a = -> () {}' 4063s - for definition '@a = -> (&b) {}' 4063s 4063s Proc#arity for instances created with -> () { } returns positive values 4063s - for definition 4063s @a = -> (a) { } 4063s @b = -> (a, b) { } 4063s @c = -> (a, b, c) { } 4063s @d = -> (a, b, c, d) { } 4063s - for definition 4063s @a = -> (a:) { } 4063s @b = -> (a:, b:) { } 4063s @c = -> (a: 1, b:, c:, d: 2) { } 4063s - for definition 4063s @a = -> (a, b:) { } 4063s @b = -> (a, b:, &l) { } 4063s - for definition 4063s @a = -> (a, b, c:, d: 1) { } 4063s @b = -> (a, b, c:, d: 1, **k, &l) { } 4063s - for definition 4063s @a = -> ((a, (*b, c))) { } 4063s @b = -> (a, (*b, c), d, (*e), (*)) { } 4063s 4063s Proc#arity for instances created with -> () { } returns negative values 4063s - for definition 4063s @a = -> (a=1) { } 4063s @b = -> (a=1, b=2) { } 4063s - for definition 4063s @a = -> (a, b=1) { } 4063s @b = -> (a, b, c=1, d=2) { } 4063s - for definition 4063s @a = -> (a=1, *b) { } 4063s @b = -> (a=1, b=2, *c) { } 4063s - for definition 4063s @a = -> (*) { } 4063s @b = -> (*a) { } 4063s - for definition 4063s @a = -> (a, *) { } 4063s @b = -> (a, *b) { } 4063s @c = -> (a, b, *c) { } 4063s @d = -> (a, b, c, *d) { } 4063s - for definition 4063s @a = -> (*a, b) { } 4063s @b = -> (*a, b, c) { } 4063s @c = -> (*a, b, c, d) { } 4063s - for definition 4063s @a = -> (a, *b, c) { } 4063s @b = -> (a, b, *c, d, e) { } 4063s - for definition 4063s @a = -> (a, b=1, c=2, *d, e, f) { } 4063s @b = -> (a, b, c=1, *d, e, f, g) { } 4063s - for definition 4063s @a = -> (a: 1) { } 4063s @b = -> (a: 1, b: 2) { } 4063s - for definition 4063s @a = -> (a=1, b: 2) { } 4063s @b = -> (*a, b: 1) { } 4063s @c = -> (a=1, b: 2) { } 4063s @d = -> (a=1, *b, c: 2, &l) { } 4063s - for definition 4063s @a = -> (**k, &l) { } 4063s @b= -> (*a, **k) { } 4063s @c = ->(a: 1, b: 2, **k) { } 4063s - for definition '@a = -> (a=1, *b, c:, d: 2, **k, &l) { }' 4063s - for definition 4063s @a = -> (a, b=1, *c, d, e:, f: 2, **k, &l) { } 4063s @b = -> (a, b=1, *c, d:, e:, f: 2, **k, &l) { } 4063s @c = -> (a=0, b=1, *c, d, e:, f: 2, **k, &l) { } 4063s @d = -> (a=0, b=1, *c, d:, e:, f: 2, **k, &l) { } 4063s 4063s Proc#arity for instances created with lambda { || } returns zero 4063s - for definition 4063s @a = lambda { } 4063s @b = lambda { || } 4063s - for definition '@a = lambda { |&b| }' 4063s 4063s Proc#arity for instances created with lambda { || } returns positive values 4063s - for definition 4063s @a = lambda { |a| } 4063s @b = lambda { |a, b| } 4063s @c = lambda { |a, b, c| } 4063s @d = lambda { |a, b, c, d| } 4063s - for definition 4063s @a = lambda { |a:| } 4063s @b = lambda { |a:, b:| } 4063s @c = lambda { |a: 1, b:, c:, d: 2| } 4063s - for definition 4063s @a = lambda { |a, b:| } 4063s @b = lambda { |a, b:, &l| } 4063s - for definition 4063s @a = lambda { |a, b, c:, d: 1| } 4063s @b = lambda { |a, b, c:, d: 1, **k, &l| } 4063s 4063s Proc#arity for instances created with lambda { || } returns negative values 4063s - for definition 4063s @a = lambda { |a=1| } 4063s @b = lambda { |a=1, b=2| } 4063s - for definition 4063s @a = lambda { |a, b=1| } 4063s @b = lambda { |a, b, c=1, d=2| } 4063s - for definition 4063s @a = lambda { |a=1, *b| } 4063s @b = lambda { |a=1, b=2, *c| } 4063s - for definition 4063s @a = lambda { |*| } 4063s @b = lambda { |*a| } 4063s - for definition 4063s @a = lambda { |a, *| } 4063s @b = lambda { |a, *b| } 4063s @c = lambda { |a, b, *c| } 4063s @d = lambda { |a, b, c, *d| } 4063s - for definition 4063s @a = lambda { |*a, b| } 4063s @b = lambda { |*a, b, c| } 4063s @c = lambda { |*a, b, c, d| } 4063s - for definition 4063s @a = lambda { |a, *b, c| } 4063s @b = lambda { |a, b, *c, d, e| } 4063s - for definition 4063s @a = lambda { |a, b=1, c=2, *d, e, f| } 4063s @b = lambda { |a, b, c=1, *d, e, f, g| } 4063s - for definition 4063s @a = lambda { |a: 1| } 4063s @b = lambda { |a: 1, b: 2| } 4063s - for definition 4063s @a = lambda { |a=1, b: 2| } 4063s @b = lambda { |*a, b: 1| } 4063s @c = lambda { |a=1, b: 2| } 4063s @d = lambda { |a=1, *b, c: 2, &l| } 4063s - for definition 4063s @a = lambda { |**k, &l| } 4063s @b = lambda { |*a, **k| } 4063s @c = lambda { |a: 1, b: 2, **k| } 4063s - for definition '@a = lambda { |a=1, *b, c:, d: 2, **k, &l| }' 4063s - for definition 4063s @a = lambda { |(a, (*b, c)), d=1| } 4063s @b = lambda { |a, (*b, c), d, (*e), (*), **k| } 4063s @c = lambda { |a, (b, c), *, d:, e: 2, **| } 4063s - for definition 4063s @a = lambda { |a, b=1, *c, d, e:, f: 2, **k, &l| } 4063s @b = lambda { |a, b=1, *c, d:, e:, f: 2, **k, &l| } 4063s @c = lambda { |a=0, b=1, *c, d, e:, f: 2, **k, &l| } 4063s @d = lambda { |a=0, b=1, *c, d:, e:, f: 2, **k, &l| } 4063s 4063s Proc#arity for instances created with proc { || } returns zero 4063s - for definition 4063s @a = proc { } 4063s @b = proc { || } 4063s - for definition '@a = proc { |&b| }' 4063s - for definition 4063s @a = proc { |a=1| } 4063s @b = proc { |a=1, b=2| } 4063s - for definition 4063s @a = proc { |a: 1| } 4063s @b = proc { |a: 1, b: 2| } 4063s - for definition 4063s @a = proc { |**k, &l| } 4063s @b = proc { |a: 1, b: 2, **k| } 4063s - for definition 4063s @a = proc { |a=1, b: 2| } 4063s @b = proc { |a=1, b: 2| } 4063s 4063s Proc#arity for instances created with proc { || } returns positive values 4063s - for definition 4063s @a = proc { |a| } 4063s @b = proc { |a, b| } 4063s @c = proc { |a, b, c| } 4063s @d = proc { |a, b, c, d| } 4063s - for definition 4063s @a = proc { |a, b=1| } 4063s @b = proc { |a, b, c=1, d=2| } 4063s - for definition 4063s @a = lambda { |a:| } 4063s @b = lambda { |a:, b:| } 4063s @c = lambda { |a: 1, b:, c:, d: 2| } 4063s - for definition 4063s @a = proc { |a, b:| } 4063s @b = proc { |a, b:, &l| } 4063s - for definition 4063s @a = proc { |a, b, c:, d: 1| } 4063s @b = proc { |a, b, c:, d: 1, **k, &l| } 4063s - for definition 4063s @a = proc { |(a, (*b, c)), d=1| } 4063s @b = proc { |a, (*b, c), d, (*e), (*), **k| } 4063s 4063s Proc#arity for instances created with proc { || } returns negative values 4063s - for definition 4063s @a = proc { |a=1, *b| } 4063s @b = proc { |a=1, b=2, *c| } 4063s - for definition 4063s @a = proc { |*| } 4063s @b = proc { |*a| } 4063s - for definition 4063s @a = proc { |a, *| } 4063s @b = proc { |a, *b| } 4063s @c = proc { |a, b, *c| } 4063s @d = proc { |a, b, c, *d| } 4063s - for definition 4063s @a = proc { |*a, b| } 4063s @b = proc { |*a, b, c| } 4063s @c = proc { |*a, b, c, d| } 4063s - for definition 4063s @a = proc { |a, *b, c| } 4063s @b = proc { |a, b, *c, d, e| } 4063s - for definition 4063s @a = proc { |a, b=1, c=2, *d, e, f| } 4063s @b = proc { |a, b, c=1, *d, e, f, g| } 4063s - for definition 4063s @a = proc { |*a, b: 1| } 4063s @b = proc { |a=1, *b, c: 2, &l| } 4063s - for definition '@a = proc { |*a, **k| }' 4063s - for definition '@a = proc { |a=1, *b, c:, d: 2, **k, &l| }' 4063s - for definition '@a = proc { |a, (b, c), *, d:, e: 2, **| }' 4063s - for definition 4063s @a = proc { |a, b=1, *c, d, e:, f: 2, **k, &l| } 4063s @b = proc { |a, b=1, *c, d:, e:, f: 2, **k, &l| } 4063s @c = proc { |a=0, b=1, *c, d, e:, f: 2, **k, &l| } 4063s @d = proc { |a=0, b=1, *c, d:, e:, f: 2, **k, &l| } 4063s 4063s Proc#binding 4063s - returns a Binding instance 4063s - returns the binding associated with self 4063s 4063s Proc as a block pass argument 4063s - remains the same object if re-vivified by the target method 4063s - remains the same object if reconstructed with Proc.new 4063s 4063s Proc#call 4063s - invokes self 4063s - sets self's parameters to the given values 4063s - can receive block arguments 4063s - yields to the block given at declaration and not to the block argument 4063s - can call its block argument declared with a block argument 4063s 4063s Proc#call on a Proc created with Proc.new 4063s - replaces missing arguments with nil 4063s - silently ignores extra arguments 4063s - auto-explodes a single Array argument 4063s 4063s Proc#call on a Proc created with Kernel#lambda or Kernel#proc 4063s - ignores excess arguments when self is a proc 4063s - will call #to_ary on argument and return self if return is nil 4063s - substitutes nil for missing arguments when self is a proc 4063s - raises an ArgumentError on excess arguments when self is a lambda 4063s - raises an ArgumentError on missing arguments when self is a lambda 4063s - treats a single Array argument as a single argument when self is a lambda 4063s - treats a single Array argument as a single argument when self is a proc 4063s 4063s Proc#=== 4063s - invokes self 4063s - sets self's parameters to the given values 4063s - can receive block arguments 4063s - yields to the block given at declaration and not to the block argument 4063s - can call its block argument declared with a block argument 4063s 4063s Proc#=== on a Proc created with Proc.new 4063s - replaces missing arguments with nil 4063s - silently ignores extra arguments 4063s - auto-explodes a single Array argument 4063s 4063s Proc#=== on a Proc created with Kernel#lambda or Kernel#proc 4063s - ignores excess arguments when self is a proc 4063s - will call #to_ary on argument and return self if return is nil 4063s - substitutes nil for missing arguments when self is a proc 4063s - raises an ArgumentError on excess arguments when self is a lambda 4063s - raises an ArgumentError on missing arguments when self is a lambda 4063s - treats a single Array argument as a single argument when self is a lambda 4063s - treats a single Array argument as a single argument when self is a proc 4063s 4063s Proc#clone 4063s - returns a copy of self 4063s 4063s Proc#<< 4063s - returns a Proc that is the composition of self and the passed Proc 4063s - calls passed Proc with arguments and then calls self with result 4063s - accepts any callable object 4063s - raises TypeError if passed not callable object 4063s - does not try to coerce argument with #to_proc 4063s 4063s Proc#<< composition 4063s - is a Proc 4063s - is a lambda when parameter is lambda 4063s - may accept multiple arguments 4063s - passes blocks to the second proc 4063s 4063s Proc#>> 4063s - returns a Proc that is the composition of self and the passed Proc 4063s - calls passed Proc with arguments and then calls self with result 4063s - accepts any callable object 4063s - raises TypeError if passed not callable object 4063s - does not try to coerce argument with #to_proc 4063s 4063s Proc#>> composition 4063s - is a Proc 4063s - is a Proc when other is lambda 4063s - is a lambda when self is lambda 4063s - may accept multiple arguments 4063s - passes blocks to the first proc 4063s 4063s Proc#curry 4063s - returns a Proc when called on a proc 4063s - returns a Proc when called on a lambda 4063s - calls the curried proc with the arguments if sufficient arguments have been given 4063s - returns a Proc that consumes the remainder of the arguments unless sufficient arguments have been given 4063s - can be called multiple times on the same Proc 4063s - can be passed superfluous arguments if created from a proc 4063s - raises an ArgumentError if passed superfluous arguments when created from a lambda 4063s - returns Procs with arities of -1 4063s - produces Procs that raise ArgumentError for #binding 4063s - produces Procs that return [[:rest]] for #parameters 4063s - produces Procs that return nil for #source_location 4063s - produces Procs that can be passed as the block for instance_exec 4063s - combines arguments and calculates incoming arity accurately for successively currying 4063s 4063s Proc#curry with arity argument 4063s - accepts an optional Integer argument for the arity 4063s - returns a Proc when called on a proc 4063s - returns a Proc when called on a lambda 4063s - retains the lambda-ness of the Proc on which its called 4063s - raises an ArgumentError if called on a lambda that requires more than _arity_ arguments 4063s - returns a Proc if called on a lambda that requires fewer than _arity_ arguments but may take more 4063s - raises an ArgumentError if called on a lambda that requires fewer than _arity_ arguments 4063s - calls the curried proc with the arguments if _arity_ arguments have been given 4063s - returns a Proc that consumes the remainder of the arguments when fewer than _arity_ arguments are given 4063s - can be specified multiple times on the same Proc 4063s - can be passed more than _arity_ arguments if created from a proc 4063s - raises an ArgumentError if passed more than _arity_ arguments when created from a lambda 4063s - returns Procs with arities of -1 regardless of the value of _arity_ 4063s 4063s Proc#dup 4063s - returns a copy of self 4063s 4063s Proc#[] 4063s - invokes self 4063s - sets self's parameters to the given values 4063s - can receive block arguments 4063s - yields to the block given at declaration and not to the block argument 4063s - can call its block argument declared with a block argument 4063s 4063s Proc#call on a Proc created with Proc.new 4063s - replaces missing arguments with nil 4063s - silently ignores extra arguments 4063s - auto-explodes a single Array argument 4063s 4063s Proc#call on a Proc created with Kernel#lambda or Kernel#proc 4063s - ignores excess arguments when self is a proc 4063s - will call #to_ary on argument and return self if return is nil 4063s - substitutes nil for missing arguments when self is a proc 4063s - raises an ArgumentError on excess arguments when self is a lambda 4063s - raises an ArgumentError on missing arguments when self is a lambda 4063s - treats a single Array argument as a single argument when self is a lambda 4063s - treats a single Array argument as a single argument when self is a proc 4063s 4063s Proc#[] with frozen_string_literals 4063s - doesn't duplicate frozen strings 4063s 4063s Proc#eql? 4063s - is a public method 4063s - returns true if self and other are the same object 4063s - returns true if other is a dup of the original 4063s - returns false when bodies are the same but capture env is not identical 4063s - returns false if procs are distinct but have the same body and environment 4063s - returns false if lambdas are distinct but have same body and environment 4063s - returns false if using comparing lambda to proc, even with the same body and env 4063s - returns false if other is not a Proc 4063s - returns false if self and other are both procs but have different bodies 4063s - returns false if self and other are both lambdas but have different bodies 4063s 4063s Proc#== 4063s - is a public method 4063s - returns true if self and other are the same object 4063s - returns true if other is a dup of the original 4063s - returns false when bodies are the same but capture env is not identical 4063s - returns false if procs are distinct but have the same body and environment 4063s - returns false if lambdas are distinct but have same body and environment 4063s - returns false if using comparing lambda to proc, even with the same body and env 4063s - returns false if other is not a Proc 4063s - returns false if self and other are both procs but have different bodies 4063s - returns false if self and other are both lambdas but have different bodies 4063s 4063s Proc#hash 4063s - is provided 4063s - returns an Integer 4063s - is stable 4063s 4063s Proc#inspect for a proc created with Proc.new 4063s - returns a description including file and line number 4063s - has a binary encoding 4063s 4063s Proc#inspect for a proc created with lambda 4063s - returns a description including '(lambda)' and including file and line number 4063s - has a binary encoding 4063s 4063s Proc#inspect for a proc created with proc 4063s - returns a description including file and line number 4063s - has a binary encoding 4063s 4063s Proc#inspect for a proc created with UnboundMethod#to_proc 4063s - returns a description including '(lambda)' and optionally including file and line number 4063s - has a binary encoding 4063s 4063s Proc#inspect for a proc created with Symbol#to_proc 4063s - returns a description including '(&:symbol)' 4063s - has a binary encoding 4063s 4063s Proc#lambda? 4063s - returns true if the Proc was created from a block with the lambda keyword 4063s - returns false if the Proc was created from a block with the proc keyword 4063s - returns false if the Proc was created from a block with Proc.new 4063s - is preserved when passing a Proc with & to the lambda keyword 4063s - is preserved when passing a Proc with & to the proc keyword 4063s - is preserved when passing a Proc with & to Proc.new 4063s - returns false if the Proc was created from a block with & 4063s - is preserved when the Proc was passed using & 4063s - returns true for a Method converted to a Proc 4063s - is preserved when a Proc is curried 4063s - is preserved when a curried Proc is called without enough arguments 4063s 4063s Proc.new with an associated block 4063s - returns a proc that represents the block 4063s - raises a LocalJumpError when context of the block no longer exists 4063s - returns from within enclosing method when 'return' is used in the block 4063s - returns a subclass of Proc 4063s - calls initialize on the Proc object 4063s 4063s Proc.new with an associated block called on a subclass of Proc 4063s - returns an instance of the subclass 4063s 4063s Proc.new with an associated block called on a subclass of Proc using a reified block parameter 4063s - returns an instance of the subclass 4063s 4063s Proc.new with an associated block called on a subclass of Proc that does not 'super' in 'initialize' 4063s - still constructs a functional proc 4063s 4063s Proc.new with a block argument 4063s - returns the passed proc created from a block 4063s - returns the passed proc created from a method 4063s - returns the passed proc created from a symbol 4063s 4063s Proc.new with a block argument called indirectly from a subclass 4063s - returns the passed proc created from a block 4063s - returns the passed proc created from a method 4063s - returns the passed proc created from a symbol 4063s 4063s Proc.new without a block 4063s - raises an ArgumentError 4063s - raises an ArgumentError if invoked from within a method with no block 4063s - raises an ArgumentError if invoked on a subclass from within a method with no block 4063s - raises an ArgumentError when passed no block 4063s 4063s Proc#parameters 4063s - returns an empty Array for a proc expecting no parameters 4063s - returns an Array of Arrays for a proc expecting parameters 4063s - sets the first element of each sub-Array to :opt for optional arguments 4063s - regards named parameters in procs as optional 4063s - regards optional keyword parameters in procs as optional 4063s - regards parameters with default values as optional 4063s - sets the first element of each sub-Array to :req for required arguments 4063s - regards named parameters in lambdas as required 4063s - regards keyword parameters in lambdas as required 4063s - sets the first element of each sub-Array to :rest for parameters prefixed with asterisks 4063s - sets the first element of each sub-Array to :keyrest for parameters prefixed with double asterisks 4063s - sets the first element of each sub-Array to :block for parameters prefixed with ampersands 4063s - sets the second element of each sub-Array to the name of the argument 4063s - ignores unnamed rest arguments 4063s - ignores implicit rest arguments 4063s - adds nameless rest arg for "star" argument 4063s - adds nameless keyrest arg for "double star" argument 4063s - adds block arg with name & for anonymous block argument 4063s - does not add locals as block options with a block and splat 4063s - returns all parameters defined with the name _ as _ 4063s 4063s Proc#ruby2_keywords 4063s - marks the final hash argument as keyword hash 4063s - applies to the underlying method and applies across duplication 4063s - returns self 4063s - prints warning when a proc does not accept argument splat 4063s - prints warning when a proc accepts keywords 4063s - prints warning when a proc accepts keyword splat 4063s 4063s Proc#source_location 4063s - returns an Array 4063s - sets the first value to the path of the file in which the proc was defined 4063s - sets the last value to an Integer representing the line on which the proc was defined 4063s - works even if the proc was created on the same line 4063s - returns the first line of a multi-line proc (i.e. the line containing 'proc do') 4063s - returns the location of the proc's body; not necessarily the proc itself 4063s - returns the same value for a proc-ified method as the method reports 4063s - returns nil for a core method that has been proc-ified 4063s - works for eval with a given line 4063s 4063s Proc#to_proc 4063s - returns self 4063s 4063s Proc#to_s for a proc created with Proc.new 4063s - returns a description including file and line number 4063s - has a binary encoding 4063s 4063s Proc#to_s for a proc created with lambda 4063s - returns a description including '(lambda)' and including file and line number 4063s - has a binary encoding 4063s 4063s Proc#to_s for a proc created with proc 4063s - returns a description including file and line number 4063s - has a binary encoding 4063s 4063s Proc#to_s for a proc created with UnboundMethod#to_proc 4063s - returns a description including '(lambda)' and optionally including file and line number 4063s - has a binary encoding 4063s 4063s Proc#to_s for a proc created with Symbol#to_proc 4063s - returns a description including '(&:symbol)' 4063s - has a binary encoding 4063s 4063s Proc#yield 4063s - invokes self 4063s - sets self's parameters to the given values 4063s - can receive block arguments 4063s - yields to the block given at declaration and not to the block argument 4063s - can call its block argument declared with a block argument 4063s 4063s Proc#yield on a Proc created with Proc.new 4063s - replaces missing arguments with nil 4063s - silently ignores extra arguments 4063s - auto-explodes a single Array argument 4063s 4063s Proc#yield on a Proc created with Kernel#lambda or Kernel#proc 4063s - ignores excess arguments when self is a proc 4063s - will call #to_ary on argument and return self if return is nil 4063s - substitutes nil for missing arguments when self is a proc 4063s - raises an ArgumentError on excess arguments when self is a lambda 4063s - raises an ArgumentError on missing arguments when self is a lambda 4063s - treats a single Array argument as a single argument when self is a lambda 4063s - treats a single Array argument as a single argument when self is a proc 4063s 4063s Queue#<< 4063s - adds an element to the Queue 4063s - is an error for a closed queue 4063s 4063s Queue#clear 4063s - removes all objects from the queue 4063s 4063s Queue#close 4063s - may be called multiple times 4063s - returns self 4063s 4063s Queue#closed? 4063s - returns false initially 4063s - returns true when the queue is closed 4063s 4063s Queue#deq 4063s - removes an item from the queue 4063s - returns items in the order they were added 4063s - blocks the thread until there are items in the queue 4063s - removes an item from a closed queue 4063s - converts false-ish for non_blocking to boolean 4063s - returns nil for a closed empty queue 4063s - returns nil for an empty queue that becomes closed 4063s 4063s Queue#deq in non-blocking mode 4063s - removes an item from the queue 4063s - raises a ThreadError if the queue is empty 4063s - removes an item from a closed queue 4063s - raises a ThreadError for a closed empty queue 4063s - converts true-ish non_blocking argument to true 4063s 4063s Queue#empty? 4063s - returns true on an empty Queue 4063s - returns false when Queue is not empty 4063s 4063s Queue#enq 4063s - adds an element to the Queue 4063s - is an error for a closed queue 4063s 4063s Queue#initialize 4063s - can be passed no arguments for an empty Queue 4063s - is a private method 4063s - adds all elements of the passed Enumerable to self 4063s - raises TypeError if the provided Enumerable does not respond to #to_a 4063s - raises TypeError if #to_a does not return Array 4063s 4063s Queue#initialize converts the given argument to an Array using #to_a 4063s - uses #to_a on the provided Enumerable 4063s - raises a TypeError if the given argument can't be converted to an Array 4063s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to an Array 4063s 4063s Queue#length 4063s - returns the number of elements 4063s 4063s Queue#num_waiting 4063s - reports the number of threads waiting on the queue 4063s 4063s Queue#pop 4063s - removes an item from the queue 4063s - returns items in the order they were added 4063s - blocks the thread until there are items in the queue 4063s - removes an item from a closed queue 4063s - converts false-ish for non_blocking to boolean 4063s - returns nil for a closed empty queue 4063s - returns nil for an empty queue that becomes closed 4063s 4063s Queue#pop in non-blocking mode 4063s - removes an item from the queue 4063s - raises a ThreadError if the queue is empty 4063s - removes an item from a closed queue 4063s - raises a ThreadError for a closed empty queue 4063s - converts true-ish non_blocking argument to true 4063s 4063s Queue#push 4063s - adds an element to the Queue 4063s - is an error for a closed queue 4063s 4063s Queue#shift 4063s - removes an item from the queue 4063s - returns items in the order they were added 4063s - blocks the thread until there are items in the queue 4063s - removes an item from a closed queue 4063s - converts false-ish for non_blocking to boolean 4063s - returns nil for a closed empty queue 4063s - returns nil for an empty queue that becomes closed 4063s 4063s Queue#shift in non-blocking mode 4063s - removes an item from the queue 4063s - raises a ThreadError if the queue is empty 4063s - removes an item from a closed queue 4063s - raises a ThreadError for a closed empty queue 4063s - converts true-ish non_blocking argument to true 4063s 4063s Queue#size 4063s - returns the number of elements 4063s 4063s Random#bytes 4063s - returns a String 4063s - returns a String of the length given as argument 4063s - returns a binary String 4063s - returns a random binary String 4063s - returns the same output for a given seed 4063s - returns the same numeric output for a given seed across all implementations and platforms 4063s - returns the same numeric output for a given huge seed across all implementations and platforms 4063s 4063s Random.bytes 4063s - returns a String 4063s - returns a String of the length given as argument 4063s - returns a binary String 4063s - returns a random binary String 4063s 4063s Random::DEFAULT 4063s - returns a random number generator 4067s - changes seed on reboot 4067s - refers to the Random class 4067s - is deprecated 4067s 4067s Random#== 4067s - returns true if the two objects have the same state 4067s - returns false if the two objects have different state 4067s - returns true if the two objects have the same seed 4067s - returns false if the two objects have a different seed 4067s - returns false if the other object is not a Random 4067s 4067s Random.new_seed 4067s - returns an Integer 4067s - returns an arbitrary seed value each time 4067s - is not affected by Kernel#srand 4067s 4067s Random.new 4067s - returns a new instance of Random 4067s - uses a random seed value if none is supplied 4067s - returns Random instances initialized with different seeds 4067s - accepts an Integer seed value as an argument 4067s - accepts (and truncates) a Float seed value as an argument 4067s - accepts (and converts to Integer) a Rational seed value as an argument 4067s - accepts (and converts to Integer) a Complex (without imaginary part) seed value as an argument 4067s - raises a RangeError if passed a Complex (with imaginary part) seed value as an argument 4067s 4067s Random.rand 4067s - returns a Float if no max argument is passed 4067s - returns an Integer if an Integer argument is passed 4067s - returns a Float if no max argument is passed 4067s - returns an Integer if an Integer argument is passed 4067s - returns a Float >= 0 if no max argument is passed 4067s - returns a Float < 1 if no max argument is passed 4067s - returns the same sequence for a given seed if no max argument is passed 4067s - returns an Integer >= 0 if an Integer argument is passed 4067s - returns an Integer < the max argument if an Integer argument is passed 4067s - returns the same sequence for a given seed if an Integer argument is passed 4067s - coerces arguments to Integers with #to_int 4067s 4067s Random#rand with Fixnum 4067s - returns an Integer 4067s - returns a Fixnum greater than or equal to 0 4067s - returns a Fixnum less than the argument 4067s - returns the same sequence for a given seed 4067s - eventually returns all possible values 4067s - raises an ArgumentError when the argument is 0 4067s - raises an ArgumentError when the argument is negative 4067s 4067s Random#rand with Bignum 4067s - typically returns a Bignum 4067s - returns a Bignum greater than or equal to 0 4067s - returns a Bignum less than the argument 4067s - returns the same sequence for a given seed 4067s - raises an ArgumentError when the argument is negative 4067s 4067s Random#rand with Float 4067s - returns a Float 4067s - returns a Float greater than or equal to 0.0 4067s - returns a Float less than the argument 4067s - returns the same sequence for a given seed 4067s - raises an ArgumentError when the argument is negative 4067s 4067s Random#rand with Range 4067s - returns an element from the Range 4067s - supports custom object types 4067s - returns an object that is a member of the Range 4067s - works with inclusive ranges 4067s - works with exclusive ranges 4067s - returns the same sequence for a given seed 4067s - eventually returns all possible values 4067s - considers Integers as Floats if one end point is a float 4067s - returns a float within a given float range 4067s - raises an ArgumentError when the startpoint lacks #+ and #- methods 4067s - raises an ArgumentError when the endpoint lacks #+ and #- methods 4067s 4067s Random.random_number 4067s - returns a Float if no max argument is passed 4067s - returns an Integer if an Integer argument is passed 4067s - returns a Float if no max argument is passed 4067s - returns an Integer if an Integer argument is passed 4067s 4067s Random#seed 4067s - returns an Integer 4067s - returns an arbitrary seed if the constructor was called without arguments 4067s - returns the same generated seed when repeatedly called on the same object 4067s - returns the seed given in the constructor 4067s - returns the given seed coerced with #to_int 4067s 4067s Random.srand 4067s - returns an arbitrary seed if .srand wasn't called previously with an argument and no argument is supplied this time 4067s - returns the previous argument to .srand if one was given and no argument is supplied 4067s - returns an arbitrary seed if .srand wasn't called previously with an argument and 0 is supplied this time 4067s - returns the previous argument to .srand if one was given and 0 is supplied 4067s - seeds Random.rand such that its return value is deterministic 4067s - seeds Kernel.rand such that its return value is deterministic 4067s 4067s Random.urandom 4067s - returns a String 4067s - returns a String of the length given as argument 4067s - raises an ArgumentError on a negative size 4067s - returns a binary String 4067s - returns a random binary String 4067s 4067s Range#begin 4067s - returns the first element of self 4067s 4067s Range#bsearch 4067s - returns an Enumerator when not passed a block 4067s - raises a TypeError if the block returns an Object 4067s - raises a TypeError if the block returns a String and boundaries are Integer values 4067s - raises a TypeError if the block returns a String and boundaries are Float values 4067s - raises a TypeError if the Range has Object values 4067s - raises a TypeError if the Range has String values 4067s 4067s Range#bsearch when no block is given returned Enumerator 4067s - size returns nil 4067s 4067s Range#bsearch with Integer values 4067s - returns nil for empty ranges 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with Integer values with a block returning true or false 4067s - returns nil if the block returns false for every element 4067s - returns nil if the block returns nil for every element 4067s - returns minimum element if the block returns true for every element 4067s - returns the smallest element for which block returns true 4067s - returns the last element if the block returns true for the last element 4067s 4067s Range#bsearch with Integer values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns less than zero for every element 4067s - returns nil if the block returns greater than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts (+/-)Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s 4067s Range#bsearch with Float values 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with Float values with a block returning true or false 4067s - returns nil if the block returns false for every element 4067s - returns nil if the block returns nil for every element 4067s - returns minimum element if the block returns true for every element 4067s - returns the smallest element for which block returns true 4067s - returns a boundary element if appropriate 4067s - works with infinity bounds 4067s 4067s Range#bsearch with Float values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns less than zero for every element 4067s - returns nil if the block returns greater than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts (+/-)Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s - returns an element at an index for which block returns 0 (small numbers) 4067s - returns a boundary element if appropriate 4067s - works with infinity bounds 4067s 4067s Range#bsearch with endless ranges and Integer values 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with endless ranges and Integer values with a block returning true or false 4067s - returns minimum element if the block returns true for every element 4067s - returns the smallest element for which block returns true 4067s 4067s Range#bsearch with endless ranges and Integer values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns less than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts -Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s 4067s Range#bsearch with endless ranges and Float values 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with endless ranges and Float values with a block returning true or false 4067s - returns nil if the block returns false for every element 4067s - returns nil if the block returns nil for every element 4067s - returns minimum element if the block returns true for every element 4067s - returns the smallest element for which block returns true 4067s - works with infinity bounds 4067s 4067s Range#bsearch with endless ranges and Float values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns less than zero for every element 4067s - returns nil if the block returns greater than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts (+/-)Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s - works with infinity bounds 4067s 4067s Range#bsearch with beginless ranges and Integer values 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with beginless ranges and Integer values with a block returning true or false 4067s - returns the smallest element for which block returns true 4067s 4067s Range#bsearch with beginless ranges and Integer values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns greater than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s 4067s Range#bsearch with beginless ranges and Float values 4067s - returns enumerator when block not passed 4067s 4067s Range#bsearch with beginless ranges and Float values with a block returning true or false 4067s - returns nil if the block returns true for every element 4067s - returns nil if the block returns nil for every element 4067s - returns the smallest element for which block returns true 4067s - works with infinity bounds 4067s 4067s Range#bsearch with beginless ranges and Float values with a block returning negative, zero, positive numbers 4067s - returns nil if the block returns less than zero for every element 4067s - returns nil if the block returns greater than zero for every element 4067s - returns nil if the block never returns zero 4067s - accepts (+/-)Float::INFINITY from the block 4067s - returns an element at an index for which block returns 0.0 4067s - returns an element at an index for which block returns 0 4067s - works with infinity bounds 4067s 4067s Range#=== 4067s - returns the result of calling #cover? on self 4067s - returns true if other is an element of self 4067s - returns true if other is an element of self for endless ranges 4067s - returns true if other is an element of self for beginless ranges 4067s - compares values using <=> 4067s - raises an ArgumentError without exactly one argument 4067s - returns true if argument is equal to the first value of the range 4067s - returns true if argument is equal to the last value of the range 4067s - returns true if argument is less than the last value of the range and greater than the first value 4067s - returns true if argument is sole element in the range 4067s - returns false if range is empty 4067s - returns false if the range does not contain the argument 4067s - uses the range element's <=> to make the comparison 4067s - uses a continuous inclusion test 4067s - returns true on any value if begin and end are both nil 4067s 4067s Range#=== on string elements 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s 4067s Range#=== with weird succ when included end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s - returns true if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#=== with weird succ when excluded end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#clone 4067s - duplicates the range 4067s - maintains the frozen state 4067s 4067s Range#count 4067s - returns Infinity for beginless ranges without arguments or blocks 4067s 4067s Range#cover? 4067s - returns true if other is an element of self 4067s - returns true if other is an element of self for endless ranges 4067s - returns true if other is an element of self for beginless ranges 4067s - compares values using <=> 4067s - raises an ArgumentError without exactly one argument 4067s - returns true if argument is equal to the first value of the range 4067s - returns true if argument is equal to the last value of the range 4067s - returns true if argument is less than the last value of the range and greater than the first value 4067s - returns true if argument is sole element in the range 4067s - returns false if range is empty 4067s - returns false if the range does not contain the argument 4067s - uses the range element's <=> to make the comparison 4067s - uses a continuous inclusion test 4067s - allows self to be a beginless range 4067s - allows self to be a endless range 4067s - accepts beginless range argument 4067s - accepts endless range argument 4067s - covers U+9995 in the range U+0999..U+9999 4067s 4067s Range#cover? on string elements 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s 4067s Range#cover? with weird succ when included end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s - returns true if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#cover? with weird succ when excluded end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns true if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#cover? range argument 4067s - accepts range argument 4067s - supports boundaries of different comparable types 4067s - returns false if types are not comparable 4067s - honors exclusion of right boundary (:exclude_end option) 4067s 4067s Range#dup 4067s - duplicates the range 4067s - creates an unfrozen range 4067s 4067s Range#each 4067s - passes each element to the given block by using #succ 4067s - works for non-ASCII ranges 4067s - works with endless ranges 4067s - works with String endless ranges 4067s - raises a TypeError beginless ranges 4067s - raises a TypeError if the first element does not respond to #succ 4067s - returns self 4067s - returns an enumerator when no block given 4067s - supports Time objects that respond to #succ 4067s - passes each Symbol element by using #succ 4067s 4067s Range#each when no block is given returned Enumerator 4067s - size returns the enumerable size 4067s 4067s Range#end 4067s - end returns the last element of self 4067s 4067s Range#eql? 4067s - returns true if other has same begin, end, and exclude_end? values 4067s - returns false if one of the attributes differs 4067s - returns false if other is not a Range 4067s - returns true for subclasses of Range 4067s - works for endless Ranges 4067s - returns false if the endpoints are not eql? 4067s 4067s Range#== 4067s - returns true if other has same begin, end, and exclude_end? values 4067s - returns false if one of the attributes differs 4067s - returns false if other is not a Range 4067s - returns true for subclasses of Range 4067s - works for endless Ranges 4067s - returns true if the endpoints are == 4067s - returns true if the endpoints are == for endless ranges 4067s - returns true if the endpoints are == for beginless ranges 4067s 4067s Range#exclude_end? 4067s - returns false if the range does not exclude the end value 4067s - returns true if the range excludes the end value 4067s 4067s Range#first 4067s - returns the first element of self 4067s - returns the specified number of elements from the beginning 4067s - returns an empty array for an empty Range 4067s - returns an empty array when passed zero 4067s - returns all elements in the range when count exceeds the number of elements 4067s - raises an ArgumentError when count is negative 4067s - calls #to_int to convert the argument 4067s - raises a TypeError if #to_int does not return an Integer 4067s - truncates the value when passed a Float 4067s - raises a TypeError when passed nil 4067s - raises a TypeError when passed a String 4067s - raises a RangeError when called on an beginless range 4067s 4067s Range#frozen? 4067s - is true for literal ranges 4067s - is true for Range.new 4067s - is false for instances of a subclass of Range 4067s - is false for Range.allocate 4067s 4067s Range#hash 4067s - is provided 4067s - generates the same hash values for Ranges with the same start, end and exclude_end? values 4067s - generates an Integer for the hash value 4067s 4067s Range#include? 4067s - returns true if other is an element of self 4067s - returns true if other is an element of self for endless ranges 4067s - returns true if other is an element of self for beginless ranges 4067s - compares values using <=> 4067s - raises an ArgumentError without exactly one argument 4067s - returns true if argument is equal to the first value of the range 4067s - returns true if argument is equal to the last value of the range 4067s - returns true if argument is less than the last value of the range and greater than the first value 4067s - returns true if argument is sole element in the range 4067s - returns false if range is empty 4067s - returns false if the range does not contain the argument 4067s - does not include U+9995 in the range U+0999..U+9999 4067s 4067s Range#include? on string elements 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s 4067s Range#include? with weird succ when included end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#include? with weird succ when excluded end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#include? with Time endpoints 4067s - uses cover? logic 4067s 4067s Range#initialize 4067s - is private 4067s - initializes correctly the Range object when given 2 arguments 4067s - initializes correctly the Range object when given 3 arguments 4067s - raises an ArgumentError if passed without or with only one argument 4067s - raises an ArgumentError if passed with four or more arguments 4067s - raises a FrozenError if called on an already initialized Range 4067s - raises an ArgumentError if arguments don't respond to <=> 4067s 4067s Range#inspect 4067s - provides a printable form, using #inspect to convert the start and end objects 4067s - works for endless ranges 4067s - works for beginless ranges 4067s - works for nil ... nil ranges 4067s 4067s Range#last 4067s - end returns the last element of self 4067s - returns the specified number of elements from the end 4067s - returns the specified number if elements for single element inclusive range 4067s - returns an empty array for an empty Range 4067s - returns an empty array when passed zero 4067s - returns all elements in the range when count exceeds the number of elements 4067s - raises an ArgumentError when count is negative 4067s - calls #to_int to convert the argument 4067s - raises a TypeError if #to_int does not return an Integer 4067s - truncates the value when passed a Float 4067s - raises a TypeError when passed nil 4067s - raises a TypeError when passed a String 4067s - raises a RangeError when called on an endless range 4067s 4067s Range#max 4067s - returns the maximum value in the range when called with no arguments 4067s - returns the maximum value in the Float range when called with no arguments 4067s - raises TypeError when called on an exclusive range and a non Integer value 4067s - returns nil when the endpoint is less than the start point 4067s - returns nil when the endpoint equals the start point and the range is exclusive 4067s - returns the endpoint when the endpoint equals the start point and the range is inclusive 4067s - returns nil when the endpoint is less than the start point in a Float range 4067s - returns end point when the range is Time..Time(included end point) 4067s - raises TypeError when called on a Time...Time(excluded end point) 4067s - raises RangeError when called on an endless range 4067s - returns the end point for beginless ranges 4067s - raises for an exclusive beginless range 4067s 4067s Range#max given a block 4067s - passes each pair of values in the range to the block 4067s - passes each pair of elements to the block in reversed order 4067s - calls #> and #< on the return value of the block 4067s - returns the element the block determines to be the maximum 4067s - returns nil when the endpoint is less than the start point 4067s - raises RangeError when called with custom comparison method on an beginless range 4067s 4067s Range#member? 4067s - returns true if other is an element of self 4067s - returns true if other is an element of self for endless ranges 4067s - returns true if other is an element of self for beginless ranges 4067s - compares values using <=> 4067s - raises an ArgumentError without exactly one argument 4067s - returns true if argument is equal to the first value of the range 4067s - returns true if argument is equal to the last value of the range 4067s - returns true if argument is less than the last value of the range and greater than the first value 4067s - returns true if argument is sole element in the range 4067s - returns false if range is empty 4067s - returns false if the range does not contain the argument 4067s 4067s Range#member? on string elements 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s 4067s Range#member? with weird succ when included end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#member? with weird succ when excluded end value 4067s - returns false if other is less than first element 4067s - returns true if other is equal as first element 4067s - returns true if other is matched by element.succ 4067s - returns false if other is not matched by element.succ 4067s - returns false if other is equal as last element but not matched by element.succ 4067s - returns false if other is greater than last element but matched by element.succ 4067s 4067s Range#member? with Time endpoints 4067s - uses cover? logic 4067s 4067s Range#min 4067s - returns the minimum value in the range when called with no arguments 4067s - returns the minimum value in the Float range when called with no arguments 4067s - returns nil when the start point is greater than the endpoint 4067s - returns nil when the endpoint equals the start point and the range is exclusive 4067s - returns the start point when the endpoint equals the start point and the range is inclusive 4067s - returns nil when the start point is greater than the endpoint in a Float range 4067s - returns start point when the range is Time..Time(included end point) 4067s - returns start point when the range is Time...Time(excluded end point) 4067s - returns the start point for endless ranges 4067s - raises RangeError when called on an beginless range 4067s 4067s Range#min given a block 4067s - passes each pair of values in the range to the block 4067s - passes each pair of elements to the block where the first argument is the current element, and the last is the first element 4067s - calls #> and #< on the return value of the block 4067s - returns the element the block determines to be the minimum 4067s - returns nil when the start point is greater than the endpoint 4067s - raises RangeError when called with custom comparison method on an endless range 4067s 4067s Range#minmax on an inclusive range 4067s - should raise RangeError on an endless range without iterating the range 4067s - raises RangeError or ArgumentError on a beginless range 4067s - should return beginning of range if beginning and end are equal without iterating the range 4067s - should return nil pair if beginning is greater than end without iterating the range 4067s - should return the minimum and maximum values for a non-numeric range without iterating the range 4067s - should return the minimum and maximum values for a numeric range 4067s - should return the minimum and maximum values for a numeric range without iterating the range 4067s - should return the minimum and maximum values according to the provided block by iterating the range 4067s 4067s Range#minmax on an exclusive range 4067s - should raise RangeError on an endless range 4067s - should raise RangeError on a beginless range 4067s - should return nil pair if beginning and end are equal without iterating the range 4067s - should return nil pair if beginning is greater than end without iterating the range 4067s - should return the minimum and maximum values for a non-numeric range by iterating the range 4067s - should return the minimum and maximum values for a numeric range 4067s - should return the minimum and maximum values for a numeric range without iterating the range 4067s - raises TypeError if the end value is not an integer 4067s - should return the minimum and maximum values according to the provided block by iterating the range 4067s 4067s Range.new 4067s - constructs a range using the given start and end 4067s - includes the end object when the third parameter is omitted or false 4067s - raises an ArgumentError when the given start and end can't be compared by using #<=> 4067s - does not rescue exception raised in #<=> when compares the given start and end 4067s 4067s Range.new beginless/endless range 4067s - allows beginless left boundary 4067s - distinguishes ranges with included and excluded right boundary 4067s - allows endless right boundary 4067s - distinguishes ranges with included and excluded right boundary 4067s - creates a frozen range if the class is Range.class 4067s - does not create a frozen range if the class is not Range.class 4067s 4067s Range#% 4067s - works as a Range#step 4067s - produces an arithmetic sequence with a percent sign in #inspect 4067s 4067s Range 4067s - includes Enumerable 4067s 4067s Range#size 4067s - returns the number of elements in the range 4067s - returns 0 if last is less than first 4067s - returns Float::INFINITY for increasing, infinite ranges 4067s - returns Float::INFINITY for endless ranges if the start is numeric 4067s - returns nil for endless ranges if the start is not numeric 4067s - returns Float::INFINITY for all beginless ranges 4067s - returns nil if first and last are not Numeric 4067s 4067s Range#step 4067s - returns self 4067s - raises TypeError if step 4067s - calls #to_int to coerce step to an Integer 4067s - raises a TypeError if step does not respond to #to_int 4067s - raises a TypeError if #to_int does not return an Integer 4067s - coerces the argument to integer by invoking to_int 4067s - raises a TypeError if the first element does not respond to #succ 4067s - raises an ArgumentError if step is 0 4067s - raises an ArgumentError if step is 0.0 4067s - raises an ArgumentError if step is negative 4067s 4067s Range#step with inclusive end and Integer values 4067s - yields Integer values incremented by 1 and less than or equal to end when not passed a step 4067s - yields Integer values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with inclusive end and Float values 4067s - yields Float values incremented by 1 and less than or equal to end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s - returns Float values of 'step * n + begin <= end' 4067s - handles infinite values at either end 4067s 4067s Range#step with inclusive end and Integer, Float values 4067s - yields Float values incremented by 1 and less than or equal to end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with inclusive end and Float, Integer values 4067s - yields Float values incremented by 1 and less than or equal to end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with inclusive end and String values 4067s - yields String values incremented by #succ and less than or equal to end when not passed a step 4067s - yields String values incremented by #succ called Integer step times 4067s - raises a TypeError when passed a Float step 4067s - calls #succ on begin and each element returned by #succ 4067s 4067s Range#step with exclusive end and Integer values 4067s - yields Integer values incremented by 1 and less than end when not passed a step 4067s - yields Integer values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with exclusive end and Float values 4067s - yields Float values incremented by 1 and less than end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s - returns Float values of 'step * n + begin < end' 4067s - correctly handles values near the upper limit 4067s - handles infinite values at either end 4067s 4067s Range#step with exclusive end and Integer, Float values 4067s - yields Float values incremented by 1 and less than end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields an Float and then Float values incremented by a Float step 4067s 4067s Range#step with exclusive end and Float, Integer values 4067s - yields Float values incremented by 1 and less than end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with exclusive end and String values 4067s - yields String values incremented by #succ and less than or equal to end when not passed a step 4067s - yields String values incremented by #succ called Integer step times 4067s - raises a TypeError when passed a Float step 4067s 4067s Range#step with an endless range and Integer values 4067s - yield Integer values incremented by 1 when not passed a step 4067s - yields Integer values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s 4067s Range#step with an endless range and Float values 4067s - yields Float values incremented by 1 and less than end when not passed a step 4067s - yields Float values incremented by an Integer step 4067s - yields Float values incremented by a Float step 4067s - handles infinite values at the start 4067s 4067s Range#step with an endless range and String values 4067s - yields String values incremented by #succ and less than or equal to end when not passed a step 4067s - yields String values incremented by #succ called Integer step times 4067s - raises a TypeError when passed a Float step 4067s 4067s Range#step when no block is given 4067s - raises an ArgumentError if step is 0 4067s 4067s Range#step when no block is given returned Enumerator size 4067s - raises a TypeError if step does not respond to #to_int 4067s - raises a TypeError if #to_int does not return an Integer 4067s - returns the ceil of range size divided by the number of steps 4067s - returns the ceil of range size divided by the number of steps even if step is negative 4067s - returns the correct number of steps when one of the arguments is a float 4067s - returns the range size when there's no step_size 4067s - returns nil with begin and end are String 4067s - return nil and not raises a TypeError if the first element does not respond to #succ 4067s 4067s Range#step when no block is given returned Enumerator type when both begin and end are numerics 4067s - returns an instance of Enumerator::ArithmeticSequence 4067s 4067s Range#step when no block is given returned Enumerator type when begin is not defined and end is numeric 4067s - returns an instance of Enumerator::ArithmeticSequence 4067s 4067s Range#step when no block is given returned Enumerator type when range is endless 4067s - returns an instance of Enumerator::ArithmeticSequence when begin is numeric 4067s - returns an instance of Enumerator when begin is not numeric 4067s 4067s Range#step when no block is given returned Enumerator type when range is beginless and endless 4067s - returns an instance of Enumerator 4067s 4067s Range#step when no block is given returned Enumerator type when begin and end are not numerics 4067s - returns an instance of Enumerator 4067s 4067s Range#to_a 4067s - converts self to an array 4067s - returns empty array for descending-ordered 4067s - works with Ranges of 64-bit integers 4067s - works with Ranges of Symbols 4067s - works for non-ASCII ranges 4067s - throws an exception for endless ranges 4067s - throws an exception for beginless ranges 4067s 4067s Range#to_s 4067s - provides a printable form of self 4067s - can show endless ranges 4067s - can show beginless ranges 4067s 4067s Rational#abs 4067s - returns self's absolute value 4067s 4067s Rational#ceil with no arguments (precision = 0) 4067s - returns an Integer 4067s - returns the truncated value toward positive infinity 4067s 4067s Rational#ceil with a precision < 0 4067s - returns an Integer 4067s - moves the truncation point n decimal places left 4067s 4067s Rational#ceil with precision > 0 4067s - returns a Rational 4067s - moves the truncation point n decimal places right 4067s 4067s Rational#coerce 4067s - returns the passed argument, self as Float, when given a Float 4067s - returns the passed argument, self as Rational, when given an Integer 4067s - coerces to Rational, when given a Complex 4067s - returns [argument, self] when given a Rational 4067s - raises an error when passed a BigDecimal 4067s 4067s Rational#<=> when passed a Rational object 4067s - returns 1 when self is greater than the passed argument 4067s - returns 0 when self is equal to the passed argument 4067s - returns -1 when self is less than the passed argument 4067s 4067s Rational#<=> when passed an Integer object 4067s - returns 1 when self is greater than the passed argument 4067s - returns 0 when self is equal to the passed argument 4067s - returns -1 when self is less than the passed argument 4067s 4067s Rational#<=> when passed a Float object 4067s - returns 1 when self is greater than the passed argument 4067s - returns 0 when self is equal to the passed argument 4067s - returns -1 when self is less than the passed argument 4067s 4067s Rational#<=> when passed an Object that responds to #coerce 4067s - calls #coerce on the passed argument with self 4067s - calls #<=> on the coerced Rational with the coerced Object 4067s - does not rescue exception raised in other#coerce 4067s 4067s Rational#<=> when passed a non-Numeric Object that doesn't respond to #coerce 4067s - returns nil 4067s 4067s Rational#denominator 4067s - returns the denominator 4067s - returns 1 if no denominator was given 4067s 4067s Rational#div 4067s - returns an Integer 4067s - raises an ArgumentError if passed more than one argument 4067s - raises a TypeError if passed a non-numeric argument 4067s 4067s Rational#div passed a Rational 4067s - performs integer division and returns the result 4067s - raises a ZeroDivisionError when the argument has a numerator of 0 4067s - raises a ZeroDivisionError when the argument has a numerator of 0.0 4067s 4067s Rational#div passed an Integer 4067s - performs integer division and returns the result 4067s - raises a ZeroDivisionError when the argument is 0 4067s 4067s Rational#div passed a Float 4067s - performs integer division and returns the result 4067s - raises a ZeroDivisionError when the argument is 0.0 4067s 4067s Rational#/ 4067s - calls #coerce on the passed argument with self 4067s - calls #/ on the coerced Rational with the coerced Object 4067s - does not rescue exception raised in other#coerce 4067s 4067s Rational#/ when passed an Integer 4067s - returns self divided by other as a Rational 4067s - raises a ZeroDivisionError when passed 0 4067s 4067s Rational#/ when passed a Rational 4067s - returns self divided by other as a Rational 4067s - raises a ZeroDivisionError when passed a Rational with a numerator of 0 4067s 4067s Rational#/ when passed a Float 4067s - returns self divided by other as a Float 4067s - returns infinity when passed 0 4067s 4067s Rational#divmod when passed a Rational 4067s - returns the quotient as Integer and the remainder as Rational 4067s - raises a ZeroDivisionError when passed a Rational with a numerator of 0 4067s 4067s Rational#divmod when passed an Integer 4067s - returns the quotient as Integer and the remainder as Rational 4067s - raises a ZeroDivisionError when passed 0 4067s 4067s Rational#divmod when passed a Float 4067s - returns the quotient as Integer and the remainder as Float 4067s - returns the quotient as Integer and the remainder as Float 4067s - raises a ZeroDivisionError when passed 0 4067s 4067s Rational#== 4067s - returns the result of calling #== with self on the passed argument 4067s 4067s Rational#== when passed a Rational 4067s - returns true if self has the same numerator and denominator as the passed argument 4067s 4067s Rational#== when passed a Float 4067s - converts self to a Float and compares it with the passed argument 4067s 4067s Rational#== when passed an Integer 4067s - returns true if self has the passed argument as numerator and a denominator of 1 4067s 4067s Rational#** 4067s - calls #coerce on the passed argument with self 4067s - calls #** on the coerced Rational with the coerced Object 4067s - raises ZeroDivisionError for Rational(0, 1) passed a negative Integer 4067s - raises ZeroDivisionError for Rational(0, 1) passed a negative Rational with denominator 1 4067s - raises ZeroDivisionError for Rational(0, 1) passed a negative Rational 4067s - returns Infinity for Rational(0, 1) passed a negative Float 4067s 4067s Rational#** when passed Rational 4067s - returns Rational(1) if the exponent is Rational(0) 4067s - returns self raised to the argument as a Rational if the exponent's denominator is 1 4067s - returns self raised to the argument as a Float if the exponent's denominator is not 1 4067s - returns a complex number when self is negative and the passed argument is not 0 4067s 4067s Rational#** when passed Integer 4067s - returns the Rational value of self raised to the passed argument 4067s - returns Rational(1, 1) when the passed argument is 0 4067s 4067s Rational#** when passed Bignum 4067s - returns Rational(0) when self is Rational(0) and the exponent is positive 4067s - raises ZeroDivisionError when self is Rational(0) and the exponent is negative 4067s - returns Rational(1) when self is Rational(1) 4067s - returns Rational(1) when self is Rational(-1) and the exponent is positive and even 4067s - returns Rational(-1) when self is Rational(-1) and the exponent is positive and odd 4067s - returns positive Infinity when self is > 1 4067s - returns 0.0 when self is > 1 and the exponent is negative 4067s 4067s Rational#** when passed Float 4067s - returns self converted to Float and raised to the passed argument 4067s - returns a complex number if self is negative and the passed argument is not 0 4067s - returns Complex(1.0) when the passed argument is 0.0 4067s 4067s Rational#fdiv 4067s - needs to be reviewed for spec completeness 4067s 4067s Rational#floor with no arguments (precision = 0) 4067s - returns an integer 4067s - returns the truncated value toward negative infinity 4067s 4067s Rational#floor with a precision < 0 4067s - returns an integer 4067s - moves the truncation point n decimal places left 4067s 4067s Rational#floor with a precision > 0 4067s - returns a Rational 4067s - moves the truncation point n decimal places right 4067s 4067s Rational#hash 4067s - is static 4067s 4067s Rational#inspect 4067s - returns a string representation of self 4067s 4067s Rational#integer? 4067s - returns false for a rational with a numerator and no denominator 4067s - returns false for a rational with a numerator and a denominator 4067s 4067s Rational#abs 4067s - returns self's absolute value 4067s 4067s Rational#marshal_dump 4067s - is a private method 4067s - dumps numerator and denominator 4067s 4067s Rational#- 4067s - does not rescue exception raised in other#coerce 4067s - calls #coerce on the passed argument with self 4067s - calls #- on the coerced Rational with the coerced Object 4067s 4067s Rational#- passed a Rational 4067s - returns the result of subtracting other from self as a Rational 4067s 4067s Rational#- passed a Float 4067s - returns the result of subtracting other from self as a Float 4067s 4067s Rational#- passed an Integer 4067s - returns the result of subtracting other from self as a Rational 4067s 4067s Rational#% 4067s - returns the remainder when this value is divided by other 4067s - returns a Float value when the argument is Float 4067s - raises ZeroDivisionError on zero denominator 4067s - raises a ZeroDivisionError when the argument is 0.0 4067s 4067s Rational#* 4067s - calls #coerce on the passed argument with self 4067s - calls #* on the coerced Rational with the coerced Object 4067s - does not rescue exception raised in other#coerce 4067s 4067s Rational#* passed a Rational 4067s - returns self divided by other as a Rational 4067s 4067s Rational#* passed a Float 4067s - returns self divided by other as a Float 4067s 4067s Rational#* passed an Integer 4067s - returns self divided by other as a Rational 4067s 4067s Rational#numerator 4067s - returns the numerator 4067s 4067s Rational#+ 4067s - calls #coerce on the passed argument with self 4067s - calls #+ on the coerced Rational with the coerced Object 4067s - does not rescue exception raised in other#coerce 4067s 4067s Rational#+ with a Rational 4067s - returns the result of subtracting other from self as a Rational 4067s 4067s Rational#+ with a Float 4067s - returns the result of subtracting other from self as a Float 4067s 4067s Rational#+ with an Integer 4067s - returns the result of subtracting other from self as a Rational 4067s 4067s Rational#quo 4067s - calls #coerce on the passed argument with self 4067s - calls #/ on the coerced Rational with the coerced Object 4067s 4067s Rational 4067s - includes Comparable 4067s - does not respond to new 4067s 4067s Rational#rationalize 4067s - returns self with no argument 4067s - simplifies self to the degree specified by a Rational argument 4067s - simplifies self to the degree specified by a Float argument 4067s - raises ArgumentError when passed more than one argument 4067s 4067s Rational#remainder 4067s - needs to be reviewed for spec completeness 4067s 4067s Rational#round with no arguments (precision = 0) 4067s - returns an integer 4067s - returns the truncated value toward the nearest integer 4067s - returns the rounded value toward the nearest integer 4067s 4067s Rational#round with a precision < 0 4067s - returns an integer 4067s - moves the truncation point n decimal places left 4067s 4067s Rational#round with a precision > 0 4067s - returns a Rational 4067s - moves the truncation point n decimal places right 4067s - doesn't alter the value if the precision is too great 4068s - doesn't fail when rounding to an absurdly large positive precision 4068s 4068s Rational#round with half option 4068s - returns an Integer when precision is not passed 4068s - returns a Rational when the precision is greater than 0 4068s - raise for a non-existent round mode 4068s 4068s Rational#to_f 4068s - returns self converted to a Float 4068s - converts to a Float for large numerator and denominator 4068s 4068s Rational#to_i 4068s - converts self to an Integer by truncation 4068s - converts self to an Integer by truncation 4068s 4068s Rational#to_r 4068s - returns self 4068s - raises TypeError trying to convert BasicObject 4068s - works when a BasicObject has to_r 4068s - fails when a BasicObject's to_r does not return a Rational 4068s 4068s Rational#to_s 4068s - returns a string representation of self 4068s 4068s Rational#truncate with no arguments (precision = 0) 4068s - returns an integer 4068s - returns the truncated value toward 0 4068s 4068s Rational#truncate with an explicit precision = 0 4068s - returns an integer 4068s - returns the truncated value toward 0 4068s 4068s Rational#truncate with a precision < 0 4068s - returns an integer 4068s - moves the truncation point n decimal places left 4068s 4068s Rational#truncate with a precision > 0 4068s - returns a Rational 4068s - moves the truncation point n decimal places right 4068s 4068s Rational#truncate with an invalid value for precision 4068s - raises a TypeError 4068s - does not call to_int on the argument 4068s 4068s Rational#zero? 4068s - returns true if the numerator is 0 4068s - returns true if the numerator is 0.0 4068s - returns false if the numerator isn't 0 4068s 4068s Refinement#import_methods 4068s - warns if a module includes/prepends some other module 4068s - doesn't import methods from included/prepended modules 4068s - doesn't import module's class methods 4068s - imports module methods with super 4068s 4068s Refinement#import_methods when methods are defined in Ruby code 4068s - imports methods 4068s - imports methods from multiple modules 4068s - imports a method defined in the last module if method with same name is defined in multiple modules 4068s - still imports methods of modules listed before a module that contains method not defined in Ruby 4068s 4068s Refinement#import_methods when methods are not defined in Ruby code 4068s - raises ArgumentError 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:211: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:236: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:16: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:47: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:47: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:69: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:69: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:85: warning: # has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:85: warning: Kernel has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:251: warning: Kernel has ancestors, but Refinement#import_methods doesn't import their methods 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/refinement/import_methods_spec.rb:262: warning: Zlib has ancestors, but Refinement#import_methods doesn't import their methods 4068s - raises ArgumentError when importing methods from C extension 4068s 4068s Regexp#=== 4068s - is true if there is a match 4068s - is false if there is no match 4068s - returns true if it matches a Symbol 4068s - returns false if it does not match a Symbol 4068s - returns false if the other value cannot be coerced to a string 4068s - uses #to_str on string-like objects 4068s 4068s Regexp#casefold? 4068s - returns the value of the case-insensitive flag 4068s 4068s Regexp.compile 4068s - requires one argument and creates a new regular expression object 4068s - works by default for subclasses with overridden #initialize 4068s 4068s Regexp.compile given a String 4068s - uses the String argument as an unescaped literal to construct a Regexp object 4068s - raises a RegexpError when passed an incorrect regexp 4068s - does not set Regexp options if only given one argument 4068s - does not set Regexp options if second argument is nil or false 4068s - sets options from second argument if it is true 4068s - sets options from second argument if it is one of the Integer option constants 4068s - accepts an Integer of two or more options ORed together as the second argument 4068s - does not try to convert the second argument to Integer with #to_int method call 4068s - treats any non-Integer, non-nil, non-false second argument as IGNORECASE 4068s - ignores the third argument if it is 'e' or 'euc' (case-insensitive) 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/regexp/shared/new.rb:272: warning: Unknown escape \N is ignored 4068s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/regexp/shared/new.rb:360: warning: Unknown escape \N is ignored 4068s - ignores the third argument if it is 's' or 'sjis' (case-insensitive) 4068s - ignores the third argument if it is 'u' or 'utf8' (case-insensitive) 4068s - uses US_ASCII encoding if third argument is 'n' or 'none' (case insensitive) and only ascii characters 4068s - uses ASCII_8BIT encoding if third argument is 'n' or 'none' (case insensitive) and non-ascii characters 4068s 4068s Regexp.compile given a String with escaped characters 4068s - raises a Regexp error if there is a trailing backslash 4068s - does not raise a Regexp error if there is an escaped trailing backslash 4068s - accepts a backspace followed by a character 4068s - accepts a one-digit octal value 4068s - accepts a two-digit octal value 4068s - accepts a one-digit hexadecimal value 4068s - accepts a two-digit hexadecimal value 4068s - interprets a digit following a two-digit hexadecimal value as a character 4068s - raises a RegexpError if \x is not followed by any hexadecimal digits 4068s - accepts an escaped string interpolation 4068s - accepts '\n' 4068s - accepts '\t' 4068s - accepts '\r' 4068s - accepts '\f' 4068s - accepts '\v' 4068s - accepts '\a' 4068s - accepts '\e' 4068s - accepts '\C-\n' 4068s - accepts '\C-\t' 4068s - accepts '\C-\r' 4068s - accepts '\C-\f' 4068s - accepts '\C-\v' 4068s - accepts '\C-\a' 4068s - accepts '\C-\e' 4068s - accepts multiple consecutive '\' characters 4068s - accepts characters and escaped octal digits 4068s - accepts escaped octal digits and characters 4068s - accepts characters and escaped hexadecimal digits 4068s - accepts escaped hexadecimal digits and characters 4068s - accepts escaped hexadecimal and octal digits 4068s - accepts \u{H} for a single Unicode codepoint 4068s - accepts \u{HH} for a single Unicode codepoint 4068s - accepts \u{HHH} for a single Unicode codepoint 4068s - accepts \u{HHHH} for a single Unicode codepoint 4068s - accepts \u{HHHHH} for a single Unicode codepoint 4068s - accepts \u{HHHHHH} for a single Unicode codepoint 4068s - accepts characters followed by \u{HHHH} 4068s - accepts \u{HHHH} followed by characters 4068s - accepts escaped hexadecimal digits followed by \u{HHHH} 4068s - accepts escaped octal digits followed by \u{HHHH} 4068s - accepts a combination of escaped octal and hexadecimal digits and \u{HHHH} 4068s - accepts \uHHHH for a single Unicode codepoint 4068s - accepts characters followed by \uHHHH 4068s - accepts \uHHHH followed by characters 4068s - accepts escaped hexadecimal digits followed by \uHHHH 4068s - accepts escaped octal digits followed by \uHHHH 4068s - accepts a combination of escaped octal and hexadecimal digits and \uHHHH 4068s - accepts a multiple byte character which need not be escaped 4068s - raises a RegexpError if less than four digits are given for \uHHHH 4068s - raises a RegexpError if the \u{} escape is empty 4068s - raises a RegexpError if more than six hexadecimal digits are given 4068s - returns a Regexp with US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 4068s - 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 4068s - returns a Regexp with US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 4068s - returns a Regexp with source String having US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 4068s - returns a Regexp with UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 4068s - returns a Regexp with source String having UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 4068s - returns a Regexp with the input String's encoding 4068s - returns a Regexp with source String having the input String's encoding 4068s 4068s Regexp.compile given a String with escaped characters 4068s - accepts a three-digit octal value 4068s - interprets a digit following a three-digit octal value as a character 4068s - accepts '\M-\n' 4068s - accepts '\M-\t' 4068s - accepts '\M-\r' 4068s - accepts '\M-\f' 4068s - accepts '\M-\v' 4068s - accepts '\M-\a' 4068s - accepts '\M-\e' 4068s - accepts '\M-\C-\n' 4068s - accepts '\M-\C-\t' 4068s - accepts '\M-\C-\r' 4068s - accepts '\M-\C-\f' 4068s - accepts '\M-\C-\v' 4068s - accepts '\M-\C-\a' 4068s - accepts '\M-\C-\e' 4068s 4068s Regexp.compile given a Regexp 4068s - uses the argument as a literal to construct a Regexp object 4068s - preserves any options given in the Regexp literal 4068s - does not honour options given as additional arguments 4068s - sets the encoding to UTF-8 if the Regexp literal has the 'u' option 4068s - sets the encoding to EUC-JP if the Regexp literal has the 'e' option 4068s - sets the encoding to Windows-31J if the Regexp literal has the 's' option 4068s - sets the encoding to US-ASCII if the Regexp literal has the 'n' option and the source String is ASCII only 4068s - sets the encoding to source String's encoding if the Regexp literal has the 'n' option and the source String is not ASCII only 4068s 4068s Regexp.new given a non-String/Regexp 4068s - calls #to_str method for non-String/Regexp argument 4068s - raises TypeError if there is no #to_str method for non-String/Regexp argument 4068s - raises TypeError if #to_str returns non-String value 4068s 4068s Regexp#encoding 4068s - returns an Encoding object 4068s - defaults to US-ASCII if the Regexp contains only US-ASCII character 4068s - returns US_ASCII if the 'n' modifier is supplied and only US-ASCII characters are present 4068s - returns BINARY if the 'n' modifier is supplied and non-US-ASCII characters are present 4068s - defaults to UTF-8 if \u escapes appear 4068s - defaults to UTF-8 if a literal UTF-8 character appears 4068s - returns UTF-8 if the 'u' modifier is supplied 4068s - returns Windows-31J if the 's' modifier is supplied 4068s - returns EUC_JP if the 'e' modifier is supplied 4068s - upgrades the encoding to that of an embedded String 4068s - ignores the encoding and uses US-ASCII if the string has only ASCII characters 4068s - ignores the default_internal encoding 4068s - allows otherwise invalid characters if NOENCODING is specified 4068s 4068s Regexp#eql? 4068s - is true if self and other have the same pattern 4068s - is true if self and other have the same character set code 4068s - is true if other has the same #casefold? values 4068s - is true if self does not specify /n option and other does 4068s - is true if self specifies /n option and other does not 4068s 4068s Regexp#== 4068s - is true if self and other have the same pattern 4068s - is true if self and other have the same character set code 4068s - is true if other has the same #casefold? values 4068s - is true if self does not specify /n option and other does 4068s - is true if self specifies /n option and other does not 4068s 4068s Regexp.escape 4068s - escapes any characters with special meaning in a regular expression 4068s - works with symbols 4068s - works with substrings 4068s - works for broken strings 4068s - sets the encoding of the result to US-ASCII if there are only US-ASCII characters present in the input String 4068s - 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 4068s - sets the encoding of the result to BINARY if any non-US-ASCII characters are present in an input String with invalid encoding 4068s 4068s Regexp#fixed_encoding? 4068s - returns false by default 4068s - returns false if the 'n' modifier was supplied to the Regexp 4068s - returns true if the 'u' modifier was supplied to the Regexp 4068s - returns true if the 's' modifier was supplied to the Regexp 4068s - returns true if the 'e' modifier was supplied to the Regexp 4068s - returns true if the Regexp contains a \u escape 4068s - returns true if the Regexp contains a UTF-8 literal 4068s - returns true if the Regexp was created with the Regexp::FIXEDENCODING option 4068s 4068s Regexp#hash 4068s - is provided 4068s - is based on the text and options of Regexp 4068s - returns the same value for two Regexps differing only in the /n option 4068s 4068s Regexp#initialize 4068s - is a private method 4068s - raises a FrozenError on a Regexp literal 4068s - raises a TypeError on an initialized non-literal Regexp 4068s 4068s Regexp#inspect 4068s - returns a formatted string that would eval to the same regexp 4068s - returns options in the order 'mixn' 4068s - does not include the 'o' option 4068s - does not include a character set code 4068s - correctly escapes forward slashes / 4068s - doesn't over escape forward slashes 4068s - escapes 2 slashes in a row properly 4068s - does not over escape 4068s 4068s Regexp.last_match 4068s - returns MatchData instance when not passed arguments 4068s - returns the nth field in this MatchData when passed an Integer 4068s - returns nil when there is no match 4068s 4068s Regexp.last_match when given a Symbol 4068s - returns a named capture 4068s - raises an IndexError when given a missing name 4068s 4068s Regexp.last_match when given a String 4068s - returns a named capture 4068s 4068s Regexp.last_match when given an Object 4068s - coerces argument to an index using #to_int 4068s - raises a TypeError when unable to coerce 4068s 4068s Regexp#=~ 4068s - returns nil if there is no match 4068s - returns nil if the object is nil 4068s - returns the index of the first character of the matching region 4068s - returns the index too, when argument is a Symbol 4068s 4068s Regexp#match 4068s - returns nil if there is no match 4068s - returns nil if the object is nil 4068s - returns a MatchData object 4068s - returns a MatchData object, when argument is a Symbol 4068s - raises a TypeError on an uninitialized Regexp 4068s - raises TypeError on an uninitialized Regexp 4068s - resets $~ if passed nil 4068s - raises TypeError when the given argument cannot be coerced to String 4068s - raises TypeError when the given argument is an Exception 4068s 4068s Regexp#match with [string, position] when given a positive position 4068s - matches the input at a given position 4068s - uses the start as a character offset 4068s - raises an ArgumentError for an invalid encoding 4068s 4068s Regexp#match with [string, position] when given a negative position 4068s - matches the input at a given position 4068s - uses the start as a character offset 4068s - raises an ArgumentError for an invalid encoding 4068s 4068s Regexp#match with [string, position] when passed a block 4068s - yields the MatchData 4068s - returns the block result 4068s - does not yield if there is no match 4068s 4068s Regexp#match? 4068s - returns false when does not match the given value 4068s - takes matching position as the 2nd argument 4068s - returns false when given nil 4068s 4068s Regexp#match? when matches the given value 4068s - returns true but does not set Regexp.last_match 4068s 4068s Regexp#~ 4068s - matches against the contents of $_ 4068s 4068s Regexp#named_captures 4068s - returns a Hash 4068s - returns an empty Hash when there are no capture groups 4068s - sets the keys of the Hash to the names of the capture groups 4068s - sets the values of the Hash to Arrays 4068s - sets each element of the Array to the corresponding group's index 4068s - works with duplicate capture group names 4068s 4068s Regexp#names 4068s - returns an Array 4068s - returns an empty Array if there are no named captures 4068s - returns each named capture as a String 4068s - returns all of the named captures 4068s - works with nested named captures 4068s - returns each capture name only once 4068s 4068s Regexp.new 4068s - requires one argument and creates a new regular expression object 4068s - works by default for subclasses with overridden #initialize 4068s 4068s Regexp.new given a String 4068s - uses the String argument as an unescaped literal to construct a Regexp object 4068s - raises a RegexpError when passed an incorrect regexp 4068s - does not set Regexp options if only given one argument 4068s - does not set Regexp options if second argument is nil or false 4068s - sets options from second argument if it is true 4068s - sets options from second argument if it is one of the Integer option constants 4068s - accepts an Integer of two or more options ORed together as the second argument 4068s - does not try to convert the second argument to Integer with #to_int method call 4068s - treats any non-Integer, non-nil, non-false second argument as IGNORECASE 4068s - ignores the third argument if it is 'e' or 'euc' (case-insensitive) 4068s - ignores the third argument if it is 's' or 'sjis' (case-insensitive) 4068s - ignores the third argument if it is 'u' or 'utf8' (case-insensitive) 4068s - uses US_ASCII encoding if third argument is 'n' or 'none' (case insensitive) and only ascii characters 4068s - uses ASCII_8BIT encoding if third argument is 'n' or 'none' (case insensitive) and non-ascii characters 4068s 4068s Regexp.new given a String with escaped characters 4068s - raises a Regexp error if there is a trailing backslash 4068s - does not raise a Regexp error if there is an escaped trailing backslash 4068s - accepts a backspace followed by a character 4068s - accepts a one-digit octal value 4068s - accepts a two-digit octal value 4068s - accepts a one-digit hexadecimal value 4068s - accepts a two-digit hexadecimal value 4068s - interprets a digit following a two-digit hexadecimal value as a character 4068s - raises a RegexpError if \x is not followed by any hexadecimal digits 4068s - accepts an escaped string interpolation 4068s - accepts '\n' 4068s - accepts '\t' 4068s - accepts '\r' 4068s - accepts '\f' 4068s - accepts '\v' 4068s - accepts '\a' 4068s - accepts '\e' 4068s - accepts '\C-\n' 4068s - accepts '\C-\t' 4068s - accepts '\C-\r' 4068s - accepts '\C-\f' 4068s - accepts '\C-\v' 4068s - accepts '\C-\a' 4068s - accepts '\C-\e' 4068s - accepts multiple consecutive '\' characters 4068s - accepts characters and escaped octal digits 4068s - accepts escaped octal digits and characters 4068s - accepts characters and escaped hexadecimal digits 4068s - accepts escaped hexadecimal digits and characters 4068s - accepts escaped hexadecimal and octal digits 4068s - accepts \u{H} for a single Unicode codepoint 4068s - accepts \u{HH} for a single Unicode codepoint 4068s - accepts \u{HHH} for a single Unicode codepoint 4068s - accepts \u{HHHH} for a single Unicode codepoint 4068s - accepts \u{HHHHH} for a single Unicode codepoint 4068s - accepts \u{HHHHHH} for a single Unicode codepoint 4068s - accepts characters followed by \u{HHHH} 4068s - accepts \u{HHHH} followed by characters 4068s - accepts escaped hexadecimal digits followed by \u{HHHH} 4068s - accepts escaped octal digits followed by \u{HHHH} 4068s - accepts a combination of escaped octal and hexadecimal digits and \u{HHHH} 4068s - accepts \uHHHH for a single Unicode codepoint 4068s - accepts characters followed by \uHHHH 4068s - accepts \uHHHH followed by characters 4068s - accepts escaped hexadecimal digits followed by \uHHHH 4068s - accepts escaped octal digits followed by \uHHHH 4068s - accepts a combination of escaped octal and hexadecimal digits and \uHHHH 4068s - accepts a multiple byte character which need not be escaped 4068s - raises a RegexpError if less than four digits are given for \uHHHH 4068s - raises a RegexpError if the \u{} escape is empty 4068s - raises a RegexpError if more than six hexadecimal digits are given 4068s - returns a Regexp with US-ASCII encoding if only 7-bit ASCII characters are present regardless of the input String's encoding 4068s - 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 4068s - returns a Regexp with US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 4068s - returns a Regexp with source String having US-ASCII encoding if UTF-8 escape sequences using only 7-bit ASCII are present 4068s - returns a Regexp with UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 4068s - returns a Regexp with source String having UTF-8 encoding if any UTF-8 escape sequences outside 7-bit ASCII are present 4068s - returns a Regexp with the input String's encoding 4068s - returns a Regexp with source String having the input String's encoding 4068s 4068s Regexp.new given a Regexp 4068s - uses the argument as a literal to construct a Regexp object 4068s - preserves any options given in the Regexp literal 4068s - does not honour options given as additional arguments 4068s - sets the encoding to UTF-8 if the Regexp literal has the 'u' option 4068s - sets the encoding to EUC-JP if the Regexp literal has the 'e' option 4068s - sets the encoding to Windows-31J if the Regexp literal has the 's' option 4068s - sets the encoding to US-ASCII if the Regexp literal has the 'n' option and the source String is ASCII only 4068s - sets the encoding to source String's encoding if the Regexp literal has the 'n' option and the source String is not ASCII only 4068s 4068s Regexp.new given a Regexp with escaped characters 4068s - accepts a three-digit octal value 4068s - interprets a digit following a three-digit octal value as a character 4068s - accepts '\M-\n' 4068s - accepts '\M-\t' 4068s - accepts '\M-\r' 4068s - accepts '\M-\f' 4068s - accepts '\M-\v' 4068s - accepts '\M-\a' 4068s - accepts '\M-\e' 4068s - accepts '\M-\C-\n' 4068s - accepts '\M-\C-\t' 4068s - accepts '\M-\C-\r' 4068s - accepts '\M-\C-\f' 4068s - accepts '\M-\C-\v' 4068s - accepts '\M-\C-\a' 4068s - accepts '\M-\C-\e' 4068s 4068s Regexp.new given a non-String/Regexp 4068s - calls #to_str method for non-String/Regexp argument 4068s - raises TypeError if there is no #to_str method for non-String/Regexp argument 4068s - raises TypeError if #to_str returns non-String value 4068s 4068s Regexp#options 4068s - returns an Integer bitvector of regexp options for the Regexp object 4068s - allows checking for presence of a certain option with bitwise & 4068s - returns 0 for a Regexp literal without options 4068s - raises a TypeError on an uninitialized Regexp 4068s - includes Regexp::FIXEDENCODING for a Regexp literal with the 'u' option 4068s - includes Regexp::FIXEDENCODING for a Regexp literal with the 'e' option 4068s - includes Regexp::FIXEDENCODING for a Regexp literal with the 's' option 4068s - does not include Regexp::FIXEDENCODING for a Regexp literal with the 'n' option 4068s - includes Regexp::NOENCODING for a Regexp literal with the 'n' option 4068s 4068s Regexp.quote 4068s - escapes any characters with special meaning in a regular expression 4068s - works with symbols 4068s - works with substrings 4068s - works for broken strings 4068s - sets the encoding of the result to US-ASCII if there are only US-ASCII characters present in the input String 4068s - 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 4068s - sets the encoding of the result to BINARY if any non-US-ASCII characters are present in an input String with invalid encoding 4068s 4068s Regexp#source 4068s - returns the original string of the pattern 4068s - keeps escape sequences as is 4068s - has US-ASCII encoding when created from an ASCII-only \u{} literal 4068s - has UTF-8 encoding when created from a non-ASCII-only \u{} literal 4068s 4068s Regexp#source escaping 4068s - keeps escaping of metacharacter 4068s - keeps escaping of metacharacter used as a terminator 4068s - removes escaping of non-metacharacter used as a terminator 4068s - keeps escaping of non-metacharacter not used as a terminator 4068s 4068s Regexp#to_s 4068s - displays options if included 4068s - shows non-included options after a - sign 4068s - shows all options as excluded if none are selected 4068s - shows the pattern after the options 4068s - displays groups with options 4068s - displays single group with same options as main regex as the main regex 4068s - deals properly with uncaptured groups 4068s - deals properly with the two types of lookahead groups 4068s - returns a string in (?xxx:yyy) notation 4068s - handles abusive option groups 4068s 4068s Regexp.try_convert 4068s - returns the argument if given a Regexp 4068s - returns nil if given an argument that can't be converted to a Regexp 4068s - tries to coerce the argument by calling #to_regexp 4068s - raises a TypeError if the object does not return an Regexp from #to_regexp 4068s 4068s Regexp.union 4068s - returns /(?!)/ when passed no arguments 4068s - returns a regular expression that will match passed arguments 4068s - quotes any string arguments 4068s - returns a Regexp with the encoding of an ASCII-incompatible String argument 4068s - returns a Regexp with the encoding of a String containing non-ASCII-compatible characters 4068s - returns a Regexp with US-ASCII encoding if all arguments are ASCII-only 4068s - returns a Regexp with the encoding of multiple non-conflicting Strings containing non-ASCII-compatible characters 4068s - returns a Regexp with the encoding of a String containing non-ASCII-compatible characters and another ASCII-only String 4068s - returns ASCII-8BIT if the regexp encodings are ASCII-8BIT and at least one has non-ASCII characters 4068s - return US-ASCII if all patterns are ASCII-only 4068s - returns a Regexp with UTF-8 if one part is UTF-8 4068s - returns a Regexp if an array of string with special characters is passed 4068s - raises ArgumentError if the arguments include conflicting ASCII-incompatible Strings 4068s - raises ArgumentError if the arguments include conflicting ASCII-incompatible Regexps 4068s - raises ArgumentError if the arguments include conflicting fixed encoding Regexps 4068s - raises ArgumentError if the arguments include a fixed encoding Regexp and a String containing non-ASCII-compatible characters in a different encoding 4068s - raises ArgumentError if the arguments include a String containing non-ASCII-compatible characters and a fixed encoding Regexp in a different encoding 4068s - raises ArgumentError if the arguments include an ASCII-incompatible String and an ASCII-only String 4068s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and an ASCII-only String 4068s - raises ArgumentError if the arguments include an ASCII-incompatible String and an ASCII-only Regexp 4068s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and an ASCII-only Regexp 4068s - raises ArgumentError if the arguments include an ASCII-incompatible String and a String containing non-ASCII-compatible characters in a different encoding 4068s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and a String containing non-ASCII-compatible characters in a different encoding 4068s - raises ArgumentError if the arguments include an ASCII-incompatible String and a Regexp containing non-ASCII-compatible characters in a different encoding 4068s - raises ArgumentError if the arguments include an ASCII-incompatible Regexp and a Regexp containing non-ASCII-compatible characters in a different encoding 4068s - uses to_str to convert arguments (if not Regexp) 4068s - uses to_regexp to convert argument 4068s - accepts a Symbol as argument 4068s - accepts a single array of patterns as arguments 4068s 4068s Signal.list 4068s - doesn't contain other signals than the known list 4068s - redefines CLD with CHLD if defined 4068s - includes the EXIT key with a value of zero 4068s - includes the KILL key with a value of nine 4068s 4068s Signal.signame 4068s - takes a signal name with a well known signal number 4068s - calls #to_int on an object to convert to an Integer 4068s - raises a TypeError when the passed argument can't be coerced to Integer 4068s - raises a TypeError when the passed argument responds to #to_int but does not return an Integer 4068s 4068s Signal.trap 4068s - returns the previous handler 4068s - accepts a block 4068s - accepts a proc 4068s - accepts a method 4068s - accepts anything you can call 4068s - raises an exception for a non-callable at the point of use 4068s - accepts a non-callable that becomes callable when used 4068s - registers an handler doing nothing with :IGNORE 4068s - can register a new handler after :IGNORE 4068s - accepts :DEFAULT in place of a proc 4068s - accepts :SIG_DFL in place of a proc 4068s - accepts :SIG_IGN in place of a proc 4068s - accepts :IGNORE in place of a proc 4068s - accepts 'SIG_DFL' in place of a proc 4068s - accepts 'DEFAULT' in place of a proc 4068s - accepts 'SIG_IGN' in place of a proc 4068s - accepts 'IGNORE' in place of a proc 4068s - accepts long names as Strings 4068s - accepts short names as Strings 4068s - accepts long names as Symbols 4068s - accepts short names as Symbols 4068s - accepts Integer values 4068s - does not call #to_int on an object to convert to an Integer 4068s - raises ArgumentError when passed signal is not Integer, String or Symbol 4068s - raises ArgumentError for SIGSEGV which is reserved by Ruby 4068s - raises ArgumentError for SIGBUS which is reserved by Ruby 4068s - raises ArgumentError for SIGILL which is reserved by Ruby 4068s - raises ArgumentError for SIGFPE which is reserved by Ruby 4068s - raises ArgumentError for SIGVTALRM which is reserved by Ruby 4071s - returns 'DEFAULT' for the initial SIGINT handler 4071s 4071s Signal.trap the special EXIT signal code 4075s - accepts the EXIT code 4077s - can unset the handler 4077s 4077s SizedQueue#<< 4077s - adds an element to the Queue 4077s - is an error for a closed queue 4077s 4077s SizedQueue#<< 4077s - blocks if queued elements exceed size 4077s - raises a ThreadError if queued elements exceed size when not blocking 4077s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 4077s 4077s SizedQueue#clear 4077s - removes all objects from the queue 4077s 4077s SizedQueue#close 4077s - may be called multiple times 4077s - returns self 4077s 4077s SizedQueue#closed? 4077s - returns false initially 4077s - returns true when the queue is closed 4077s 4077s SizedQueue#deq 4077s - removes an item from the queue 4077s - returns items in the order they were added 4077s - blocks the thread until there are items in the queue 4077s - removes an item from a closed queue 4077s - converts false-ish for non_blocking to boolean 4077s - returns nil for a closed empty queue 4077s - returns nil for an empty queue that becomes closed 4077s 4077s SizedQueue#deq in non-blocking mode 4077s - removes an item from the queue 4077s - raises a ThreadError if the queue is empty 4077s - removes an item from a closed queue 4077s - raises a ThreadError for a closed empty queue 4077s - converts true-ish non_blocking argument to true 4077s 4077s SizedQueue#empty? 4077s - returns true on an empty Queue 4077s - returns false when Queue is not empty 4077s 4077s SizedQueue#enq 4077s - adds an element to the Queue 4077s - is an error for a closed queue 4077s 4077s SizedQueue#enq 4077s - blocks if queued elements exceed size 4077s - raises a ThreadError if queued elements exceed size when not blocking 4077s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 4077s 4077s SizedQueue#length 4077s - returns the number of elements 4077s 4077s SizedQueue#max 4077s - returns the size of the queue 4077s 4077s SizedQueue#max= 4077s - sets the size of the queue 4077s - does not remove items already in the queue beyond the maximum 4077s - raises a TypeError when given a non-numeric value 4077s - raises an argument error when set to zero 4077s - raises an argument error when set to a negative number 4077s 4077s SizedQueue.new 4077s - raises a TypeError when the given argument doesn't respond to #to_int 4077s - raises an argument error when no argument is given 4077s - raises an argument error when the given argument is zero 4077s - raises an argument error when the given argument is negative 4077s 4077s SizedQueue#num_waiting 4077s - reports the number of threads waiting to push 4077s 4077s SizedQueue#pop 4077s - removes an item from the queue 4077s - returns items in the order they were added 4077s - blocks the thread until there are items in the queue 4077s - removes an item from a closed queue 4077s - converts false-ish for non_blocking to boolean 4077s - returns nil for a closed empty queue 4077s - returns nil for an empty queue that becomes closed 4077s 4077s SizedQueue#pop in non-blocking mode 4077s - removes an item from the queue 4077s - raises a ThreadError if the queue is empty 4077s - removes an item from a closed queue 4077s - raises a ThreadError for a closed empty queue 4077s - converts true-ish non_blocking argument to true 4077s 4077s SizedQueue#push 4077s - adds an element to the Queue 4077s - is an error for a closed queue 4077s 4077s SizedQueue#push 4077s - blocks if queued elements exceed size 4077s - raises a ThreadError if queued elements exceed size when not blocking 4077s - interrupts enqueuing threads with ClosedQueueError when the queue is closed 4077s 4077s SizedQueue#shift 4077s - removes an item from the queue 4077s - returns items in the order they were added 4077s - blocks the thread until there are items in the queue 4077s - removes an item from a closed queue 4077s - converts false-ish for non_blocking to boolean 4077s - returns nil for a closed empty queue 4077s - returns nil for an empty queue that becomes closed 4077s 4077s SizedQueue#shift in non-blocking mode 4077s - removes an item from the queue 4077s - raises a ThreadError if the queue is empty 4077s - removes an item from a closed queue 4077s - raises a ThreadError for a closed empty queue 4077s - converts true-ish non_blocking argument to true 4077s 4077s SizedQueue#size 4077s - returns the number of elements 4077s 4077s String.allocate 4077s - returns an instance of String 4077s - returns a fully-formed String 4077s - returns a binary String 4077s 4077s String#<< 4077s - concatenates the given argument to self and returns self 4077s - raises a FrozenError when self is frozen 4077s - returns a String when given a subclass instance 4077s - returns an instance of same class when called on a subclass 4077s - converts the given argument to a String using to_str 4077s - raises a TypeError if the given argument can't be converted to a String 4077s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 4077s - raises an ArgumentError when given the incorrect number of arguments 4077s 4077s String#<< with Integer 4077s - concatenates the argument interpreted as a codepoint 4077s - returns a BINARY string if self is US-ASCII and the argument is between 128-255 (inclusive) 4077s - raises RangeError if the argument is an invalid codepoint for self's encoding 4077s - raises RangeError if the argument is negative 4077s - doesn't call to_int on its argument 4077s - raises a FrozenError when self is frozen 4077s 4077s String#<< when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 4077s - uses self's encoding if both are empty 4077s - uses self's encoding if the argument is empty 4077s - uses the argument's encoding if self is empty 4077s - raises Encoding::CompatibilityError if neither are empty 4077s 4077s String#<< when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 4077s - uses self's encoding if both are empty 4077s - uses self's encoding if the argument is empty 4077s - uses the argument's encoding if self is empty 4077s - raises Encoding::CompatibilityError if neither are empty 4077s 4077s String#<< when self and the argument are in different ASCII-compatible encodings 4077s - uses self's encoding if both are ASCII-only 4077s - uses self's encoding if the argument is ASCII-only 4077s - uses the argument's encoding if self is ASCII-only 4077s - raises Encoding::CompatibilityError if neither are ASCII-only 4077s 4077s String#<< when self is BINARY and argument is US-ASCII 4077s - uses BINARY encoding 4077s 4077s String#ascii_only? 4077s - returns true for the empty String with an ASCII-compatible encoding 4077s - returns false for the empty String with a non-ASCII-compatible encoding 4077s - returns false for a non-empty String with non-ASCII-compatible encoding 4077s - returns false when interpolating non ascii strings 4077s - returns false after appending non ASCII characters to an empty String 4077s - returns false when concatenating an ASCII and non-ASCII String 4077s - returns false when replacing an ASCII String with a non-ASCII String 4077s 4077s String#ascii_only? with ASCII only characters 4077s - returns true if the encoding is UTF-8 4077s - returns true if the encoding is US-ASCII 4077s - returns true for all single-character UTF-8 Strings 4077s 4077s String#ascii_only? with non-ASCII only characters 4077s - returns false if the encoding is BINARY 4077s - returns false if the String contains any non-ASCII characters 4077s - returns false if the encoding is US-ASCII 4077s 4077s String#b 4077s - returns a binary encoded string 4077s - returns new string without modifying self 4077s 4077s String#bytes 4077s - returns an Array when no block is given 4077s - yields each byte to a block if one is given, returning self 4077s - returns #bytesize bytes 4077s - returns bytes as Integers 4077s - agrees with #unpack('C*') 4077s - yields/returns no bytes for the empty string 4077s 4077s String#bytes 4077s - agrees with #getbyte 4077s - is unaffected by #force_encoding 4077s 4077s String#bytesize 4077s - returns the length of self in bytes 4077s - works with strings containing single UTF-8 characters 4077s - works with pseudo-ASCII strings containing single UTF-8 characters 4077s - works with strings containing UTF-8 characters 4077s - works with pseudo-ASCII strings containing UTF-8 characters 4077s - returns 0 for the empty string 4077s 4077s String#byteslice 4077s - needs to reviewed for spec completeness 4077s - returns the character code of the character at the given index 4077s - returns nil if index is outside of self 4077s - calls to_int on the given index 4077s - raises a TypeError if the given index is nil 4077s - raises a TypeError if the given index can't be converted to an Integer 4077s - raises a RangeError if the index is too big 4077s 4077s String#byteslice with index, length 4077s - returns the substring starting at the given index with the given length 4077s - returns a string with the same encoding as self 4077s - returns nil if the offset falls outside of self 4077s - returns nil if the length is negative 4077s - calls to_int on the given index and the given length 4077s - raises a TypeError when idx or length can't be converted to an integer 4077s - raises a TypeError when the given index or the given length is nil 4077s - raises a RangeError if the index or length is too big 4077s - returns String instances 4077s - handles repeated application 4077s 4077s String#byteslice with Range 4077s - returns the substring given by the offsets of the range 4077s - returns a String in the same encoding as self 4077s - returns nil if the beginning of the range falls outside of self 4077s - returns an empty string if range.begin is inside self and > real end 4077s - returns String instances 4077s - calls to_int on range arguments 4077s - works with Range subclasses 4077s - handles repeated application 4077s - raises a type error if a range is passed with a length 4077s - raises a RangeError if one of the bound is too big 4077s - works with endless ranges 4077s - works with beginless ranges 4077s 4077s String#byteslice on on non ASCII strings 4077s - returns byteslice of unicode strings 4077s - returns a String in the same encoding as self 4077s 4077s String#capitalize 4077s - returns a copy of self with the first character converted to uppercase and the remainder to lowercase 4077s - does not allow the :fold option for upcasing 4077s - does not allow invalid options 4077s - returns String instances when called on a subclass 4077s - returns a String in the same encoding as self 4077s 4077s String#capitalize full Unicode case mapping 4077s - works for all of Unicode with no option 4077s - only capitalizes the first resulting character when upcasing a character produces a multi-character sequence 4077s - updates string metadata 4077s 4077s String#capitalize ASCII-only case mapping 4077s - does not capitalize non-ASCII characters 4077s - handles non-ASCII substrings properly 4077s 4077s String#capitalize full Unicode case mapping adapted for Turkic languages 4077s - capitalizes ASCII characters according to Turkic semantics 4077s - allows Lithuanian as an extra option 4077s - does not allow any other additional option 4077s 4077s String#capitalize full Unicode case mapping adapted for Lithuanian 4077s - currently works the same as full Unicode case mapping 4077s - allows Turkic as an extra option (and applies Turkic semantics) 4077s - does not allow any other additional option 4077s 4077s String#capitalize! 4077s - capitalizes self in place 4077s - modifies self in place for non-ascii-compatible encodings 4077s - does not allow the :fold option for upcasing 4077s - does not allow invalid options 4077s - returns nil when no changes are made 4077s - raises a FrozenError when self is frozen 4077s 4077s String#capitalize! full Unicode case mapping 4077s - modifies self in place for all of Unicode with no option 4077s - only capitalizes the first resulting character when upcasing a character produces a multi-character sequence 4077s - works for non-ascii-compatible encodings 4077s - updates string metadata 4077s 4077s String#capitalize! modifies self in place for ASCII-only case mapping 4077s - does not capitalize non-ASCII characters 4077s - works for non-ascii-compatible encodings 4077s 4077s String#capitalize! modifies self in place for full Unicode case mapping adapted for Turkic languages 4077s - capitalizes ASCII characters according to Turkic semantics 4077s - allows Lithuanian as an extra option 4077s - does not allow any other additional option 4077s 4077s String#capitalize! modifies self in place for full Unicode case mapping adapted for Lithuanian 4077s - currently works the same as full Unicode case mapping 4077s - allows Turkic as an extra option (and applies Turkic semantics) 4077s - does not allow any other additional option 4077s 4077s String#=== 4077s - returns true if self <=> string returns 0 4077s - returns false if self <=> string does not return 0 4077s - ignores encoding difference of compatible string 4077s - considers encoding difference of incompatible string 4077s - considers encoding compatibility 4077s - ignores subclass differences 4077s - returns true when comparing 2 empty strings but one is not ASCII-compatible 4077s - returns false if obj does not respond to to_str 4077s - returns obj == self if obj responds to to_str 4077s - is not fooled by NUL characters 4077s 4077s String#casecmp independent of case 4077s - returns -1 when less than other 4077s - returns 0 when equal to other 4077s - returns 1 when greater than other 4077s - tries to convert other to string using to_str 4077s - returns nil if other can't be converted to a string 4077s - returns nil if incompatible encodings 4077s - returns 0 for empty strings in different encodings 4077s 4077s String#casecmp independent of case in UTF-8 mode for non-ASCII characters 4077s - returns -1 when numerically less than other 4077s - returns 0 when numerically equal to other 4077s - returns 1 when numerically greater than other 4077s 4077s String#casecmp independent of case in UTF-8 mode for ASCII characters 4077s - returns -1 when less than other 4077s - returns 0 when equal to other 4077s - returns 1 when greater than other 4077s 4077s String#casecmp independent of case for non-ASCII characters 4077s - returns -1 when numerically less than other 4077s - returns 0 when equal to other 4077s - returns 1 when numerically greater than other 4077s - does not case fold 4077s 4077s String#casecmp independent of case when comparing a subclass instance 4077s - returns -1 when less than other 4077s - returns 0 when equal to other 4077s - returns 1 when greater than other 4077s 4077s String#casecmp? independent of case 4077s - returns true when equal to other 4077s - returns false when not equal to other 4077s - tries to convert other to string using to_str 4077s - returns nil if incompatible encodings 4077s - case folds 4077s - returns nil if other can't be converted to a string 4077s - returns true for empty strings in different encodings 4077s 4077s String#casecmp? independent of case for UNICODE characters 4077s - returns true when downcase(:fold) on unicode 4077s 4077s String#casecmp? independent of case when comparing a subclass instance 4077s - returns true when equal to other 4077s - returns false when not equal to other 4077s 4077s String#casecmp? independent of case in UTF-8 mode for non-ASCII characters 4077s - returns true when they are the same with normalized case 4077s - returns false when they are unrelated 4077s - returns true when they have the same bytes 4077s 4077s String#center with length, padding 4077s - returns a new string of specified length with self centered and padded with padstr 4077s - pads with whitespace if no padstr is given 4077s - returns self if it's longer than or as long as the specified length 4077s - calls #to_int to convert length to an integer 4077s - raises a TypeError when length can't be converted to an integer 4077s - calls #to_str to convert padstr to a String 4077s - raises a TypeError when padstr can't be converted to a string 4077s - raises an ArgumentError if padstr is empty 4077s - returns String instances when called on subclasses 4077s 4077s String#center with length, padding with width 4077s - returns a String in the same encoding as the original 4077s 4077s String#center with length, padding with width, pattern 4077s - returns a String in the compatible encoding 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s 4077s String#chars 4077s - passes each char in self to the given block 4077s - returns self 4077s - is unicode aware 4077s - returns characters in the same encoding as self 4077s - works with multibyte characters 4077s - works if the String's contents is invalid for its encoding 4077s - returns a different character if the String is transcoded 4077s - uses the String's encoding to determine what characters it contains 4077s - returns an array when no block given 4077s - returns Strings in the same encoding as self 4077s 4077s String#chomp when passed no argument 4077s - does not modify a String with no trailing carriage return or newline 4077s - returns a copy of the String when it is not modified 4077s - removes one trailing newline 4077s - removes one trailing carriage return 4077s - removes one trailing carriage return, newline pair 4077s - returns an empty String when self is empty 4077s - returns a String in the same encoding as self 4077s - returns String instances when called on a subclass 4077s - removes trailing characters that match $/ when it has been assigned a value 4077s - removes one trailing newline for string with invalid encoding 4077s 4077s String#chomp when passed nil 4077s - does not modify the String 4077s - returns a copy of the String 4077s - returns an empty String when self is empty 4077s 4077s String#chomp when passed '' 4077s - removes a final newline 4077s - removes a final carriage return, newline 4077s - does not remove a final carriage return 4077s - removes more than one trailing newlines 4077s - removes more than one trailing carriage return, newline pairs 4077s - returns an empty String when self is empty 4077s - removes one trailing newline for string with invalid encoding 4077s 4077s String#chomp when passed '\n' 4077s - removes one trailing newline 4077s - removes one trailing carriage return 4077s - removes one trailing carriage return, newline pair 4077s - returns an empty String when self is empty 4077s 4077s String#chomp when passed an Object 4077s - calls #to_str to convert to a String 4077s - raises a TypeError if #to_str does not return a String 4077s 4077s String#chomp when passed a String 4077s - removes the trailing characters if they match the argument 4077s - does not modify the String if the argument does not match the trailing characters 4077s - returns an empty String when self is empty 4077s - returns an empty String when the argument equals self 4077s 4077s String#chomp! 4077s - raises a FrozenError on a frozen instance when it is modified 4077s - raises a FrozenError on a frozen instance when it would not be modified 4077s 4077s String#chomp! when passed no argument 4077s - modifies self 4077s - returns nil if self is not modified 4077s - removes one trailing newline 4077s - removes one trailing carriage return 4077s - removes one trailing carriage return, newline pair 4077s - returns nil when self is empty 4077s - returns subclass instances when called on a subclass 4077s - removes trailing characters that match $/ when it has been assigned a value 4077s 4077s String#chomp! when passed nil 4077s - returns nil 4077s - returns nil when self is empty 4077s 4077s String#chomp! when passed '' 4077s - removes a final newline 4077s - removes a final carriage return, newline 4077s - does not remove a final carriage return 4077s - removes more than one trailing newlines 4077s - removes more than one trailing carriage return, newline pairs 4077s - returns nil when self is empty 4077s 4077s String#chomp! when passed '\n' 4077s - removes one trailing newline 4077s - removes one trailing carriage return 4077s - removes one trailing carriage return, newline pair 4077s - returns nil when self is empty 4077s 4077s String#chomp! when passed an Object 4077s - calls #to_str to convert to a String 4077s - raises a TypeError if #to_str does not return a String 4077s 4077s String#chomp! when passed a String 4077s - removes the trailing characters if they match the argument 4077s - returns nil if the argument does not match the trailing characters 4077s - returns nil when self is empty 4077s 4077s String#chomp 4077s - does not modify a multi-byte character 4077s - removes the final carriage return, newline from a multibyte String 4077s - removes the final carriage return, newline from a non-ASCII String 4077s - removes the final carriage return, newline from a non-ASCII String when the record separator is changed 4077s 4077s String#chomp! 4077s - returns nil when the String is not modified 4077s - removes the final carriage return, newline from a multibyte String 4077s - removes the final carriage return, newline from a non-ASCII String 4077s - removes the final carriage return, newline from a non-ASCII String when the record separator is changed 4077s 4077s String#chop 4077s - removes the final character 4077s - removes the final carriage return 4077s - removes the final newline 4077s - removes the final carriage return, newline 4077s - removes the carriage return, newline if they are the only characters 4077s - does not remove more than the final carriage return, newline 4077s - removes a multi-byte character 4077s - removes the final carriage return, newline from a multibyte String 4077s - removes the final carriage return, newline from a non-ASCII String 4077s - returns an empty string when applied to an empty string 4077s - returns a new string when applied to an empty string 4077s - returns String instances when called on a subclass 4077s - returns a String in the same encoding as self 4077s 4077s String#chop! 4077s - removes the final character 4077s - removes the final carriage return 4077s - removes the final newline 4077s - removes the final carriage return, newline 4077s - removes the carriage return, newline if they are the only characters 4077s - does not remove more than the final carriage return, newline 4077s - removes a multi-byte character 4077s - removes the final carriage return, newline from a multibyte String 4077s - removes the final carriage return, newline from a non-ASCII String 4077s - returns self if modifications were made 4077s - returns nil when called on an empty string 4077s - raises a FrozenError on a frozen instance that is modified 4077s - raises a FrozenError on a frozen instance that would not be modified 4077s 4077s String#chr 4077s - returns a copy of self 4077s - returns a String 4077s - returns an empty String if self is an empty String 4077s - returns a 1-character String 4077s - returns the character at the start of the String 4077s - returns a String in the same encoding as self 4077s - understands multi-byte characters 4077s - understands Strings that contain a mixture of character widths 4077s 4077s String#clear 4077s - sets self equal to the empty String 4077s - returns self after emptying it 4077s - preserves its encoding 4077s - works with multibyte Strings 4077s - raises a FrozenError if self is frozen 4077s 4077s String#clone 4077s - calls #initialize_copy on the new instance 4077s - copies instance variables 4077s - copies singleton methods 4077s - copies modules included in the singleton class 4077s - copies constants defined in the singleton class 4077s - copies frozen state 4077s - does not modify the original string when changing cloned string 4077s - returns a String in the same encoding as self 4077s 4077s String#codepoints 4077s - returns self 4077s - raises an ArgumentError when self has an invalid encoding and a method is called on the returned Enumerator 4077s - yields each codepoint to the block if one is given 4077s - raises an ArgumentError if self's encoding is invalid and a block is given 4077s - yields codepoints as Integers 4077s - yields one codepoint for each character 4077s - works for multibyte characters 4077s - yields the codepoints corresponding to the character's position in the String's encoding 4077s - round-trips to the original String using Integer#chr 4077s - is synonymous with #bytes for Strings which are single-byte optimizable 4077s - returns an Array when no block is given 4077s - raises an ArgumentError when no block is given if self has an invalid encoding 4077s 4077s String#<=> with String 4077s - compares individual characters based on their ascii value 4077s - returns -1 when self is less than other 4077s - returns 0 when self is equal to other 4077s - returns 1 when self is greater than other 4077s - considers string that comes lexicographically first to be less if strings have same size 4077s - doesn't consider shorter string to be less if longer string starts with shorter one 4077s - compares shorter string with corresponding number of first chars of longer string 4077s - ignores subclass differences 4077s - returns 0 if self and other are bytewise identical and have the same encoding 4077s - returns 0 if self and other are bytewise identical and have the same encoding 4077s - returns -1 if self is bytewise less than other 4077s - returns 1 if self is bytewise greater than other 4077s - ignores encoding difference 4077s - returns 0 with identical ASCII-compatible bytes of different encodings 4077s - compares the indices of the encodings when the strings have identical non-ASCII-compatible bytes 4077s - returns 0 when comparing 2 empty strings but one is not ASCII-compatible 4077s 4077s String#<=> 4077s - returns nil if its argument provides neither #to_str nor #<=> 4077s - uses the result of calling #to_str for comparison when #to_str is defined 4077s - uses the result of calling #<=> on its argument when #<=> is defined but #to_str is not 4077s - returns nil if argument also uses an inverse comparison for <=> 4077s 4077s String#concat 4077s - concatenates the given argument to self and returns self 4077s - raises a FrozenError when self is frozen 4077s - returns a String when given a subclass instance 4077s - returns an instance of same class when called on a subclass 4077s - converts the given argument to a String using to_str 4077s - raises a TypeError if the given argument can't be converted to a String 4077s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 4077s - takes multiple arguments 4077s - concatenates the initial value when given arguments contain 2 self 4077s - returns self when given no arguments 4077s 4077s String#concat with Integer 4077s - concatenates the argument interpreted as a codepoint 4077s - returns a BINARY string if self is US-ASCII and the argument is between 128-255 (inclusive) 4077s - raises RangeError if the argument is an invalid codepoint for self's encoding 4077s - raises RangeError if the argument is negative 4077s - doesn't call to_int on its argument 4077s - raises a FrozenError when self is frozen 4077s 4077s String#concat when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 4077s - uses self's encoding if both are empty 4077s - uses self's encoding if the argument is empty 4077s - uses the argument's encoding if self is empty 4077s - raises Encoding::CompatibilityError if neither are empty 4077s 4077s String#concat when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 4077s - uses self's encoding if both are empty 4077s - uses self's encoding if the argument is empty 4077s - uses the argument's encoding if self is empty 4077s - raises Encoding::CompatibilityError if neither are empty 4077s 4077s String#concat when self and the argument are in different ASCII-compatible encodings 4077s - uses self's encoding if both are ASCII-only 4077s - uses self's encoding if the argument is ASCII-only 4077s - uses the argument's encoding if self is ASCII-only 4077s - raises Encoding::CompatibilityError if neither are ASCII-only 4077s 4077s String#concat when self is BINARY and argument is US-ASCII 4077s - uses BINARY encoding 4077s 4077s String#count 4077s - counts occurrences of chars from the intersection of the specified sets 4077s - raises an ArgumentError when given no arguments 4077s - negates sets starting with ^ 4077s - counts all chars in a sequence 4077s - raises if the given sequences are invalid 4077s - returns the number of occurrences of a multi-byte character 4077s - calls #to_str to convert each set arg to a String 4077s - raises a TypeError when a set arg can't be converted to a string 4077s 4077s String#crypt 4077s - returns a cryptographic hash of self by applying the UNIX crypt algorithm with the specified salt 4077s - calls #to_str to converts the salt arg to a String 4077s - doesn't return subclass instances 4077s - raises an ArgumentError when the salt is shorter than two characters 4077s - raises a type error when the salt arg can't be converted to a string 4077s 4077s String#delete_prefix 4077s - returns a copy of the string, with the given prefix removed 4077s - returns a copy of the string, when the prefix isn't found 4077s - does not remove partial bytes, only full characters 4077s - doesn't set $~ 4077s - calls to_str on its argument 4077s - returns a String instance when called on a subclass instance 4077s - returns a String in the same encoding as self 4077s 4077s String#delete_prefix! 4077s - removes the found prefix 4077s - returns nil if no change is made 4077s - doesn't set $~ 4077s - calls to_str on its argument 4077s - raises a FrozenError when self is frozen 4077s 4077s String#delete 4077s - returns a new string with the chars from the intersection of sets removed 4077s - raises an ArgumentError when given no arguments 4077s - negates sets starting with ^ 4077s - deletes all chars in a sequence 4077s - deletes multibyte characters 4077s - respects backslash for escaping a - 4077s - raises if the given ranges are invalid 4077s - tries to convert each set arg to a string using to_str 4077s - raises a TypeError when one set arg can't be converted to a string 4077s - returns String instances when called on a subclass 4077s - returns a String in the same encoding as self 4077s 4077s String#delete! 4077s - modifies self in place and returns self 4077s - returns nil if no modifications were made 4077s - raises a FrozenError when self is frozen 4077s 4077s String#delete_suffix 4077s - returns a copy of the string, with the given suffix removed 4077s - returns a copy of the string, when the suffix isn't found 4077s - does not remove partial bytes, only full characters 4077s - doesn't set $~ 4077s - calls to_str on its argument 4077s - returns a String instance when called on a subclass instance 4077s - returns a String in the same encoding as self 4077s 4077s String#delete_suffix! 4077s - removes the found prefix 4077s - returns nil if no change is made 4077s - doesn't set $~ 4077s - calls to_str on its argument 4077s - raises a FrozenError when self is frozen 4077s 4077s String#downcase 4077s - returns a copy of self with all uppercase letters downcased 4077s - returns a String in the same encoding as self 4077s - does not allow invalid options 4077s - returns a String instance for subclasses 4077s 4077s String#downcase full Unicode case mapping 4077s - works for all of Unicode with no option 4077s - updates string metadata 4077s 4077s String#downcase ASCII-only case mapping 4077s - does not downcase non-ASCII characters 4077s - works with substrings 4077s 4077s String#downcase full Unicode case mapping adapted for Turkic languages 4077s - downcases characters according to Turkic semantics 4077s - allows Lithuanian as an extra option 4077s - does not allow any other additional option 4077s 4077s String#downcase full Unicode case mapping adapted for Lithuanian 4077s - currently works the same as full Unicode case mapping 4077s - allows Turkic as an extra option (and applies Turkic semantics) 4077s - does not allow any other additional option 4077s 4077s String#downcase case folding 4077s - case folds special characters 4077s 4077s String#downcase! 4077s - modifies self in place 4077s - modifies self in place for non-ascii-compatible encodings 4077s - does not allow invalid options 4077s - returns nil if no modifications were made 4077s - raises a FrozenError when self is frozen 4077s - sets the result String encoding to the source String encoding 4077s 4077s String#downcase! full Unicode case mapping 4077s - modifies self in place for all of Unicode with no option 4077s - updates string metadata 4077s 4077s String#downcase! ASCII-only case mapping 4077s - does not downcase non-ASCII characters 4077s - works for non-ascii-compatible encodings 4077s 4077s String#downcase! full Unicode case mapping adapted for Turkic languages 4077s - downcases characters according to Turkic semantics 4077s - allows Lithuanian as an extra option 4077s - does not allow any other additional option 4077s 4077s String#downcase! full Unicode case mapping adapted for Lithuanian 4077s - currently works the same as full Unicode case mapping 4077s - allows Turkic as an extra option (and applies Turkic semantics) 4077s - does not allow any other additional option 4077s 4077s String#downcase! case folding 4077s - case folds special characters 4077s 4077s String#dump 4077s - does not take into account if a string is frozen 4077s - returns a String instance 4077s - wraps string with " 4077s - returns a string with special characters replaced with \ notation 4077s - returns a string with " and \ escaped with a backslash 4077s - returns a string with \# when # is followed by $, @, @@, { 4077s - returns a string with # not escaped when followed by any other character 4077s - returns a string with printable non-alphanumeric characters unescaped 4077s - returns a string with numeric characters unescaped 4077s - returns a string with upper-case alpha characters unescaped 4077s - returns a string with lower-case alpha characters unescaped 4077s - returns a string with non-printing ASCII characters replaced by \x notation 4077s - returns a string with non-printing single-byte UTF-8 characters replaced by \x notation 4077s - returns a string with multi-byte UTF-8 characters less than or equal 0xFFFF replaced by \uXXXX notation with upper-case hex digits 4077s - returns a string with multi-byte UTF-8 characters greater than 0xFFFF replaced by \u{XXXXXX} notation with upper-case hex digits 4077s - includes .force_encoding(name) if the encoding isn't ASCII compatible 4077s - returns a String in the same encoding as self 4077s 4077s String#dup 4077s - calls #initialize_copy on the new instance 4077s - copies instance variables 4077s - does not copy singleton methods 4077s - does not copy modules included in the singleton class 4077s - does not copy constants defined in the singleton class 4077s - does not modify the original string when changing dupped string 4077s - does not modify the original setbyte-mutated string when changing dupped string 4077s - returns a String in the same encoding as self 4077s 4077s String#each_byte 4077s - passes each byte in self to the given block 4077s - keeps iterating from the old position (to new string end) when self changes 4077s - returns self 4077s 4077s String#each_byte when no block is given 4077s - returns an enumerator 4077s 4077s String#each_byte when no block is given returned enumerator size 4077s - should return the bytesize of the string 4077s 4077s String#each_char 4077s - passes each char in self to the given block 4077s - returns self 4077s - is unicode aware 4077s - returns characters in the same encoding as self 4077s - works with multibyte characters 4077s - works if the String's contents is invalid for its encoding 4077s - returns a different character if the String is transcoded 4077s - uses the String's encoding to determine what characters it contains 4077s 4077s String#each_char when no block is given 4077s - returns an enumerator 4077s 4077s String#each_char when no block is given returned enumerator size 4077s - should return the size of the string 4077s 4077s String#each_codepoint 4077s - returns self 4077s - raises an ArgumentError when self has an invalid encoding and a method is called on the returned Enumerator 4077s - yields each codepoint to the block if one is given 4077s - raises an ArgumentError if self's encoding is invalid and a block is given 4077s - yields codepoints as Integers 4077s - yields one codepoint for each character 4077s - works for multibyte characters 4077s - yields the codepoints corresponding to the character's position in the String's encoding 4077s - round-trips to the original String using Integer#chr 4077s - is synonymous with #bytes for Strings which are single-byte optimizable 4077s 4077s String#each_codepoint when no block is given 4077s - returns an Enumerator 4077s - returns an Enumerator even when self has an invalid encoding 4077s 4077s String#each_codepoint when no block is given returned Enumerator size 4077s - should return the size of the string 4077s - should return the size of the string even when the string has an invalid encoding 4077s 4077s String#each_grapheme_cluster 4077s - passes each char in self to the given block 4077s - returns self 4077s - is unicode aware 4077s - returns characters in the same encoding as self 4077s - works with multibyte characters 4077s - returns a different character if the String is transcoded 4077s - uses the String's encoding to determine what characters it contains 4077s - passes each grapheme cluster in self to the given block 4077s - returns self 4077s - yields String instances for subclasses 4077s 4077s String#each_grapheme_cluster when no block is given 4077s - returns an enumerator 4077s 4077s String#each_grapheme_cluster when no block is given returned enumerator size 4077s - should return the size of the string 4077s 4077s String#each_line 4077s - splits using default newline separator when none is specified 4077s - splits self using the supplied record separator and passes each substring to the block 4077s - splits strings containing multibyte characters 4077s - passes self as a whole to the block if the separator is nil 4077s - yields paragraphs (broken by 2 or more successive newlines) when passed '' and replaces multiple newlines with only two ones 4077s - yields String instances for subclasses 4077s - returns self 4077s - tries to convert the separator to a string using to_str 4077s - does not care if the string is modified while substituting 4077s - returns Strings in the same encoding as self 4077s - raises a TypeError when the separator can't be converted to a string 4077s - accepts a string separator 4077s - raises a TypeError when the separator is a symbol 4077s 4077s String#each_line uses $/ 4077s - as the separator when none is given 4077s 4077s String#each_line when `chomp` keyword argument is passed 4077s - removes new line characters when separator is not specified 4077s - removes only specified separator 4077s - ignores new line characters when separator is specified 4077s 4077s String#each_line when no block is given 4077s - returns an enumerator 4077s 4077s String#each_line when no block is given returned Enumerator size 4077s - should return nil 4077s 4077s String#[] 4077s - returns the character code of the character at the given index 4077s - returns nil if index is outside of self 4077s - calls to_int on the given index 4077s - raises a TypeError if the given index is nil 4077s - raises a TypeError if the given index can't be converted to an Integer 4077s - raises a RangeError if the index is too big 4077s 4077s String#[] with index, length 4077s - returns the substring starting at the given index with the given length 4077s - returns a string with the same encoding as self 4077s - returns nil if the length is negative 4077s - calls to_int on the given index and the given length 4077s - raises a TypeError when idx or length can't be converted to an integer 4077s - raises a TypeError when the given index or the given length is nil 4077s - raises a RangeError if the index or length is too big 4077s - returns String instances 4077s - handles repeated application 4077s 4077s String#[] with Range 4077s - returns the substring given by the offsets of the range 4077s - returns a String in the same encoding as self 4077s - returns nil if the beginning of the range falls outside of self 4077s - returns an empty string if range.begin is inside self and > real end 4077s - returns String instances 4077s - calls to_int on range arguments 4077s - works with Range subclasses 4077s - handles repeated application 4077s - raises a type error if a range is passed with a length 4077s - raises a RangeError if one of the bound is too big 4077s - works with endless ranges 4077s - works with beginless ranges 4077s 4077s String#[] with Regexp 4077s - returns the matching portion of self 4077s - returns nil if there is no match 4077s - returns a String in the same encoding as self 4077s - returns String instances 4077s - sets $~ to MatchData when there is a match and nil when there's none 4077s 4077s String#[] with Regexp, index 4077s - returns the capture for the given index 4077s - returns nil if there is no match 4077s - returns nil if the index is larger than the number of captures 4077s - returns nil if there is no capture for the given index 4077s - returns nil if the given capture group was not matched but still sets $~ 4077s - returns a String in the same encoding as self 4077s - calls to_int on the given index 4077s - raises a TypeError when the given index can't be converted to Integer 4077s - raises a TypeError when the given index is nil 4077s - returns String instances 4077s - sets $~ to MatchData when there is a match and nil when there's none 4077s 4077s String#[] with Regexp, group 4077s - returns the capture for the given name 4077s - returns the last capture for duplicate names 4077s - returns the innermost capture for nested duplicate names 4077s - returns nil if there is no match 4077s - raises an IndexError if there is no capture for the given name 4077s - raises a TypeError when the given name is not a String 4077s - raises an IndexError when given the empty String as a group name 4077s - returns String instances 4077s - sets $~ to MatchData when there is a match and nil when there's none 4077s 4077s String#[] with String 4077s - returns other_str if it occurs in self 4077s - doesn't set $~ 4077s - returns nil if there is no match 4077s - doesn't call to_str on its argument 4077s - returns a String instance when given a subclass instance 4077s 4077s String#[] with Symbol 4077s - raises TypeError 4077s 4077s String#[]= with Integer index 4077s - replaces the char at idx with other_str 4077s - raises an IndexError without changing self if idx is outside of self 4077s - allows assignment to the zero'th element of an empty String 4077s - raises IndexError if the string index doesn't match a position in the string 4077s - raises a FrozenError when self is frozen 4077s - calls to_int on index 4077s - calls #to_str to convert other to a String 4077s - raises a TypeError if other_str can't be converted to a String 4077s - raises a TypeError if passed an Integer replacement 4077s - raises an IndexError if the index is greater than character size 4077s - calls #to_int to convert the index 4077s - raises a TypeError if #to_int does not return an Integer 4077s - raises an IndexError if #to_int returns a value out of range 4077s - replaces a character with a multibyte character 4077s - replaces a multibyte character with a character 4077s - replaces a multibyte character with a multibyte character 4077s - encodes the String in an encoding compatible with the replacement 4077s - updates the string to a compatible encoding 4077s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 4077s 4077s String#[]= with String index 4077s - replaces fewer characters with more characters 4077s - replaces more characters with fewer characters 4077s - replaces characters with no characters 4077s - raises an IndexError if the search String is not found 4077s - replaces characters with a multibyte character 4077s - replaces multibyte characters with characters 4077s - replaces multibyte characters with multibyte characters 4077s - encodes the String in an encoding compatible with the replacement 4077s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 4077s 4077s String#[]= with a Regexp index 4077s - replaces the matched text with the rhs 4077s - raises IndexError if the regexp index doesn't match a position in the string 4077s - calls #to_str to convert the replacement 4077s - checks the match before calling #to_str to convert the replacement 4077s - replaces characters with a multibyte character 4077s - replaces multibyte characters with characters 4077s - replaces multibyte characters with multibyte characters 4077s - encodes the String in an encoding compatible with the replacement 4077s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 4077s 4077s String#[]= with a Regexp index with 3 arguments 4077s - calls #to_int to convert the second object 4077s - raises a TypeError if #to_int does not return an Integer 4077s - uses the 2nd of 3 arguments as which capture should be replaced 4077s - allows the specified capture to be negative and count from the end 4077s - checks the match index before calling #to_str to convert the replacement 4077s - raises IndexError if the specified capture isn't available 4077s 4077s String#[]= with a Regexp index with 3 arguments when the optional capture does not match 4077s - raises an IndexError before setting the replacement 4077s 4077s String#[]= with a Range index 4077s - replaces the contents with a shorter String 4077s - replaces the contents with a longer String 4077s - replaces a partial string 4077s - raises a RangeError if negative Range begin is out of range 4077s - raises a RangeError if positive Range begin is greater than String size 4077s - uses the Range end as an index rather than a count 4077s - treats a negative out-of-range Range end with a positive Range begin as a zero count 4077s - treats a negative out-of-range Range end with a negative Range begin as a zero count 4077s - replaces characters with a multibyte character 4077s - replaces multibyte characters with characters 4077s - replaces multibyte characters by negative indexes 4077s - replaces multibyte characters with multibyte characters 4077s - deletes a multibyte character 4077s - inserts a multibyte character 4077s - encodes the String in an encoding compatible with the replacement 4077s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 4077s 4077s String#[]= with a Range index with an empty replacement 4077s - does not replace a character with a zero-index, zero exclude-end range 4077s - does not replace a character with a zero exclude-end range 4077s - replaces a character with zero-index, zero non-exclude-end range 4077s - replaces a character with a zero non-exclude-end range 4077s 4077s String#[]= with Integer index, count 4077s - starts at idx and overwrites count characters before inserting the rest of other_str 4077s - counts negative idx values from end of the string 4077s - overwrites and deletes characters if count is more than the length of other_str 4077s - deletes characters if other_str is an empty string 4077s - deletes characters up to the maximum length of the existing string 4077s - appends other_str to the end of the string if idx == the length of the string 4077s - calls #to_int to convert the index and count objects 4077s - raises a TypeError if #to_int for index does not return an Integer 4077s - raises a TypeError if #to_int for count does not return an Integer 4077s - calls #to_str to convert the replacement object 4077s - raises a TypeError of #to_str does not return a String 4077s - raises an IndexError if |idx| is greater than the length of the string 4077s - raises an IndexError if count < 0 4077s - raises a TypeError if other_str is a type other than String 4077s - replaces characters with a multibyte character 4077s - replaces multibyte characters with characters 4077s - replaces multibyte characters with multibyte characters 4077s - deletes a multibyte character 4077s - inserts a multibyte character 4077s - raises an IndexError if the character index is out of range of a multibyte String 4077s - encodes the String in an encoding compatible with the replacement 4077s - raises an Encoding::CompatibilityError if the replacement encoding is incompatible 4077s 4077s String#empty? 4077s - returns true if the string has a length of zero 4077s 4077s String#encode 4077s - raises ArgumentError if the value of the :xml option is not :text or :attr 4077s 4077s String#encode when passed no options 4077s - transcodes to Encoding.default_internal when set 4077s - transcodes a 7-bit String despite no generic converting being available 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible 4077s 4077s String#encode when passed to encoding 4077s - accepts a String argument 4077s - calls #to_str to convert the object to an Encoding 4077s - transcodes to the passed encoding 4077s - transcodes Japanese multibyte characters 4077s - transcodes a 7-bit String despite no generic converting being available 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible 4077s - raises an Encoding::ConverterNotFoundError for an invalid encoding 4077s 4077s String#encode when passed options 4077s - does not process transcoding options if not transcoding 4077s - calls #to_hash to convert the object 4077s - transcodes to Encoding.default_internal when set 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible despite 'invalid: :replace, undef: :replace' 4077s - replaces invalid characters when replacing Emacs-Mule encoded strings 4077s 4077s String#encode when passed to, from 4077s - transcodes between the encodings ignoring the String encoding 4077s - calls #to_str to convert the from object to an Encoding 4077s 4077s String#encode when passed to, options 4077s - replaces undefined characters in the destination encoding 4077s - replaces invalid characters in the destination encoding 4077s - calls #to_hash to convert the options object 4077s 4077s String#encode when passed to, from, options 4077s - replaces undefined characters in the destination encoding 4077s - replaces invalid characters in the destination encoding 4077s - calls #to_str to convert the to object to an encoding 4077s - calls #to_str to convert the from object to an encoding 4077s - calls #to_hash to convert the options object 4077s 4077s String#encode given the xml: :text option 4077s - replaces all instances of '&' with '&' 4077s - replaces all instances of '<' with '<' 4077s - replaces all instances of '>' with '>' 4077s - does not replace '"' 4077s - replaces undefined characters with their upper-case hexadecimal numeric character references 4077s 4077s String#encode given the xml: :attr option 4077s - surrounds the encoded text with double-quotes 4077s - replaces all instances of '&' with '&' 4077s - replaces all instances of '<' with '<' 4077s - replaces all instances of '>' with '>' 4077s - replaces all instances of '"' with '"' 4077s - replaces undefined characters with their upper-case hexadecimal numeric character references 4077s 4077s String#encode when passed no options 4077s - returns a copy when Encoding.default_internal is nil 4077s - returns a copy for a ASCII-only String when Encoding.default_internal is nil 4077s - encodes an ascii substring of a binary string to UTF-8 4077s 4077s String#encode when passed to encoding 4077s - returns a copy when passed the same encoding as the String 4077s - round trips a String 4077s 4077s String#encode when passed options 4077s - returns a copy when Encoding.default_internal is nil 4077s - normalizes newlines 4077s - replaces invalid encoding in source with default replacement 4077s - replaces invalid encoding in source with a specified replacement 4077s - replace multiple invalid bytes at the end with a single replacement character 4077s - replaces invalid encoding in source using a specified replacement even when a fallback is given 4077s - replaces undefined encoding in destination with default replacement 4077s - replaces undefined encoding in destination with a specified replacement 4077s - replaces undefined encoding in destination with a specified replacement even if a fallback is given 4077s - replaces undefined encoding in destination using a fallback proc 4077s - replaces invalid encoding in source using replace even when fallback is given as proc 4077s 4077s String#encode when passed to, from 4077s - returns a copy in the destination encoding when both encodings are the same 4077s - returns the transcoded string 4077s 4077s String#encode when passed to, options 4077s - returns a copy when the destination encoding is the same as the String encoding 4077s 4077s String#encode when passed to, from, options 4077s - returns a copy when both encodings are the same 4077s - returns a copy in the destination encoding when both encodings are the same 4077s 4077s String#encode! 4077s - raises ArgumentError if the value of the :xml option is not :text or :attr 4077s - raises a FrozenError when called on a frozen String 4077s - raises a FrozenError when called on a frozen String when it's a no-op 4077s 4077s String#encode! when passed no options 4077s - transcodes to Encoding.default_internal when set 4077s - transcodes a 7-bit String despite no generic converting being available 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible 4077s 4077s String#encode! when passed to encoding 4077s - accepts a String argument 4077s - calls #to_str to convert the object to an Encoding 4077s - transcodes to the passed encoding 4077s - transcodes Japanese multibyte characters 4077s - transcodes a 7-bit String despite no generic converting being available 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible 4077s - raises an Encoding::ConverterNotFoundError for an invalid encoding 4077s 4077s String#encode! when passed options 4077s - does not process transcoding options if not transcoding 4077s - calls #to_hash to convert the object 4077s - transcodes to Encoding.default_internal when set 4077s - raises an Encoding::ConverterNotFoundError when no conversion is possible despite 'invalid: :replace, undef: :replace' 4077s - replaces invalid characters when replacing Emacs-Mule encoded strings 4077s 4077s String#encode! when passed to, from 4077s - transcodes between the encodings ignoring the String encoding 4077s - calls #to_str to convert the from object to an Encoding 4077s 4077s String#encode! when passed to, options 4077s - replaces undefined characters in the destination encoding 4077s - replaces invalid characters in the destination encoding 4077s - calls #to_hash to convert the options object 4077s 4077s String#encode! when passed to, from, options 4077s - replaces undefined characters in the destination encoding 4077s - replaces invalid characters in the destination encoding 4077s - calls #to_str to convert the to object to an encoding 4077s - calls #to_str to convert the from object to an encoding 4077s - calls #to_hash to convert the options object 4077s 4077s String#encode! given the xml: :text option 4077s - replaces all instances of '&' with '&' 4077s - replaces all instances of '<' with '<' 4077s - replaces all instances of '>' with '>' 4077s - does not replace '"' 4077s - replaces undefined characters with their upper-case hexadecimal numeric character references 4077s 4077s String#encode! given the xml: :attr option 4077s - surrounds the encoded text with double-quotes 4077s - replaces all instances of '&' with '&' 4077s - replaces all instances of '<' with '<' 4077s - replaces all instances of '>' with '>' 4077s - replaces all instances of '"' with '"' 4077s - replaces undefined characters with their upper-case hexadecimal numeric character references 4077s 4077s String#encode! when passed no options 4077s - returns self when Encoding.default_internal is nil 4077s - returns self for a ASCII-only String when Encoding.default_internal is nil 4077s 4077s String#encode! when passed options 4077s - returns self for ASCII-only String when Encoding.default_internal is nil 4077s 4077s String#encode! when passed to encoding 4077s - returns self 4077s 4077s String#encode! when passed to, from 4077s - returns self 4077s 4077s String#encoding 4077s - returns an Encoding object 4077s - is equal to the source encoding by default 4077s - returns the given encoding if #force_encoding has been called 4077s - returns the given encoding if #encode!has been called 4077s 4077s String#encoding for US-ASCII Strings 4077s - returns US-ASCII if self is US-ASCII 4077s - returns US-ASCII if self is US-ASCII only, despite the default internal encoding being different 4077s - returns US-ASCII if self is US-ASCII only, despite the default external encoding being different 4077s - returns US-ASCII if self is US-ASCII only, despite the default internal and external encodings being different 4077s - returns US-ASCII if self is US-ASCII only, despite the default encodings being different 4077s 4077s String#encoding for Strings with \u escapes 4077s - returns UTF-8 4077s - returns US-ASCII if self is US-ASCII only 4077s - returns UTF-8 if self isn't US-ASCII only 4077s - is not affected by the default internal encoding 4077s - is not affected by the default external encoding 4077s - is not affected by both the default internal and external encoding being set at the same time 4077s - returns the given encoding if #force_encoding has been called 4077s - returns the given encoding if #encode!has been called 4077s 4077s String#encoding for Strings with \x escapes 4077s - returns US-ASCII if self is US-ASCII only 4077s - returns BINARY when an escape creates a byte with the 8th bit set if the source encoding is US-ASCII 4077s - returns the source encoding when an escape creates a byte with the 8th bit set if the source encoding isn't US-ASCII 4077s - is not affected by the default internal encoding 4077s - is not affected by the default external encoding 4077s - is not affected by both the default internal and external encoding being set at the same time 4077s - returns the given encoding if #force_encoding has been called 4077s - returns the given encoding if #encode!has been called 4077s 4077s String#end_with? 4077s - returns true only if ends match 4077s - returns false if the end does not match 4077s - returns true if the search string is empty 4077s - returns true only if any ending match 4077s - converts its argument using :to_str 4077s - ignores arguments not convertible to string 4077s - uses only the needed arguments 4077s - works for multibyte strings 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s - checks that we are starting to match at the head of a character 4077s 4077s String#eql? 4077s - returns true if self <=> string returns 0 4077s - returns false if self <=> string does not return 0 4077s - ignores encoding difference of compatible string 4077s - considers encoding difference of incompatible string 4077s - considers encoding compatibility 4077s - ignores subclass differences 4077s - returns true when comparing 2 empty strings but one is not ASCII-compatible 4077s 4077s String#eql? when given a non-String 4077s - returns false 4077s - does not try to call #to_str on the given argument 4077s 4077s String#== 4077s - returns true if self <=> string returns 0 4077s - returns false if self <=> string does not return 0 4077s - ignores encoding difference of compatible string 4077s - considers encoding difference of incompatible string 4077s - considers encoding compatibility 4077s - ignores subclass differences 4077s - returns true when comparing 2 empty strings but one is not ASCII-compatible 4077s - returns false if obj does not respond to to_str 4077s - returns obj == self if obj responds to to_str 4077s - is not fooled by NUL characters 4077s 4077s String#force_encoding 4077s - accepts a String as the name of an Encoding 4077s - accepts an Encoding instance 4077s - calls #to_str to convert an object to an encoding name 4077s - raises a TypeError if #to_str does not return a String 4077s - raises a TypeError if passed nil 4077s - returns self 4077s - sets the encoding even if the String contents are invalid in that encoding 4077s - does not transcode self 4077s - raises a FrozenError if self is frozen 4077s 4077s String#force_encoding with a special encoding name 4077s - accepts valid special encoding names 4077s - defaults to BINARY if special encoding name is not set 4077s 4077s String#freeze 4077s - produces the same object whenever called on an instance of a literal in the source 4077s - doesn't produce the same object for different instances of literals in the source 4077s - being a special form doesn't change the value of defined? 4077s 4077s String#getbyte 4077s - returns an Integer if given a valid index 4077s - starts indexing at 0 4077s - counts from the end of the String if given a negative argument 4077s - returns an Integer between 0 and 255 4077s - regards a multi-byte character as having multiple bytes 4077s - mirrors the output of #bytes 4077s - interprets bytes relative to the String's encoding 4077s - returns nil for out-of-bound indexes 4077s - regards the empty String as containing no bytes 4077s - raises an ArgumentError unless given one argument 4077s - raises a TypeError unless its argument can be coerced into an Integer 4077s 4077s String#grapheme_clusters 4077s - passes each char in self to the given block 4077s - returns self 4077s - is unicode aware 4077s - returns characters in the same encoding as self 4077s - works with multibyte characters 4077s - returns a different character if the String is transcoded 4077s - uses the String's encoding to determine what characters it contains 4077s - passes each grapheme cluster in self to the given block 4077s - returns self 4077s - returns an array when no block given 4077s 4077s String#gsub with pattern and replacement 4077s - inserts the replacement around every character when the pattern collapses 4077s - respects unicode when the pattern collapses 4077s - doesn't freak out when replacing ^ 4077s - returns a copy of self with all occurrences of pattern replaced with replacement 4077s - ignores a block if supplied 4077s - supports \G which matches at the beginning of the remaining (non-matched) string 4077s - supports /i for ignoring case 4077s - doesn't interpret regexp metacharacters if pattern is a string 4077s - replaces \1 sequences with the regexp's corresponding capture 4077s - treats \1 sequences without corresponding captures as empty strings 4077s - replaces \& and \0 with the complete match 4077s - replaces \` with everything before the current match 4077s - replaces \' with everything after the current match 4077s - replaces \+ with the last paren that actually matched 4077s - treats \+ as an empty string if there was no captures 4077s - maps \\ in replacement to \ 4077s - leaves unknown \x escapes in replacement untouched 4077s - leaves \ at the end of replacement untouched 4077s - replaces \k named backreferences with the regexp's corresponding capture 4077s - handles pattern collapse 4077s - tries to convert pattern to a string using to_str 4077s - raises a TypeError when pattern can't be converted to a string 4077s - tries to convert replacement to a string using to_str 4077s - raises a TypeError when replacement can't be converted to a string 4077s - returns String instances when called on a subclass 4077s - sets $~ to MatchData of last match and nil when there's none 4077s - handles a pattern in a superset encoding 4077s - handles a pattern in a subset encoding 4077s 4077s String#gsub with pattern and Hash 4077s - returns a copy of self with all occurrences of pattern replaced with the value of the corresponding hash key 4077s - ignores keys that don't correspond to matches 4077s - returns an empty string if the pattern matches but the hash specifies no replacements 4077s - ignores non-String keys 4077s - uses a key's value as many times as needed 4077s - uses the hash's default value for missing keys 4077s - coerces the hash values with #to_s 4077s - uses the hash's value set from default_proc for missing keys 4077s - sets $~ to MatchData of last match and nil when there's none for access from outside 4077s - doesn't interpolate special sequences like \1 for the block's return value 4077s 4077s String#gsub! with pattern and Hash 4077s - returns self with all occurrences of pattern replaced with the value of the corresponding hash key 4077s - ignores keys that don't correspond to matches 4077s - replaces self with an empty string if the pattern matches but the hash specifies no replacements 4077s - ignores non-String keys 4077s - uses a key's value as many times as needed 4077s - uses the hash's default value for missing keys 4077s - coerces the hash values with #to_s 4077s - uses the hash's value set from default_proc for missing keys 4077s - sets $~ to MatchData of last match and nil when there's none for access from outside 4077s - doesn't interpolate special sequences like \1 for the block's return value 4077s 4077s String#gsub with pattern and block 4077s - returns a copy of self with all occurrences of pattern replaced with the block's return value 4077s - sets $~ for access from the block 4077s - does not set $~ for procs created from methods 4077s - restores $~ after leaving the block 4077s - sets $~ to MatchData of last match and nil when there's none for access from outside 4077s - doesn't interpolate special sequences like \1 for the block's return value 4077s - converts the block's return value to a string using to_s 4077s - uses the compatible encoding if they are compatible 4077s - raises an Encoding::CompatibilityError if the encodings are not compatible 4077s - replaces the incompatible part properly even if the encodings are not compatible 4077s - raises an ArgumentError if encoding is not valid 4077s 4077s String#gsub with pattern and without replacement and block 4077s - returns an enumerator 4077s 4077s String#gsub with pattern and without replacement and block returned Enumerator size 4077s - should return nil 4077s 4077s String#gsub with a string pattern 4077s - handles multibyte characters 4077s 4077s String#gsub! with pattern and replacement 4077s - modifies self in place and returns self 4077s - modifies self in place with multi-byte characters and returns self 4077s - returns nil if no modifications were made 4077s - raises a FrozenError when self is frozen 4077s - handles a pattern in a superset encoding 4077s - handles a pattern in a subset encoding 4077s 4077s String#gsub! with pattern and block 4077s - modifies self in place and returns self 4077s - returns nil if no modifications were made 4077s - raises a FrozenError when self is frozen 4077s - uses the compatible encoding if they are compatible 4077s - raises an Encoding::CompatibilityError if the encodings are not compatible 4077s - replaces the incompatible part properly even if the encodings are not compatible 4077s - raises an ArgumentError if encoding is not valid 4077s 4077s String#gsub! with pattern and without replacement and block 4077s - returns an enumerator 4077s 4077s String#gsub! with pattern and without replacement and block returned Enumerator size 4077s - should return nil 4077s 4077s String#hash 4077s - returns a hash based on a string's length and content 4077s 4077s String#hex 4077s - treats leading characters of self as a string of hex digits 4077s - does not accept a sequence of underscores as part of a number 4077s - takes an optional sign 4077s - takes an optional 0x 4077s - requires that the sign is in front of the 0x if present 4077s - returns 0 on error 4077s - returns 0 if sequence begins with underscore 4077s 4077s String#include? with String 4077s - returns true if self contains other_str 4077s - ignores subclass differences 4077s - returns true if both strings are empty 4077s - returns true if the RHS is empty 4077s - tries to convert other to string using to_str 4077s - raises a TypeError if other can't be converted to string 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s 4077s String#index 4077s - raises a TypeError if passed nil 4077s - raises a TypeError if passed a boolean 4077s - raises a TypeError if passed a Symbol 4077s - calls #to_str to convert the first argument 4077s - calls #to_int to convert the second argument 4077s - raises a TypeError if passed an Integer 4077s 4077s String#index with String 4077s - behaves the same as String#index(char) for one-character strings 4077s - returns the index of the first occurrence of the given substring 4077s - doesn't set $~ 4077s - ignores string subclasses 4077s - starts the search at the given offset 4077s - starts the search at offset + self.length if offset is negative 4077s - returns nil if the substring isn't found 4077s - returns the character index of a multibyte character 4077s - returns the character index after offset 4077s - returns the character index after a partial first match 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s - handles a substring in a superset encoding 4077s - handles a substring in a subset encoding 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s 4077s String#index with Regexp 4077s - behaves the same as String#index(string) for escaped string regexps 4077s - returns the index of the first match of regexp 4077s - sets $~ to MatchData of match and nil when there's none 4077s - starts the search at the given offset 4077s - starts the search at offset + self.length if offset is negative 4077s - returns nil if the substring isn't found 4077s - returns nil if the Regexp matches the empty string and the offset is out of range 4077s - supports \G which matches at the given start offset 4077s - converts start_offset to an integer via to_int 4077s - returns the character index of a multibyte character 4077s - returns the character index after offset 4077s - treats the offset as a character index 4077s 4077s String#initialize 4077s - is a private method 4077s 4077s String#initialize with no arguments 4077s - does not change self 4077s - does not raise an exception when frozen 4077s 4077s String#initialize with an argument 4077s - returns self 4077s - replaces the content of self with other 4077s - replaces the encoding of self with that of other 4077s - carries over the encoding invalidity 4077s - tries to convert other to string using to_str 4077s - raises a TypeError if other can't be converted to string 4077s - raises a FrozenError on a frozen instance that is modified 4077s - raises a FrozenError on a frozen instance when self-replacing 4077s 4077s String#insert with index, other 4077s - inserts other before the character at the given index 4077s - modifies self in place 4077s - inserts after the given character on an negative count 4077s - raises an IndexError if the index is beyond string 4077s - converts index to an integer using to_int 4077s - converts other to a string using to_str 4077s - raises a TypeError if other can't be converted to string 4077s - raises a FrozenError if self is frozen 4077s - inserts a character into a multibyte encoded string 4077s - returns a String in the compatible encoding 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s - should not call subclassed string methods 4077s 4077s String#inspect 4077s - does not return a subclass instance 4077s - returns a string with special characters replaced with \ notation 4077s - returns a string with special characters replaced with \ notation for UTF-16 4077s - returns a string with " and \ escaped with a backslash 4077s - returns a string with \# when # is followed by $, @, { 4077s - returns a string with # not escaped when followed by any other character 4077s - returns a string with printable non-alphanumeric characters unescaped 4077s - returns a string with numeric characters unescaped 4077s - returns a string with upper-case alpha characters unescaped 4077s - returns a string with lower-case alpha characters unescaped 4077s - returns a string with non-printing characters replaced by \x notation 4077s - returns a string with a NUL character replaced by \x notation 4077s - uses \x notation for broken UTF-8 sequences 4077s - works for broken US-ASCII strings 4077s 4077s String#inspect when default external is UTF-8 4077s - returns a string with non-printing characters replaced by \u notation for Unicode strings 4077s - returns a string with a NUL character replaced by \u notation 4077s - returns a string with extended characters for Unicode strings 4077s 4077s 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 4077s - returns a string with the non-ASCII characters replaced by \x notation 4077s 4077s 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 4077s - returns a string with the non-ASCII characters replaced by \u notation 4077s 4077s String#intern 4077s - returns the symbol corresponding to self 4077s - does not special case +(binary) and -(binary) 4077s - does not special case certain operators 4077s - returns a US-ASCII Symbol for a UTF-8 String containing only US-ASCII characters 4077s - returns a US-ASCII Symbol for a binary String containing only US-ASCII characters 4077s - returns a UTF-8 Symbol for a UTF-8 String containing non US-ASCII characters 4077s - returns a UTF-16LE Symbol for a UTF-16LE String containing non US-ASCII characters 4077s - returns a binary Symbol for a binary String containing non US-ASCII characters 4077s - raises an EncodingError for UTF-8 String containing invalid bytes 4077s 4077s String#length 4077s - returns the length of self 4077s - returns the length of a string in different encodings 4077s - returns the length of the new self after encoding is changed 4077s - returns the correct length after force_encoding(BINARY) 4077s - adds 1 for every invalid byte in UTF-8 4077s - adds 1 (and not 2) for a incomplete surrogate in UTF-16 4077s - adds 1 for a broken sequence in UTF-32 4077s 4077s String#lines 4077s - splits using default newline separator when none is specified 4077s - splits self using the supplied record separator and passes each substring to the block 4077s - splits strings containing multibyte characters 4077s - passes self as a whole to the block if the separator is nil 4077s - yields paragraphs (broken by 2 or more successive newlines) when passed '' and replaces multiple newlines with only two ones 4077s - yields String instances for subclasses 4077s - returns self 4077s - tries to convert the separator to a string using to_str 4077s - does not care if the string is modified while substituting 4077s - returns Strings in the same encoding as self 4077s - raises a TypeError when the separator can't be converted to a string 4077s - accepts a string separator 4077s - raises a TypeError when the separator is a symbol 4077s - returns an array when no block given 4077s 4077s String#lines uses $/ 4077s - as the separator when none is given 4077s 4077s String#lines when `chomp` keyword argument is passed 4077s - removes new line characters when separator is not specified 4077s - removes only specified separator 4077s - ignores new line characters when separator is specified 4077s 4077s String#lines when `chomp` keyword argument is passed 4077s - removes new line characters 4077s 4077s String#ljust with length, padding 4077s - returns a new string of specified length with self left justified and padded with padstr 4077s - pads with whitespace if no padstr is given 4077s - returns self if it's longer than or as long as the specified length 4077s - tries to convert length to an integer using to_int 4077s - raises a TypeError when length can't be converted to an integer 4077s - tries to convert padstr to a string using to_str 4077s - raises a TypeError when padstr can't be converted 4077s - raises an ArgumentError when padstr is empty 4077s - returns String instances when called on subclasses 4077s 4077s String#ljust with length, padding with width 4077s - returns a String in the same encoding as the original 4077s 4077s String#ljust with length, padding with width, pattern 4077s - returns a String in the compatible encoding 4077s - raises an Encoding::CompatibilityError if the encodings are incompatible 4077s 4077s String#lstrip 4077s - returns a String in the same encoding as self 4077s - returns String instances when called on a subclass 4077s - returns a copy of self with leading whitespace removed 4077s - works with lazy substrings 4077s - strips leading \0 4077s 4077s String#lstrip! 4077s - modifies self in place and returns self 4077s - returns nil if no modifications were made 4077s - makes a string empty if it is only whitespace 4077s - removes leading NULL bytes and whitespace 4077s - raises a FrozenError on a frozen instance that is modified 4077s - raises a FrozenError on a frozen instance that would not be modified 4077s - raises an ArgumentError if the first non-space codepoint is invalid 4077s 4077s String#=~ 4077s - behaves the same way as index() when given a regexp 4077s - raises a TypeError if a obj is a string 4077s - invokes obj.=~ with self if obj is neither a string nor regexp 4077s - sets $~ to MatchData when there is a match and nil when there's none 4077s - returns the character index of a found match 4077s 4077s String#match 4077s - matches the pattern against self 4077s - matches a literal Regexp that uses ASCII-only UTF-8 escape sequences 4077s - tries to convert pattern to a string via to_str 4077s - raises a TypeError if pattern is not a regexp or a string 4077s - converts string patterns to regexps without escaping 4077s - returns nil if there's no match 4077s - matches \G at the start of the string 4077s - sets $~ to MatchData of match or nil when there is none 4077s - calls match on the regular expression 4077s 4077s String#match with [pattern, position] when given a positive position 4077s - matches the pattern against self starting at an optional index 4077s - uses the start as a character offset 4077s 4077s String#match with [pattern, position] when given a negative position 4077s - matches the pattern against self starting at an optional index 4077s - uses the start as a character offset 4077s 4077s String#match when passed a block 4077s - yields the MatchData 4077s - returns the block result 4077s - does not yield if there is no match 4077s 4077s String#match? 4077s - returns false when does not match the given regex 4077s - takes matching position as the 2nd argument 4077s 4077s String#match? when matches the given regex 4077s - returns true but does not set Regexp.last_match 4077s 4077s String#% 4077s - does not raise error when passed more arguments than needed 4077s - can produce a string with valid encoding 4077s - can produce a string with invalid encoding 4077s - returns a String in the same encoding as the format String if compatible 4077s - returns a String in the argument's encoding if format encoding is more restrictive 4077s - raises Encoding::CompatibilityError if both encodings are ASCII compatible and there are not ASCII characters 4077s 4077s String#% integer formats 4077s - converts argument into Integer with to_int 4077s - converts argument into Integer with to_i if to_int isn't available 4077s - converts String argument with Kernel#Integer 4077s - raises TypeError exception if cannot convert to Integer 4077s 4077s String#% integer formats b 4077s - converts argument as a binary number 4077s - displays negative number as a two's complement prefixed with '..1' 4077s - collapse negative number representation if it equals 1 4077s 4077s String#% integer formats B 4077s - converts argument as a binary number 4077s - displays negative number as a two's complement prefixed with '..1' 4077s - collapse negative number representation if it equals 1 4077s 4077s String#% integer formats d 4077s - converts argument as a decimal number 4077s - works well with large numbers 4077s 4077s String#% integer formats i 4077s - converts argument as a decimal number 4077s - works well with large numbers 4077s 4077s String#% integer formats u 4077s - converts argument as a decimal number 4077s - works well with large numbers 4077s 4077s String#% integer formats o 4077s - converts argument as an octal number 4077s - displays negative number as a two's complement prefixed with '..7' 4077s - collapse negative number representation if it equals 7 4077s 4077s String#% integer formats x 4077s - converts argument as a hexadecimal number 4077s - displays negative number as a two's complement prefixed with '..f' 4077s - collapse negative number representation if it equals f 4077s 4077s String#% integer formats X 4077s - converts argument as a hexadecimal number with uppercase letters 4077s - displays negative number as a two's complement prefixed with '..f' 4077s - collapse negative number representation if it equals F 4077s 4077s String#% float formats 4077s - converts argument into Float 4077s - raises TypeError exception if cannot convert to Float 4077s 4077s String#% float formats e 4077s - converts argument into exponential notation [-]d.dddddde[+-]dd 4077s - cuts excessive digits and keeps only 6 ones 4077s - rounds the last significant digit to the closest one 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats E 4077s - converts argument into exponential notation [-]d.dddddde[+-]dd 4077s - cuts excessive digits and keeps only 6 ones 4077s - rounds the last significant digit to the closest one 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats f 4077s - converts floating point argument as [-]ddd.dddddd 4077s - cuts excessive digits and keeps only 6 ones 4077s - rounds the last significant digit to the closest one 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats g 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats g the exponent is less than -4 4077s - converts a floating point number using exponential form 4077s 4077s String#% float formats g the exponent is greater than or equal to the precision (6 by default) 4077s - converts a floating point number using exponential form 4077s 4077s String#% float formats g otherwise 4077s - converts a floating point number in dd.dddd form 4077s - cuts excessive digits in fractional part and keeps only 4 ones 4077s - rounds the last significant digit to the closest one in fractional part 4077s - cuts fraction part to have only 6 digits at all 4077s 4077s String#% float formats G 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats G the exponent is less than -4 4077s - converts a floating point number using exponential form 4077s 4077s String#% float formats G the exponent is greater than or equal to the precision (6 by default) 4077s - converts a floating point number using exponential form 4077s 4077s String#% float formats G otherwise 4077s - converts a floating point number in dd.dddd form 4077s - cuts excessive digits in fractional part and keeps only 4 ones 4077s - rounds the last significant digit to the closest one in fractional part 4077s - cuts fraction part to have only 6 digits at all 4077s 4077s String#% float formats a 4077s - converts floating point argument as [-]0xh.hhhhp[+-]dd 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% float formats A 4077s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 4077s - displays Float::INFINITY as Inf 4077s - displays Float::NAN as NaN 4077s 4077s String#% other formats c 4077s - displays character if argument is a numeric code of character 4077s - displays character if argument is a single character string 4077s - raises ArgumentError if argument is a string of several characters 4077s - raises ArgumentError if argument is an empty string 4077s - raises TypeError if argument is not String or Integer and cannot be converted to them 4077s - raises TypeError if argument is nil 4077s - tries to convert argument to String with to_str 4077s - tries to convert argument to Integer with to_int 4077s - raises TypeError if converting to String with to_str returns non-String 4077s - raises TypeError if converting to Integer with to_int returns non-Integer 4077s 4077s String#% other formats p 4077s - displays argument.inspect value 4077s 4077s String#% other formats s 4077s - substitute argument passes as a string 4077s - substitutes '' for nil 4077s - converts argument to string with to_s 4077s - does not try to convert with to_str 4077s - formats a partial substring without including omitted characters 4077s - formats string with precision 4077s - formats string with width 4077s - formats string with width and precision 4077s - formats nil with width 4077s - formats nil with precision 4077s - formats nil with width and precision 4077s - formats multibyte string with precision 4077s - preserves encoding of the format string 4077s 4077s String#% other formats % 4077s - alone raises an ArgumentError 4077s - is escaped by % 4077s 4077s String#% flags space applies to numeric formats bBdiouxXeEfgGaA 4077s - leaves a space at the start of non-negative numbers 4077s - does not leave a space at the start of negative numbers 4077s - prevents converting negative argument to two's complement form 4077s - treats several white spaces as one 4077s 4077s String#% flags (digit)$ 4077s - specifies the absolute argument number for this field 4077s - raises exception if argument number is bigger than actual arguments list 4077s - ignores '-' sign 4077s - raises ArgumentError exception when absolute and relative argument numbers are mixed 4077s 4077s String#% flags # applies to format o 4077s - increases the precision until the first digit will be `0' if it is not formatted as complements 4077s - does nothing for negative argument 4077s 4077s String#% flags # applies to formats bBxX 4077s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 4077s - does nothing for zero argument 4077s 4077s String#% flags # applies to formats aAeEfgG 4077s - forces a decimal point to be added, even if no digits follow 4077s - changes format from dd.dddd to exponential form for gG 4077s 4077s String#% flags # applies to gG 4077s - does not remove trailing zeros 4077s 4077s String#% flags + applies to numeric formats bBdiouxXaAeEfgG 4077s - adds a leading plus sign to non-negative numbers 4077s - does not use two's complement form for negative numbers for formats bBoxX 4077s 4077s String#% flags - 4077s - left-justifies the result of conversion if width is specified 4077s 4077s String#% flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 4077s - pads with zeros, not spaces 4077s - uses radix-1 when displays negative argument as a two's complement 4077s 4077s String#% flags * 4077s - uses the previous argument as the field width 4077s - left-justifies the result if width is negative 4077s - uses the specified argument as the width if * is followed by a number and $ 4077s - left-justifies the result if specified with $ argument is negative 4077s - raises ArgumentError when is mixed with width 4077s 4077s String#% width 4077s - specifies the minimum number of characters that will be written to the result 4077s - is ignored if argument's actual length is greater 4077s 4077s String#% precision integer types 4077s - controls the number of decimal places displayed 4077s 4077s String#% precision float types 4077s - controls the number of decimal places displayed in fraction part 4077s - does not affect G format 4077s 4077s String#% precision string formats 4077s - determines the maximum number of characters to be copied from the string 4077s 4077s String#% reference by name %s style 4077s - uses value passed in a hash argument 4077s - supports flags, width, precision and type 4077s - allows to place name in any position 4077s - cannot be mixed with unnamed style 4077s 4077s String#% reference by name %{name} style 4077s - uses value passed in a hash argument 4077s - does not support type style 4077s - supports flags, width and precision 4077s - cannot be mixed with unnamed style 4077s - raises KeyError when there is no matching key 4077s - converts value to String with to_s 4077s 4077s String#% faulty key 4077s - raises a KeyError 4077s - sets the Hash as the receiver of KeyError 4077s - sets the unmatched key as the key of KeyError 4077s 4077s String#% %c 4077s - supports Unicode characters 4077s - raises error when a codepoint isn't representable in an encoding of a format string 4077s - uses the encoding of the format string to interpret codepoints 4077s 4077s String#% 4077s - formats multiple expressions 4077s - formats expressions mid string 4077s - formats %% into % 4077s - raises an error if single % appears at the end 4077s - formats single % character before a newline as literal % 4077s - formats single % character before a NUL as literal % 4077s - raises an error if single % appears anywhere else 4077s - raises an error if NULL or \n appear anywhere else in the format string 4077s - ignores unused arguments when $DEBUG is false 4077s - raises an ArgumentError for unused arguments when $DEBUG is true 4077s - always allows unused arguments when positional argument style is used 4077s - replaces trailing absolute argument specifier without type with percent sign 4077s - raises an ArgumentError when given invalid argument specifiers 4077s - raises an ArgumentError when multiple positional argument tokens are given for one format specifier 4077s - respects positional arguments and precision tokens given for one format specifier 4077s - allows more than one digit of position 4077s - raises an ArgumentError when multiple width star tokens are given for one format specifier 4077s - raises an ArgumentError when a width star token is seen after a width token 4077s - raises an ArgumentError when multiple precision tokens are given 4077s - raises an ArgumentError when there are less arguments than format specifiers 4077s - raises an ArgumentError when absolute and relative argument numbers are mixed 4077s - allows reuse of the one argument multiple via absolute argument numbers 4077s - always interprets an array argument as a list of argument parameters 4077s - always interprets an array subclass argument as a list of argument parameters 4077s - allows positional arguments for width star and precision star arguments 4077s - allows negative width to imply '-' flag 4077s - ignores negative precision 4077s - allows a star to take an argument number to use as the width 4077s - calls to_int on width star and precision star tokens 4077s - does not call #to_a to convert the argument 4077s - calls #to_ary to convert the argument 4077s - wraps the object in an Array if #to_ary returns nil 4077s - raises a TypeError if #to_ary does not return an Array 4077s - tries to convert the argument to Array by calling #to_ary 4077s - doesn't return subclass instances when called on a subclass 4077s - supports binary formats using %b for positive numbers 4077s - supports binary formats using %b for negative numbers 4077s - supports binary formats using %B with same behaviour as %b except for using 0B instead of 0b for # 4077s - supports character formats using %c 4077s - supports single character strings as argument for %c 4077s - raises an exception for multiple character strings as argument for %c 4077s - calls to_str on argument for %c formats 4077s - calls #to_ary on argument for %c formats 4077s - calls #to_int on argument for %c formats, if the argument does not respond to #to_ary 4077s - supports integer formats using %d 4077s - supports negative integers using %d 4077s - supports negative integers using %d, giving priority to `-` 4077s - supports integer formats using %i 4077s - supports negative integers using %i 4077s - supports negative integers using %i, giving priority to `-` 4077s - supports float formats using %e 4077s - supports float formats using %e, but Inf, -Inf, and NaN are not floats 4077s - supports float formats using %E, but Inf, -Inf, and NaN are not floats 4077s - supports float formats using %E 4077s - pads with spaces for %E with Inf, -Inf, and NaN 4077s - supports float formats using %f 4077s - supports float formats using %g 4077s - supports float formats using %G 4077s - supports octal formats using %o for positive numbers 4077s - supports octal formats using %o for negative numbers 4077s - supports inspect formats using %p 4077s - calls inspect on arguments for %p format 4077s - supports string formats using %s 4077s - respects a space padding request not as part of the width 4077s - calls to_s on non-String arguments for %s format 4077s - raises an ArgumentError for huge precisions for %s 4077s - supports unsigned formats using %u 4077s - formats negative values with a leading sign using %u 4077s - supports negative bignums with %u or %d 4077s - supports hex formats using %x for positive numbers 4078s - supports hex formats using %x for negative numbers 4078s - supports hex formats using %X for positive numbers 4078s - supports hex formats using %X for negative numbers 4078s - formats zero without prefix using %#x 4078s - formats zero without prefix using %#X 4078s - behaves as if calling Kernel#Integer for %b argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %d argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %i argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %o argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %u argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %x argument, if it does not respond to #to_ary 4078s - behaves as if calling Kernel#Integer for %X argument, if it does not respond to #to_ary 4078s - tries to convert the passed argument to an Array using #to_ary 4078s - behaves as if calling Kernel#Float for %e arguments, when the passed argument does not respond to #to_ary 4078s - behaves as if calling Kernel#Float for %e arguments, when the passed argument is hexadecimal string 4078s - tries to convert the passed argument to an Array using #to_ary 4078s - behaves as if calling Kernel#Float for %E arguments, when the passed argument does not respond to #to_ary 4078s - behaves as if calling Kernel#Float for %E arguments, when the passed argument is hexadecimal string 4078s - tries to convert the passed argument to an Array using #to_ary 4078s - behaves as if calling Kernel#Float for %f arguments, when the passed argument does not respond to #to_ary 4078s - behaves as if calling Kernel#Float for %f arguments, when the passed argument is hexadecimal string 4078s - tries to convert the passed argument to an Array using #to_ary 4078s - behaves as if calling Kernel#Float for %g arguments, when the passed argument does not respond to #to_ary 4078s - behaves as if calling Kernel#Float for %g arguments, when the passed argument is hexadecimal string 4078s - tries to convert the passed argument to an Array using #to_ary 4078s - behaves as if calling Kernel#Float for %G arguments, when the passed argument does not respond to #to_ary 4078s - behaves as if calling Kernel#Float for %G arguments, when the passed argument is hexadecimal string 4078s 4078s String#% when key is missing from passed-in hash 4078s - raises a KeyError 4078s - sets the Hash as the receiver of KeyError 4078s - sets the unmatched key as the key of KeyError 4078s 4078s String#% output's encoding 4078s - is the same as the format string if passed value is encoding-compatible 4078s - negotiates a compatible encoding if necessary 4078s - raises if a compatible encoding can't be found 4078s 4078s String#% when format string contains %{} sections 4078s - replaces %{} sections with values from passed-in hash 4078s - should raise ArgumentError if no hash given 4078s 4078s String#% when format string contains %<> formats 4078s - uses the named argument for the format's value 4078s - raises KeyError if key is missing from passed-in hash 4078s - should raise ArgumentError if no hash given 4078s 4078s String#* 4078s - returns a new string containing count copies of self 4078s - tries to convert the given argument to an integer using to_int 4078s - raises a RangeError when given integer is a Bignum 4078s - returns String instances 4078s - returns a String in the same encoding as self 4078s 4078s String.new 4078s - returns an instance of String 4078s - accepts an encoding argument 4078s - accepts a capacity argument 4078s - returns a fully-formed String 4078s - returns a new string given a string argument 4078s - returns an instance of a subclass 4078s - is called on subclasses 4078s - raises TypeError on inconvertible object 4078s - returns a binary String 4078s 4078s String#next 4078s - returns an empty string for empty strings 4078s - returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) 4078s - increases non-alphanumerics (via ascii rules) if there are no alphanumerics 4078s - increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry 4078s - increases the next best character if there is a carry for non-alphanumerics 4078s - adds an additional character (just left to the last increased one) if there is a carry and no character left to increase 4078s - returns String instances when called on a subclass 4078s - returns a String in the same encoding as self 4078s 4078s String#next! 4078s - is equivalent to succ, but modifies self in place (still returns self) 4078s - raises a FrozenError if self is frozen 4078s 4078s String#oct 4078s - treats numeric digits as base-8 digits by default 4078s - accepts numbers formatted as binary 4078s - accepts numbers formatted as hexadecimal 4078s - accepts numbers formatted as decimal 4078s - accepts a single underscore separating digits 4078s - does not accept a sequence of underscores as part of a number 4078s - ignores characters that are incorrect for the base-8 digits 4078s - returns 0 if no characters can be interpreted as a base-8 number 4078s - returns 0 for strings with leading underscores 4078s 4078s String#oct with a leading minus sign 4078s - treats numeric digits as base-8 digits by default 4078s - accepts numbers formatted as binary 4078s - accepts numbers formatted as hexadecimal 4078s - accepts numbers formatted as decimal 4078s 4078s String#oct with a leading plus sign 4078s - treats numeric digits as base-8 digits by default 4078s - accepts numbers formatted as binary 4078s - accepts numbers formatted as hexadecimal 4078s - accepts numbers formatted as decimal 4078s 4078s String#ord 4078s - returns an Integer 4078s - returns the codepoint of the first character in the String 4078s - ignores subsequent characters 4078s - understands multibyte characters 4078s - is equivalent to #codepoints.first 4078s - raises an ArgumentError if called on an empty String 4078s - raises ArgumentError if the character is broken 4078s 4078s String#partition with String 4078s - returns String instances when called on a subclass 4078s - returns before- and after- parts in the same encoding as self 4078s - returns the matching part in the separator's encoding 4078s - returns an array of substrings based on splitting on the given string 4078s - always returns 3 elements 4078s - accepts regexp 4078s - sets global vars if regexp used 4078s - converts its argument using :to_str 4078s - raises an error if not convertible to string 4078s - takes precedence over a given block 4078s - handles a pattern in a superset encoding 4078s - handles a pattern in a subset encoding 4078s 4078s String#+ 4078s - converts the given argument to a String using to_str 4078s - raises a TypeError if the given argument can't be converted to a String 4078s - raises a NoMethodError if the given argument raises a NoMethodError during type coercion to a String 4078s - returns a new string containing the given string concatenated to self 4078s - converts any non-String argument with #to_str 4078s - raises a TypeError when given any object that fails #to_str 4078s - doesn't return subclass instances 4078s 4078s String#+ when self is in an ASCII-incompatible encoding incompatible with the argument's encoding 4078s - uses self's encoding if both are empty 4078s - uses self's encoding if the argument is empty 4078s - uses the argument's encoding if self is empty 4078s - raises Encoding::CompatibilityError if neither are empty 4078s 4078s String#+ when the argument is in an ASCII-incompatible encoding incompatible with self's encoding 4078s - uses self's encoding if both are empty 4078s - uses self's encoding if the argument is empty 4078s - uses the argument's encoding if self is empty 4078s - raises Encoding::CompatibilityError if neither are empty 4078s 4078s String#+ when self and the argument are in different ASCII-compatible encodings 4078s - uses self's encoding if both are ASCII-only 4078s - uses self's encoding if the argument is ASCII-only 4078s - uses the argument's encoding if self is ASCII-only 4078s - raises Encoding::CompatibilityError if neither are ASCII-only 4078s 4078s String#+ when self is BINARY and argument is US-ASCII 4078s - uses BINARY encoding 4078s 4078s String#prepend 4078s - prepends the given argument to self and returns self 4078s - converts the given argument to a String using to_str 4078s - raises a TypeError if the given argument can't be converted to a String 4078s - raises a FrozenError when self is frozen 4078s - works when given a subclass instance 4078s - takes multiple arguments 4078s - prepends the initial value when given arguments contain 2 self 4078s - returns self when given no arguments 4078s 4078s String#replace 4078s - returns self 4078s - replaces the content of self with other 4078s - replaces the encoding of self with that of other 4078s - carries over the encoding invalidity 4078s - tries to convert other to string using to_str 4078s - raises a TypeError if other can't be converted to string 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance when self-replacing 4078s 4078s String#reverse 4078s - returns a new string with the characters of self in reverse order 4078s - returns String instances when called on a subclass 4078s - reverses a string with multi byte characters 4078s - works with a broken string 4078s - returns a String in the same encoding as self 4078s 4078s String#reverse! 4078s - reverses self in place and always returns self 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance that would not be modified 4078s - reverses a string with multi byte characters 4078s - works with a broken string 4078s 4078s String#rindex with object 4078s - raises a TypeError if obj isn't a String or Regexp 4078s - raises a TypeError if obj is an Integer 4078s - doesn't try to convert obj to an integer via to_int 4078s - tries to convert obj to a string via to_str 4078s 4078s String#rindex with String 4078s - behaves the same as String#rindex(char) for one-character strings 4078s - behaves the same as String#rindex(?char) for one-character strings 4078s - returns the index of the last occurrence of the given substring 4078s - doesn't set $~ 4078s - ignores string subclasses 4078s - starts the search at the given offset 4078s - starts the search at offset + self.length if offset is negative 4078s - returns nil if the substring isn't found 4078s - tries to convert start_offset to an integer via to_int 4078s - raises a TypeError when given offset is nil 4078s - handles a substring in a superset encoding 4078s - handles a substring in a subset encoding 4078s - raises an Encoding::CompatibilityError if the encodings are incompatible 4078s 4078s String#rindex with Regexp 4078s - behaves the same as String#rindex(string) for escaped string regexps 4078s - returns the index of the first match from the end of string of regexp 4078s - sets $~ to MatchData of match and nil when there's none 4078s - starts the search at the given offset 4078s - starts the search at offset + self.length if offset is negative 4078s - returns nil if the substring isn't found 4078s - supports \G which matches at the given start offset 4078s - tries to convert start_offset to an integer via to_int 4078s - raises a TypeError when given offset is nil 4078s - returns the reverse character index of a multibyte character 4078s - returns the character index before the finish 4078s - raises an Encoding::CompatibilityError if the encodings are incompatible 4078s 4078s String#rjust with length, padding 4078s - returns a new string of specified length with self right justified and padded with padstr 4078s - pads with whitespace if no padstr is given 4078s - returns self if it's longer than or as long as the specified length 4078s - tries to convert length to an integer using to_int 4078s - raises a TypeError when length can't be converted to an integer 4078s - tries to convert padstr to a string using to_str 4078s - raises a TypeError when padstr can't be converted 4078s - raises an ArgumentError when padstr is empty 4078s - returns String instances when called on subclasses 4078s 4078s String#rjust with length, padding with width 4078s - returns a String in the same encoding as the original 4078s 4078s String#rjust with length, padding with width, pattern 4078s - returns a String in the compatible encoding 4078s - raises an Encoding::CompatibilityError if the encodings are incompatible 4078s 4078s String#rpartition with String 4078s - returns String instances when called on a subclass 4078s - returns before- and after- parts in the same encoding as self 4078s - returns the matching part in the separator's encoding 4078s - returns an array of substrings based on splitting on the given string 4078s - always returns 3 elements 4078s - returns original string if regexp doesn't match 4078s - returns new object if doesn't match 4078s - handles multibyte string correctly 4078s - accepts regexp 4078s - affects $~ 4078s - converts its argument using :to_str 4078s - raises an error if not convertible to string 4078s - handles a pattern in a superset encoding 4078s - handles a pattern in a subset encoding 4078s 4078s String#rstrip 4078s - returns a String in the same encoding as self 4078s - returns String instances when called on a subclass 4078s - returns a copy of self with trailing whitespace removed 4078s - works with lazy substrings 4078s - returns a copy of self with all trailing whitespace and NULL bytes removed 4078s 4078s String#rstrip! 4078s - modifies self in place and returns self 4078s - modifies self removing trailing NULL bytes and whitespace 4078s - returns nil if no modifications were made 4078s - makes a string empty if it is only whitespace 4078s - removes trailing NULL bytes and whitespace 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance that would not be modified 4078s - raises an ArgumentError if the last non-space codepoint is invalid 4078s 4078s String#scan 4078s - returns an array containing all matches 4078s - respects unicode when the pattern collapses to nothing 4078s - stores groups as arrays in the returned arrays 4078s - scans for occurrences of the string if pattern is a string 4078s - sets $~ to MatchData of last match and nil when there's none 4078s - supports \G which matches the end of the previous match / string start for first match 4078s - tries to convert pattern to a string via to_str 4078s - raises a TypeError if pattern isn't a Regexp and can't be converted to a String 4078s - does not raise any errors when passed a multi-byte string 4078s - returns Strings in the same encoding as self 4078s 4078s String#scan with pattern and block 4078s - returns self 4078s - passes each match to the block as one argument: an array 4078s - passes groups to the block as one argument: an array 4078s - sets $~ for access from the block 4078s - restores $~ after leaving the block 4078s - sets $~ to MatchData of last match and nil when there's none for access from outside 4078s - passes block arguments as individual arguments when blocks are provided 4078s - yields String instances for subclasses 4078s 4078s String#scrub with a default replacement 4078s - returns self for valid strings 4078s - replaces invalid byte sequences 4078s - replaces invalid byte sequences in lazy substrings 4078s - returns a copy of self when the input encoding is BINARY 4078s - replaces invalid byte sequences when using ASCII as the input encoding 4078s - returns a String in the same encoding as self 4078s - returns String instances when called on a subclass 4078s 4078s String#scrub with a custom replacement 4078s - returns self for valid strings 4078s - replaces invalid byte sequences 4078s - replaces invalid byte sequences in frozen strings 4078s - replaces an incomplete character at the end with a single replacement 4078s - raises ArgumentError for replacements with an invalid encoding 4078s - returns a String in the same encoding as self 4078s - raises TypeError when a non String replacement is given 4078s - returns String instances when called on a subclass 4078s 4078s String#scrub with a block 4078s - returns self for valid strings 4078s - replaces invalid byte sequences 4078s - replaces invalid byte sequences using a custom encoding 4078s - returns String instances when called on a subclass 4078s 4078s String#scrub! 4078s - modifies self for valid strings 4078s - accepts blocks 4078s - maintains the state of frozen strings that are already valid 4078s - preserves the instance variables of already valid strings 4078s - accepts a frozen string as a replacement 4078s 4078s String#setbyte 4078s - returns an Integer 4078s - modifies the receiver 4078s - changes the byte at the given index to the new byte 4078s - allows changing bytes in multi-byte characters 4078s - can invalidate a String's encoding 4078s - regards a negative index as counting from the end of the String 4078s - raises an IndexError if the index is greater than the String bytesize 4078s - raises an IndexError if the negative index is greater magnitude than the String bytesize 4078s - sets a byte at an index greater than String size 4078s - does not modify the original string when using String.new 4078s - raises a FrozenError if self is frozen 4078s - raises a TypeError unless the second argument is an Integer 4078s - calls #to_int to convert the index 4078s - calls to_int to convert the value 4078s 4078s String#size 4078s - returns the length of self 4078s - returns the length of a string in different encodings 4078s - returns the length of the new self after encoding is changed 4078s - returns the correct length after force_encoding(BINARY) 4078s - adds 1 for every invalid byte in UTF-8 4078s - adds 1 (and not 2) for a incomplete surrogate in UTF-16 4078s - adds 1 for a broken sequence in UTF-32 4078s 4078s String#slice 4078s - returns the character code of the character at the given index 4078s - returns nil if index is outside of self 4078s - calls to_int on the given index 4078s - raises a TypeError if the given index is nil 4078s - raises a TypeError if the given index can't be converted to an Integer 4078s - raises a RangeError if the index is too big 4078s 4078s String#slice with index, length 4078s - returns the substring starting at the given index with the given length 4078s - returns a string with the same encoding as self 4078s - returns nil if the length is negative 4078s - calls to_int on the given index and the given length 4078s - raises a TypeError when idx or length can't be converted to an integer 4078s - raises a TypeError when the given index or the given length is nil 4078s - raises a RangeError if the index or length is too big 4078s - returns String instances 4078s - handles repeated application 4078s 4078s String#slice with Range 4078s - returns the substring given by the offsets of the range 4078s - returns a String in the same encoding as self 4078s - returns nil if the beginning of the range falls outside of self 4078s - returns an empty string if range.begin is inside self and > real end 4078s - returns String instances 4078s - calls to_int on range arguments 4078s - works with Range subclasses 4078s - handles repeated application 4078s - raises a type error if a range is passed with a length 4078s - raises a RangeError if one of the bound is too big 4078s - works with endless ranges 4078s - works with beginless ranges 4078s 4078s String#slice with Regexp 4078s - returns the matching portion of self 4078s - returns nil if there is no match 4078s - returns a String in the same encoding as self 4078s - returns String instances 4078s - sets $~ to MatchData when there is a match and nil when there's none 4078s 4078s String#slice with Regexp, index 4078s - returns the capture for the given index 4078s - returns nil if there is no match 4078s - returns nil if the index is larger than the number of captures 4078s - returns nil if there is no capture for the given index 4078s - returns nil if the given capture group was not matched but still sets $~ 4078s - returns a String in the same encoding as self 4078s - calls to_int on the given index 4078s - raises a TypeError when the given index can't be converted to Integer 4078s - raises a TypeError when the given index is nil 4078s - returns String instances 4078s - sets $~ to MatchData when there is a match and nil when there's none 4078s 4078s String#slice with Regexp, group 4078s - returns the capture for the given name 4078s - returns the last capture for duplicate names 4078s - returns the innermost capture for nested duplicate names 4078s - returns nil if there is no match 4078s - raises an IndexError if there is no capture for the given name 4078s - raises a TypeError when the given name is not a String 4078s - raises an IndexError when given the empty String as a group name 4078s - returns String instances 4078s - sets $~ to MatchData when there is a match and nil when there's none 4078s 4078s String#slice with String 4078s - returns other_str if it occurs in self 4078s - doesn't set $~ 4078s - returns nil if there is no match 4078s - doesn't call to_str on its argument 4078s - returns a String instance when given a subclass instance 4078s 4078s String#slice with Symbol 4078s - raises TypeError 4078s 4078s String#slice! with index 4078s - deletes and return the char at the given position 4078s - returns nil if idx is outside of self 4078s - raises a FrozenError if self is frozen 4078s - calls to_int on index 4078s - returns the character given by the character index 4078s 4078s String#slice! with index, length 4078s - deletes and returns the substring at idx and the given length 4078s - returns nil if the given position is out of self 4078s - returns nil if the length is negative 4078s - raises a FrozenError if self is frozen 4078s - calls to_int on idx and length 4078s - returns String instances 4078s - returns the substring given by the character offsets 4078s - treats invalid bytes as single bytes 4078s 4078s String#slice! Range 4078s - deletes and return the substring given by the offsets of the range 4078s - returns nil if the given range is out of self 4078s - returns String instances 4078s - calls to_int on range arguments 4078s - works with Range subclasses 4078s - returns the substring given by the character offsets of the range 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance that would not be modified 4078s 4078s String#slice! with Regexp 4078s - deletes and returns the first match from self 4078s - returns nil if there was no match 4078s - returns String instances 4078s - returns the matching portion of self with a multi byte character 4078s - sets $~ to MatchData when there is a match and nil when there's none 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance that would not be modified 4078s 4078s String#slice! with Regexp, index 4078s - deletes and returns the capture for idx from self 4078s - returns nil if there was no match 4078s - returns nil if there is no capture for idx 4078s - accepts a Float for capture index 4078s - calls #to_int to convert an Object to capture index 4078s - returns String instances 4078s - returns the encoding aware capture for the given index 4078s - sets $~ to MatchData when there is a match and nil when there's none 4078s - raises a FrozenError if self is frozen 4078s 4078s String#slice! with String 4078s - removes and returns the first occurrence of other_str from self 4078s - doesn't set $~ 4078s - returns nil if self does not contain other 4078s - doesn't call to_str on its argument 4078s - returns a subclass instance when given a subclass instance 4078s - raises a FrozenError if self is frozen 4078s 4078s String#split with String 4078s - throws an ArgumentError if the string is not a valid 4078s - throws an ArgumentError if the pattern is not a valid string 4078s - splits on multibyte characters 4078s - returns an array of substrings based on splitting on the given string 4078s - suppresses trailing empty fields when limit isn't given or 0 4078s - does not suppress trailing empty fields when a positive limit is given 4078s - returns an array with one entry if limit is 1: the original string 4078s - returns at most limit fields when limit > 1 4078s - doesn't suppress or limit fields when limit is negative 4078s - raises a RangeError when the limit is larger than int 4078s - defaults to $; when string isn't given or nil 4078s - ignores leading and continuous whitespace when string is a single space 4078s - splits between characters when its argument is an empty string 4078s - tries converting its pattern argument to a string via to_str 4078s - tries converting limit to an integer via to_int 4078s - doesn't set $~ 4078s - returns the original string if no matches are found 4078s - returns String instances based on self 4078s - returns an empty array when whitespace is split on whitespace 4078s - doesn't split on non-ascii whitespace 4078s - returns Strings in the same encoding as self 4078s 4078s String#split with String when limit is zero 4078s - ignores leading and continuous whitespace when string is a single space 4078s 4078s String#split with String when $; is not nil 4078s - warns 4078s 4078s String#split with Regexp 4078s - throws an ArgumentError if the string is not a valid 4078s - divides self on regexp matches 4078s - treats negative limits as no limit 4078s - suppresses trailing empty fields when limit isn't given or 0 4078s - returns an array with one entry if limit is 1: the original string 4078s - returns at most limit fields when limit > 1 4078s - doesn't suppress or limit fields when limit is negative 4078s - defaults to $; when regexp isn't given or nil 4078s - splits between characters when regexp matches a zero-length string 4078s - respects unicode when splitting between characters 4078s - respects the encoding of the regexp when splitting between characters 4078s - includes all captures in the result array 4078s - applies the limit to the number of split substrings, without counting captures 4078s - does not include non-matching captures in the result array 4078s - tries converting limit to an integer via to_int 4078s - returns a type error if limit can't be converted to an integer 4078s - doesn't set $~ 4078s - returns the original string if no matches are found 4078s - returns String instances based on self 4078s - returns Strings in the same encoding as self 4078s - splits a string on each character for a multibyte encoding and empty split 4078s - returns an ArgumentError if an invalid UTF-8 string is supplied 4078s - allows concurrent Regexp calls in a shared context 4078s - raises a TypeError when not called with nil, String, or Regexp 4078s - returns Strings in the same encoding as self 4078s 4078s String#split with Regexp when a block is given 4078s - yields each split substring with default pattern 4078s - yields each split substring with default pattern for a lazy substring 4078s - yields each split substring with default pattern for a non-ASCII string 4078s - yields each split substring with default pattern for a non-ASCII lazy substring 4078s - yields the string when limit is 1 4078s - yields each split letter 4078s - yields each split substring with a pattern 4078s - yields each split substring with empty regexp pattern 4078s - yields each split substring with empty regexp pattern and limit 4078s - yields each split substring with a regexp pattern 4078s - returns a string as is (and doesn't call block) if it is empty 4078s 4078s String#split with Regexp for a String subclass 4078s - yields instances of String 4078s 4078s String#squeeze 4078s - returns new string where runs of the same character are replaced by a single character when no args are given 4078s - only squeezes chars that are in the intersection of all sets given 4078s - negates sets starting with ^ 4078s - squeezes all chars in a sequence 4078s - raises an ArgumentError when the parameter is out of sequence 4078s - tries to convert each set arg to a string using to_str 4078s - returns a String in the same encoding as self 4078s - raises a TypeError when one set arg can't be converted to a string 4078s - returns String instances when called on a subclass 4078s 4078s String#squeeze! 4078s - modifies self in place and returns self 4078s - returns nil if no modifications were made 4078s - raises an ArgumentError when the parameter is out of sequence 4078s - raises a FrozenError when self is frozen 4078s 4078s String#start_with? 4078s - returns true only if beginning match 4078s - returns true only if any beginning match 4078s - returns true if the search string is empty 4078s - converts its argument using :to_str 4078s - ignores arguments not convertible to string 4078s - uses only the needed arguments 4078s - works for multibyte strings 4078s - supports regexps 4078s - supports regexps with ^ and $ modifiers 4078s - sets Regexp.last_match if it returns true 4078s - does not check that we are not matching part of a character 4078s - matches part of a character with the same part 4078s - does not check we are matching only part of a character 4078s 4078s String 4078s - includes Comparable 4078s 4078s String#strip 4078s - returns a String in the same encoding as self 4078s - returns String instances when called on a subclass 4078s - returns a new string with leading and trailing whitespace removed 4078s - returns a copy of self without leading and trailing NULL bytes and whitespace 4078s 4078s String#strip! 4078s - modifies self in place and returns self 4078s - returns nil if no modifications where made 4078s - makes a string empty if it is only whitespace 4078s - removes leading and trailing NULL bytes and whitespace 4078s - raises a FrozenError on a frozen instance that is modified 4078s - raises a FrozenError on a frozen instance that would not be modified 4078s 4078s String#sub with pattern, replacement 4078s - returns a copy of self when no modification is made 4078s - returns a copy of self with all occurrences of pattern replaced with replacement 4078s - ignores a block if supplied 4078s - supports \G which matches at the beginning of the string 4078s - supports /i for ignoring case 4078s - doesn't interpret regexp metacharacters if pattern is a string 4078s - replaces \1 sequences with the regexp's corresponding capture 4078s - treats \1 sequences without corresponding captures as empty strings 4078s - replaces \& and \0 with the complete match 4078s - replaces \` with everything before the current match 4078s - replaces \' with everything after the current match 4078s - replaces \\\+ with \\+ 4078s - replaces \+ with the last paren that actually matched 4078s - treats \+ as an empty string if there was no captures 4078s - maps \\ in replacement to \ 4078s - leaves unknown \x escapes in replacement untouched 4078s - leaves \ at the end of replacement untouched 4078s - tries to convert pattern to a string using to_str 4078s - raises a TypeError when pattern is a Symbol 4078s - raises a TypeError when pattern is an Array 4078s - raises a TypeError when pattern can't be converted to a string 4078s - tries to convert replacement to a string using to_str 4078s - raises a TypeError when replacement can't be converted to a string 4078s - returns String instances when called on a subclass 4078s - sets $~ to MatchData of match and nil when there's none 4078s - replaces \\\1 with \1 4078s - replaces \\\\1 with \1 4078s - replaces \\\\\1 with \ 4078s - handles a pattern in a superset encoding 4078s - handles a pattern in a subset encoding 4078s 4078s String#sub with pattern and block 4078s - returns a copy of self with the first occurrences of pattern replaced with the block's return value 4078s - sets $~ for access from the block 4078s - sets $~ to MatchData of last match and nil when there's none for access from outside 4078s - doesn't raise a RuntimeError if the string is modified while substituting 4078s - doesn't interpolate special sequences like \1 for the block's return value 4078s - converts the block's return value to a string using to_s 4078s 4078s String#sub! with pattern, replacement 4078s - modifies self in place and returns self 4078s - returns nil if no modifications were made 4078s - raises a FrozenError when self is frozen 4078s - handles a pattern in a superset encoding 4078s - handles a pattern in a subset encoding 4078s 4078s String#sub! with pattern and block 4078s - modifies self in place and returns self 4078s - sets $~ for access from the block 4078s - returns nil if no modifications were made 4078s - raises a RuntimeError if the string is modified while substituting 4078s - raises a FrozenError when self is frozen 4078s 4078s String#sub with pattern and Hash 4078s - returns a copy of self with the first occurrence of pattern replaced with the value of the corresponding hash key 4078s - removes keys that don't correspond to matches 4078s - ignores non-String keys 4078s - uses a key's value only a single time 4078s - uses the hash's default value for missing keys 4078s - coerces the hash values with #to_s 4078s - uses the hash's value set from default_proc for missing keys 4078s - sets $~ to MatchData of first match and nil when there's none for access from outside 4078s - doesn't interpolate special sequences like \1 for the block's return value 4078s 4078s String#sub! with pattern and Hash 4078s - returns self with the first occurrence of pattern replaced with the value of the corresponding hash key 4078s - removes keys that don't correspond to matches 4078s - ignores non-String keys 4078s - uses a key's value only a single time 4078s - uses the hash's default value for missing keys 4078s - coerces the hash values with #to_s 4078s - uses the hash's value set from default_proc for missing keys 4078s - sets $~ to MatchData of first match and nil when there's none for access from outside 4078s - doesn't interpolate special sequences like \1 for the block's return value 4078s 4078s String#sub with pattern and without replacement and block 4078s - raises a ArgumentError 4078s 4078s String#sub! with pattern and without replacement and block 4078s - raises a ArgumentError 4078s 4078s String#succ 4078s - returns an empty string for empty strings 4078s - returns the successor by increasing the rightmost alphanumeric (digit => digit, letter => letter with same case) 4078s - increases non-alphanumerics (via ascii rules) if there are no alphanumerics 4078s - increases the next best alphanumeric (jumping over non-alphanumerics) if there is a carry 4078s - increases the next best character if there is a carry for non-alphanumerics 4078s - adds an additional character (just left to the last increased one) if there is a carry and no character left to increase 4078s - returns String instances when called on a subclass 4078s - returns a String in the same encoding as self 4078s 4078s String#succ! 4078s - is equivalent to succ, but modifies self in place (still returns self) 4078s - raises a FrozenError if self is frozen 4078s 4078s String#sum 4078s - returns a basic n-bit checksum of the characters in self 4078s - tries to convert n to an integer using to_int 4078s - returns sum of the bytes in self if n less or equal to zero 4078s 4078s String#swapcase 4078s - returns a new string with all uppercase chars from self converted to lowercase and vice versa 4078s - returns a String in the same encoding as self 4078s - does not allow the :fold option for upcasing 4078s - does not allow invalid options 4078s - returns String instances when called on a subclass 4078s 4078s String#swapcase full Unicode case mapping 4078s - works for all of Unicode with no option 4078s - updates string metadata 4078s 4078s String#swapcase ASCII-only case mapping 4078s - does not swapcase non-ASCII characters 4078s - works with substrings 4078s 4078s String#swapcase full Unicode case mapping adapted for Turkic languages 4078s - swaps case of ASCII characters according to Turkic semantics 4078s - allows Lithuanian as an extra option 4078s - does not allow any other additional option 4078s 4078s String#swapcase full Unicode case mapping adapted for Lithuanian 4078s - currently works the same as full Unicode case mapping 4078s - allows Turkic as an extra option (and applies Turkic semantics) 4078s - does not allow any other additional option 4078s 4078s String#swapcase! 4078s - modifies self in place 4078s - modifies self in place for non-ascii-compatible encodings 4078s - does not allow the :fold option for upcasing 4078s - does not allow invalid options 4078s - returns nil if no modifications were made 4078s - raises a FrozenError when self is frozen 4078s 4078s String#swapcase! full Unicode case mapping 4078s - modifies self in place for all of Unicode with no option 4078s - works for non-ascii-compatible encodings 4078s - updates string metadata 4078s 4078s String#swapcase! modifies self in place for ASCII-only case mapping 4078s - does not swapcase non-ASCII characters 4078s - works for non-ascii-compatible encodings 4078s 4078s String#swapcase! modifies self in place for full Unicode case mapping adapted for Turkic languages 4078s - swaps case of ASCII characters according to Turkic semantics 4078s - allows Lithuanian as an extra option 4078s - does not allow any other additional option 4078s 4078s String#swapcase! full Unicode case mapping adapted for Lithuanian 4078s - currently works the same as full Unicode case mapping 4078s - allows Turkic as an extra option (and applies Turkic semantics) 4078s - does not allow any other additional option 4078s 4078s String#to_c 4078s - returns a Complex object 4078s - understands integers 4078s - understands negative integers 4078s - understands fractions (numerator/denominator) for the real part 4078s - understands fractions (numerator/denominator) for the imaginary part 4078s - understands negative fractions (-numerator/denominator) for the real part 4078s - understands negative fractions (-numerator/denominator) for the imaginary part 4078s - understands floats (a.b) for the real part 4078s - understands floats (a.b) for the imaginary part 4078s - understands negative floats (-a.b) for the real part 4078s - understands negative floats (-a.b) for the imaginary part 4078s - understands an integer followed by 'i' to mean that integer is the imaginary part 4078s - understands a negative integer followed by 'i' to mean that negative integer is the imaginary part 4078s - understands an 'i' by itself as denoting a complex number with an imaginary part of 1 4078s - understands a '-i' by itself as denoting a complex number with an imaginary part of -1 4078s - understands 'a+bi' to mean a complex number with 'a' as the real part, 'b' as the imaginary 4078s - understands 'a-bi' to mean a complex number with 'a' as the real part, '-b' as the imaginary 4078s - understands 'a+i' to mean a complex number with 'a' as the real part, 1i as the imaginary 4078s - understands 'a-i' to mean a complex number with 'a' as the real part, -1i as the imaginary 4078s - understands i, I, j, and J imaginary units 4078s - understands scientific notation for the real part 4078s - understands negative scientific notation for the real part 4078s - understands scientific notation for the imaginary part 4078s - understands negative scientific notation for the imaginary part 4078s - understands scientific notation for the real and imaginary part in the same String 4078s - understands negative scientific notation for the real and imaginary part in the same String 4078s - understands scientific notation with e and E 4078s - understands 'm@a' to mean a complex number in polar form with 'm' as the modulus, 'a' as the argument 4078s - ignores leading whitespaces 4078s - ignores trailing whitespaces 4078s - understands _ 4078s 4078s String#to_c 4078s - returns a complex number with 0 as the real part, 0 as the imaginary part for unrecognised Strings 4078s - understands Float::INFINITY 4078s - understands Float::NAN 4078s - allows null-byte 4078s 4078s String#to_f 4078s - treats leading characters of self as a floating point number 4078s - treats special float value strings as characters 4078s - allows for varying case 4078s - allows for varying signs 4078s - allows for underscores, even in the decimal side 4078s - returns 0 for strings with any non-digit in them 4078s - returns 0 for strings with leading underscores 4078s - takes an optional sign 4078s - returns 0.0 if the conversion fails 4078s 4078s String#to_i 4078s - returns 0 for strings with leading underscores 4078s - ignores underscores in between the digits 4078s - ignores multiple non-consecutive underscoes when the first digit is 0 4078s - bails out at the first double underscore if the first digit is 0 4078s - ignores leading whitespaces 4078s - ignores subsequent invalid characters 4078s - returns 0 if self is no valid integer-representation 4078s - accepts '+' at the beginning of a String 4078s - interprets leading characters as a number in the given base 4078s - auto-detects base 8 via leading 0 when base = 0 4078s - auto-detects base 2 via 0b when base = 0 4078s - auto-detects base 10 via 0d when base = 0 4078s - auto-detects base 8 via 0o when base = 0 4078s - auto-detects base 16 via 0x when base = 0 4078s - auto-detects base 10 with no base specifier when base = 0 4078s - doesn't handle foreign base specifiers when base is > 0 4078s - tries to convert the base to an integer using to_int 4078s - requires that the sign if any appears before the base specifier 4078s - raises an ArgumentError for illegal bases (1, < 0 or > 36) 4078s - returns an Integer for long strings with trailing spaces 4078s - returns an Integer for long strings with leading spaces 4078s - returns the correct Integer for long strings 4078s 4078s String#to_i with bases 4078s - parses a String in base 2 4078s - parses a String in base 3 4078s - parses a String in base 4 4078s - parses a String in base 5 4078s - parses a String in base 6 4078s - parses a String in base 7 4078s - parses a String in base 8 4078s - parses a String in base 9 4078s - parses a String in base 10 4078s - parses a String in base 11 4078s - parses a String in base 12 4078s - parses a String in base 13 4078s - parses a String in base 14 4078s - parses a String in base 15 4078s - parses a String in base 16 4078s - parses a String in base 17 4078s - parses a String in base 18 4078s - parses a String in base 19 4078s - parses a String in base 20 4078s - parses a String in base 21 4078s - parses a String in base 22 4078s - parses a String in base 23 4078s - parses a String in base 24 4078s - parses a String in base 25 4078s - parses a String in base 26 4078s - parses a String in base 27 4078s - parses a String in base 28 4078s - parses a String in base 29 4078s - parses a String in base 30 4078s - parses a String in base 31 4078s - parses a String in base 32 4078s - parses a String in base 33 4078s - parses a String in base 34 4078s - parses a String in base 35 4078s - parses a String in base 36 4078s 4078s String#to_r 4078s - returns a Rational object 4078s - returns (0/1) for the empty String 4078s - returns (n/1) for a String starting with a decimal _n_ 4078s - ignores trailing characters 4078s - ignores leading spaces 4078s - does not ignore arbitrary, non-numeric leading characters 4078s - treats leading hyphen as minus signs 4078s - does not treat a leading period without a numeric prefix as a decimal point 4078s - understands decimal points 4078s - ignores underscores between numbers 4078s - understands a forward slash as separating the numerator from the denominator 4078s - returns (0/1) for Strings it can't parse 4078s 4078s String#to_s 4078s - returns self when self.class == String 4078s - returns a new instance of String when called on a subclass 4078s 4078s String#to_str 4078s - returns self when self.class == String 4078s - returns a new instance of String when called on a subclass 4078s 4078s String#to_sym 4078s - returns the symbol corresponding to self 4078s - does not special case +(binary) and -(binary) 4078s - does not special case certain operators 4078s - returns a US-ASCII Symbol for a UTF-8 String containing only US-ASCII characters 4078s - returns a US-ASCII Symbol for a binary String containing only US-ASCII characters 4078s - returns a UTF-8 Symbol for a UTF-8 String containing non US-ASCII characters 4078s - returns a UTF-16LE Symbol for a UTF-16LE String containing non US-ASCII characters 4078s - returns a binary Symbol for a binary String containing non US-ASCII characters 4078s - raises an EncodingError for UTF-8 String containing invalid bytes 4078s 4078s String#tr_s 4078s - returns a string processed according to tr with newly duplicate characters removed 4078s - accepts c1-c2 notation to denote ranges of characters 4078s - pads to_str with its last char if it is shorter than from_string 4078s - translates chars not in from_string when it starts with a ^ 4078s - tries to convert from_str and to_str to strings using to_str 4078s - returns String instances when called on a subclass 4078s - can replace a 7-bit ASCII character with a multibyte one 4078s - can replace multiple 7-bit ASCII characters with a multibyte one 4078s - can replace a multibyte character with a single byte one 4078s - can replace multiple multibyte characters with a single byte one 4078s - does not replace a multibyte character where part of the bytes match the tr string 4078s 4078s String#tr_s! 4078s - modifies self in place 4078s - returns nil if no modification was made 4078s - does not modify self if from_str is empty 4078s - raises a FrozenError if self is frozen 4078s 4078s String#tr 4078s - returns a new string with the characters from from_string replaced by the ones in to_string 4078s - accepts c1-c2 notation to denote ranges of characters 4078s - pads to_str with its last char if it is shorter than from_string 4078s - raises an ArgumentError a descending range in the replacement as containing just the start character 4078s - raises an ArgumentError a descending range in the source as empty 4078s - translates chars not in from_string when it starts with a ^ 4078s - supports non-injective replacements 4078s - tries to convert from_str and to_str to strings using to_str 4078s - returns Stringinstances when called on a subclass 4078s - can replace a 7-bit ASCII character with a multibyte one 4078s - can replace a multibyte character with a single byte one 4078s - does not replace a multibyte character where part of the bytes match the tr string 4078s 4078s String#tr! 4078s - modifies self in place 4078s - returns nil if no modification was made 4078s - does not modify self if from_str is empty 4078s - raises a FrozenError if self is frozen 4078s 4078s String.try_convert 4078s - returns the argument if it's a String 4078s - returns the argument if it's a kind of String 4078s - returns nil when the argument does not respond to #to_str 4078s - sends #to_str to the argument and returns the result if it's nil 4078s - sends #to_str to the argument and returns the result if it's a String 4078s - sends #to_str to the argument and returns the result if it's a kind of String 4078s - sends #to_str to the argument and raises TypeError if it's not a kind of String 4078s - does not rescue exceptions raised by #to_str 4078s 4078s String#-@ 4078s - returns self if the String is frozen 4078s - returns a frozen copy if the String is not frozen 4078s - returns the same object for equal unfrozen strings 4078s - returns the same object when it's called on the same String literal 4078s - deduplicates frozen strings 4078s - does not deduplicate a frozen string when it has instance variables 4078s 4078s String#undump 4078s - does not take into account if a string is frozen 4078s - always returns String instance 4078s - strips outer " 4078s - returns a string with special characters in \ notation replaced with the characters 4078s - returns a string with unescaped sequences " and \ 4078s - returns a string with unescaped sequences \# when # is followed by $, @, { 4078s - returns a string with # not escaped when followed by any other character 4078s - returns a string with printable non-alphanumeric characters 4078s - returns a string with numeric characters unescaped 4078s - returns a string with upper-case alpha characters unescaped 4078s - returns a string with lower-case alpha characters unescaped 4078s - returns a string with \x notation replaced with non-printing ASCII character 4078s - returns a string with \u{} notation replaced with multi-byte UTF-8 characters 4078s - returns a string with \uXXXX notation replaced with multi-byte UTF-8 characters 4078s - undumps correctly string produced from non ASCII-compatible one 4078s - returns a String in the same encoding as self 4078s 4078s String#undump Limitations 4078s - cannot undump non ASCII-compatible string 4078s 4078s String#undump invalid dump 4078s - raises RuntimeError exception if wrapping " are missing 4078s - raises RuntimeError if there is incorrect \x sequence 4078s - raises RuntimeError in there is incorrect \u sequence 4078s - raises RuntimeError if there is malformed dump of non ASCII-compatible string 4078s - raises RuntimeError if string contains - raises RuntimeError if string contains non ASCII character 4078s - raises RuntimeError if there are some excessive " 4078s 4078s String#unicode_normalize 4078s - normalizes code points in the string according to the form that is specified 4078s - defaults to the nfc normalization form if no forms are specified 4078s - raises an Encoding::CompatibilityError if string is not in an unicode encoding 4078s - raises an ArgumentError if the specified form is invalid 4078s 4078s String#unicode_normalize returns normalized form of string by default 4078s - 03D3 (ϓ) GREEK UPSILON WITH ACUTE AND HOOK SYMBOL 4078s - 03D4 (ϔ) GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL 4078s - 1E9B (ẛ) LATIN SMALL LETTER LONG S WITH DOT ABOVE 4078s 4078s String#unicode_normalize! 4078s - normalizes code points and modifies the receiving string 4078s - modifies original string (nfc) 4078s - modifies self in place (nfd) 4078s - modifies self in place (nfkc) 4078s - modifies self in place (nfkd) 4078s - raises an Encoding::CompatibilityError if the string is not in an unicode encoding 4078s - raises an ArgumentError if the specified form is invalid 4078s 4078s String#unicode_normalized? 4078s - returns true if string is in the specified normalization form 4078s - returns false if string is not in the supplied normalization form 4078s - defaults to the nfc normalization form if no forms are specified 4078s - returns true if string is empty 4078s - returns true if string does not contain any unicode codepoints 4078s - raises an Encoding::CompatibilityError if the string is not in an unicode encoding 4078s - raises an ArgumentError if the specified form is invalid 4078s - returns true if str is in Unicode normalization form (nfc) 4078s - returns true if str is in Unicode normalization form (nfd) 4078s - returns true if str is in Unicode normalization form (nfkc) 4078s - returns true if str is in Unicode normalization form (nfkd) 4078s 4078s String#unpack with format 'A' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - returns an empty string if the input is empty 4078s - returns empty strings for repeated formats if the input is empty 4078s - returns an empty string and does not decode any bytes when the count modifier is zero 4078s - implicitly has a count of one when no count is specified 4078s - decodes the number of bytes specified by the count modifier 4078s - decodes the number of bytes specified by the count modifier including whitespace bytes 4078s - decodes past whitespace bytes when passed the '*' modifier 4078s - decodes the number of bytes specified by the count modifier including NULL bytes 4078s - decodes past NULL bytes when passed the '*' modifier 4078s - removes trailing space and NULL bytes from the decoded string 4078s - does not remove whitespace other than space 4078s - decodes into raw (ascii) string values 4078s 4078s String#unpack with format 'a' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - returns an empty string if the input is empty 4078s - returns empty strings for repeated formats if the input is empty 4078s - returns an empty string and does not decode any bytes when the count modifier is zero 4078s - implicitly has a count of one when no count is specified 4078s - decodes the number of bytes specified by the count modifier 4078s - decodes the number of bytes specified by the count modifier including whitespace bytes 4078s - decodes past whitespace bytes when passed the '*' modifier 4078s - decodes the number of bytes specified by the count modifier including NULL bytes 4078s - decodes past NULL bytes when passed the '*' modifier 4078s - does not remove trailing whitespace or NULL bytes from the decoded string 4078s - decodes into raw (ascii) string values 4078s 4078s String#unpack with format '@' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - moves the read index to the byte specified by the count 4078s - implicitly has a count of zero when count is not specified 4078s - has no effect when passed the '*' modifier 4078s - positions the read index one beyond the last readable byte in the String 4078s - raises an ArgumentError if the count exceeds the size of the String 4078s 4078s String#unpack with format 'B' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes one bit from each byte for each format character starting with the most significant bit 4078s - decodes only the number of bits in the string when passed a count 4078s - decodes multiple differing bit counts from a single string 4078s - decodes a directive with a '*' modifier after a directive with a count modifier 4078s - decodes a directive with a count modifier after a directive with a '*' modifier 4078s - decodes the number of bits specified by the count modifier 4078s - decodes all the bits when passed the '*' modifier 4078s - adds an empty string for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'b' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes one bit from each byte for each format character starting with the least significant bit 4078s - decodes only the number of bits in the string when passed a count 4078s - decodes multiple differing bit counts from a single string 4078s - decodes a directive with a '*' modifier after a directive with a count modifier 4078s - decodes a directive with a count modifier after a directive with a '*' modifier 4078s - decodes the number of bits specified by the count modifier 4078s - decodes all the bits when passed the '*' modifier 4078s - adds an empty string for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes into US-ASCII string values 4078s 4078s String#unpack with format 'C' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one byte for a single format character 4078s - decodes two bytes for two format characters 4078s - decodes the number of bytes requested by the count modifier 4078s - decodes the remaining bytes when passed the '*' modifier 4078s - decodes the remaining bytes when passed the '*' modifier after another directive 4078s - decodes zero bytes when no bytes remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a byte with most significant bit set as a positive number 4078s 4078s String#unpack with format 'c' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one byte for a single format character 4078s - decodes two bytes for two format characters 4078s - decodes the number of bytes requested by the count modifier 4078s - decodes the remaining bytes when passed the '*' modifier 4078s - decodes the remaining bytes when passed the '*' modifier after another directive 4078s - decodes zero bytes when no bytes remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a byte with most significant bit set as a negative number 4078s 4078s String#unpack 4078s - ignores directives text from '#' to the first newline 4078s - ignores directives text from '#' to the end if no newline is present 4078s - ignores comments at the start of the directives string 4078s - ignores the entire directive string if it is a comment 4078s - ignores multiple comments 4078s 4078s String#unpack with format 'D' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one double for a single format character 4078s - decodes a negative double 4078s - decodes two doubles for two format characters 4078s - decodes the number of doubles requested by the count modifier 4078s - decodes the remaining doubles when passed the '*' modifier 4078s - decodes the remaining doubles when passed the '*' modifier after another directive 4078s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'd' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one double for a single format character 4078s - decodes a negative double 4078s - decodes two doubles for two format characters 4078s - decodes the number of doubles requested by the count modifier 4078s - decodes the remaining doubles when passed the '*' modifier 4078s - decodes the remaining doubles when passed the '*' modifier after another directive 4078s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'E' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one double for a single format character 4078s - decodes a negative double 4078s - decodes two doubles for two format characters 4078s - decodes the number of doubles requested by the count modifier 4078s - decodes the remaining doubles when passed the '*' modifier 4078s - decodes the remaining doubles when passed the '*' modifier after another directive 4078s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'e' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one float for a single format character 4078s - decodes a negative float 4078s - decodes two floats for two format characters 4078s - decodes the number of floats requested by the count modifier 4078s - decodes the remaining floats when passed the '*' modifier 4078s - decodes the remaining floats when passed the '*' modifier after another directive 4078s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'F' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one float for a single format character 4078s - decodes a negative float 4078s - decodes two floats for two format characters 4078s - decodes the number of floats requested by the count modifier 4078s - decodes the remaining floats when passed the '*' modifier 4078s - decodes the remaining floats when passed the '*' modifier after another directive 4078s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'f' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one float for a single format character 4078s - decodes a negative float 4078s - decodes two floats for two format characters 4078s - decodes the number of floats requested by the count modifier 4078s - decodes the remaining floats when passed the '*' modifier 4078s - decodes the remaining floats when passed the '*' modifier after another directive 4078s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'G' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one double for a single format character 4078s - decodes a negative double 4078s - decodes two doubles for two format characters 4078s - decodes the number of doubles requested by the count modifier 4078s - decodes the remaining doubles when passed the '*' modifier 4078s - decodes the remaining doubles when passed the '*' modifier after another directive 4078s - does not decode a double when fewer bytes than a double remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'g' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one float for a single format character 4078s - decodes a negative float 4078s - decodes two floats for two format characters 4078s - decodes the number of floats requested by the count modifier 4078s - decodes the remaining floats when passed the '*' modifier 4078s - decodes the remaining floats when passed the '*' modifier after another directive 4078s - does not decode a float when fewer bytes than a float remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes positive Infinity 4078s - decodes negative Infinity 4078s - decodes NaN 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with format 'H' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes one nibble from each byte for each format character starting with the most significant bit 4078s - decodes only the number of nibbles in the string when passed a count 4078s - decodes multiple differing nibble counts from a single string 4078s - decodes a directive with a '*' modifier after a directive with a count modifier 4078s - decodes a directive with a count modifier after a directive with a '*' modifier 4078s - decodes the number of nibbles specified by the count modifier 4078s - decodes all the nibbles when passed the '*' modifier 4078s - adds an empty string for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - should make strings with US_ASCII encoding 4078s 4078s String#unpack with format 'h' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes one nibble from each byte for each format character starting with the least significant bit 4078s - decodes only the number of nibbles in the string when passed a count 4078s - decodes multiple differing nibble counts from a single string 4078s - decodes a directive with a '*' modifier after a directive with a count modifier 4078s - decodes a directive with a count modifier after a directive with a '*' modifier 4078s - decodes the number of nibbles specified by the count modifier 4078s - decodes all the nibbles when passed the '*' modifier 4078s - adds an empty string for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - should make strings with US_ASCII encoding 4078s 4078s String#unpack with format 'I' with modifier '<' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '<' and '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '<' and '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '>' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '>' and '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '>' and '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'i' with modifier '<' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '<' and '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '<' and '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '>' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '>' and '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '>' and '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'I' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'I' with modifier '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'i' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '_' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'i' with modifier '!' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'J' with modifier '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'j' with modifier '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'J' with modifier '<' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '>' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '<' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '<' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '>' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'J' with modifier '>' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'j' with modifier '<' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '>' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '<' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '<' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '>' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'j' with modifier '>' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'L' with modifier '<' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '>' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '<' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '<' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '>' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '>' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'l' with modifier '<' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '>' 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '<' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '<' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '>' and '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '>' and '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'L' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s 4078s String#unpack with format 'l' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a negative number 4078s 4078s String#unpack with format 'L' with modifier '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'L' with modifier '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'l' with modifier '_' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'l' with modifier '!' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'M' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes an empty string 4078s - decodes the complete string ignoring newlines when given a single directive 4078s - appends empty string to the array for directives exceeding the input size 4078s - ignores the count or '*' modifier and decodes the entire string 4078s - decodes the '=' character 4078s - decodes an embedded space character 4078s - decodes a space at the end of the pre-encoded string 4078s - decodes an embedded tab character 4078s - decodes a tab character at the end of the pre-encoded string 4078s - decodes an embedded newline 4078s - decodes pre-encoded byte values 33..60 4078s - decodes pre-encoded byte values 62..126 4078s - decodes pre-encoded byte values 0..31 except tab and newline 4078s - decodes pre-encoded byte values 127..255 4078s 4078s String#unpack with format 'm' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes an empty string 4078s - decodes the complete string ignoring newlines when given a single directive 4078s - ignores the count or '*' modifier and decodes the entire string 4078s - appends empty string to the array for directives exceeding the input size 4078s - decodes all pre-encoded ascii byte values 4078s - produces binary strings 4078s - does not raise an error for an invalid base64 character 4078s 4078s String#unpack with format 'm' when given count 0 4078s - decodes base64 4078s - raises an ArgumentError for an invalid base64 character 4078s 4078s String#unpack with format 'N' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s 4078s String#unpack with format 'n' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s 4078s String#unpack with format 'P' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s 4078s String#unpack with format 'p' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s 4078s String#unpack with format '%' 4078s - raises an Argument Error 4078s 4078s String#unpack with format 'Q' with modifier '<' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'Q' with modifier '>' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'q' with modifier '<' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'q' with modifier '>' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'Q' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s 4078s String#unpack with format 'q' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s 4078s String#unpack with format 'Q' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes a long with most significant bit set as a positive number 4078s 4078s String#unpack with format 'q' 4078s - decodes one long for a single format character 4078s - decodes two longs for two format characters 4078s - decodes the number of longs requested by the count modifier 4078s - decodes the remaining longs when passed the '*' modifier 4078s - decodes the remaining longs when passed the '*' modifier after another directive 4078s - does not decode a long when fewer bytes than a long remain and the '*' modifier is passed 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - adds nil for each element requested beyond the end of the String 4078s - decodes a long with most significant bit set as a negative number 4078s 4078s String#unpack with format 'S' with modifier '<' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '<' and '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '<' and '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '>' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '>' and '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '>' and '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 's' with modifier '<' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '<' and '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '<' and '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '>' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '>' and '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '>' and '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 'S' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 'S' with modifier '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s 4078s String#unpack with format 's' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '_' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 's' with modifier '!' 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a negative number 4078s 4078s String#unpack with format 'U' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes Unicode codepoints as ASCII values 4078s - decodes the number of characters specified by the count modifier 4078s - implicitly has a count of one when no count modifier is passed 4078s - decodes all remaining characters when passed the '*' modifier 4078s - decodes UTF-8 BMP codepoints 4078s - decodes UTF-8 max codepoints 4078s - does not decode any items for directives exceeding the input string size 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - raises ArgumentError on a malformed byte sequence 4078s - raises ArgumentError on a malformed byte sequence and doesn't continue when used with the * modifier 4078s 4078s String#unpack with format 'u' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes an empty string as an empty string 4078s - decodes into raw (ascii) string values 4078s - decodes the complete string ignoring newlines when given a single directive 4078s - appends empty string to the array for directives exceeding the input size 4078s - ignores the count or '*' modifier and decodes the entire string 4078s - decodes all ascii characters 4078s 4078s String#unpack with format 'V' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one int for a single format character 4078s - decodes two ints for two format characters 4078s - decodes the number of ints requested by the count modifier 4078s - decodes the remaining ints when passed the '*' modifier 4078s - decodes the remaining ints when passed the '*' modifier after another directive 4078s - does not decode an int when fewer bytes than an int remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes an int with most significant bit set as a positive number 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s 4078s String#unpack with format 'v' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - decodes one short for a single format character 4078s - decodes two shorts for two format characters 4078s - decodes the number of shorts requested by the count modifier 4078s - decodes the remaining shorts when passed the '*' modifier 4078s - decodes the remaining shorts when passed the '*' modifier after another directive 4078s - does not decode a short when fewer bytes than a short remain and the '*' modifier is passed 4078s - adds nil for each element requested beyond the end of the String 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s - decodes a short with most significant bit set as a positive number 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s 4078s String#unpack with directive 'w' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - decodes a BER-compressed integer 4078s - ignores NULL bytes between directives 4078s - ignores spaces between directives 4078s 4078s String#unpack with directive 'w*' 4078s - decodes BER-compressed integers 4078s 4078s String#unpack with format 'X' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - moves the read index back by the number of bytes specified by count 4078s - does not change the read index when passed a count of zero 4078s - implicitly has a count of one when count is not specified 4078s - moves the read index back by the remaining bytes when passed the '*' modifier 4078s - raises an ArgumentError when passed the '*' modifier if the remaining bytes exceed the bytes from the index to the start of the String 4078s - raises an ArgumentError if the count exceeds the bytes from current index to the start of the String 4078s 4078s String#unpack with format 'x' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - moves the read index forward by the number of bytes specified by count 4078s - implicitly has a count of one when count is not specified 4078s - does not change the read index when passed a count of zero 4078s - moves the read index to the end of the string when passed the '*' modifier 4078s - positions the read index one beyond the last readable byte in the String 4078s - raises an ArgumentError if the count exceeds the size of the String 4078s 4078s String#unpack with format 'Z' 4078s - ignores whitespace in the format string 4078s - calls #to_str to coerce the directives string 4078s - raises an ArgumentError when the format modifier is '_' 4078s - raises an ArgumentError when the format modifier is '!' 4078s - returns an empty string if the input is empty 4078s - returns empty strings for repeated formats if the input is empty 4078s - returns an empty string and does not decode any bytes when the count modifier is zero 4078s - implicitly has a count of one when no count is specified 4078s - decodes the number of bytes specified by the count modifier 4078s - decodes the number of bytes specified by the count modifier including whitespace bytes 4078s - decodes past whitespace bytes when passed the '*' modifier 4078s - stops decoding at NULL bytes when passed the '*' modifier 4078s - decodes the number of bytes specified by the count modifier and truncates the decoded string at the first NULL byte 4078s - does not advance past the null byte when given a 'Z' format specifier 4078s 4078s String#unpack1 4078s - returns the first value of #unpack 4078s - starts unpacking from the given offset 4078s - traits offset as a bytes offset 4078s - raises an ArgumentError when the offset is negative 4078s - returns nil if the offset is at the end of the string 4078s - raises an ArgumentError when the offset is larger than the string bytesize 4078s 4078s String#unpack 4078s - raises a TypeError when passed nil 4078s - raises a TypeError when passed an Integer 4078s - starts unpacking from the given offset 4078s - traits offset as a bytes offset 4078s - raises an ArgumentError when the offset is negative 4078s - returns nil if the offset is at the end of the string 4078s - raises an ArgumentError when the offset is larget than the string 4078s 4078s String#upcase 4078s - returns a copy of self with all lowercase letters upcased 4078s - returns a String in the same encoding as self 4078s - does not allow the :fold option for upcasing 4078s - does not allow invalid options 4078s - returns a String instance for subclasses 4078s 4078s String#upcase full Unicode case mapping 4078s - works for all of Unicode with no option 4078s - updates string metadata 4078s 4078s String#upcase ASCII-only case mapping 4078s - does not upcase non-ASCII characters 4078s - works with substrings 4078s 4078s String#upcase full Unicode case mapping adapted for Turkic languages 4078s - upcases ASCII characters according to Turkic semantics 4078s - allows Lithuanian as an extra option 4078s - does not allow any other additional option 4078s 4078s String#upcase full Unicode case mapping adapted for Lithuanian 4078s - currently works the same as full Unicode case mapping 4078s - allows Turkic as an extra option (and applies Turkic semantics) 4078s - does not allow any other additional option 4078s 4078s String#upcase! 4078s - modifies self in place 4078s - modifies self in place for non-ascii-compatible encodings 4078s - does not allow the :fold option for upcasing 4078s - does not allow invalid options 4078s - returns nil if no modifications were made 4078s - raises a FrozenError when self is frozen 4078s 4078s String#upcase! full Unicode case mapping 4078s - modifies self in place for all of Unicode with no option 4078s - works for non-ascii-compatible encodings 4078s - updates string metadata for self 4078s 4078s String#upcase! modifies self in place for ASCII-only case mapping 4078s - does not upcase non-ASCII characters 4078s - works for non-ascii-compatible encodings 4078s 4078s String#upcase! modifies self in place for full Unicode case mapping adapted for Turkic languages 4078s - upcases ASCII characters according to Turkic semantics 4078s - allows Lithuanian as an extra option 4078s - does not allow any other additional option 4078s 4078s String#upcase! modifies self in place for full Unicode case mapping adapted for Lithuanian 4078s - currently works the same as full Unicode case mapping 4078s - allows Turkic as an extra option (and applies Turkic semantics) 4078s - does not allow any other additional option 4078s 4078s String#+@ 4078s - returns an unfrozen copy of a frozen String 4078s - returns self if the String is not frozen 4081s - returns mutable copy despite freeze-magic-comment in file 4081s 4081s String#upto 4081s - passes successive values, starting at self and ending at other_string, to the block 4081s - calls the block once even when start equals stop 4081s - doesn't call block with self even if self is less than stop but stop length is less than self length 4081s - doesn't call block if stop is less than self and stop length is less than self length 4081s - doesn't call the block if self is greater than stop 4081s - stops iterating as soon as the current value's character count gets higher than stop's 4081s - returns self 4081s - tries to convert other to string using to_str 4081s - raises a TypeError if other can't be converted to a string 4081s - does not work with symbols 4081s - returns non-alphabetic characters in the ASCII range for single letters 4081s - stops before the last value if exclusive 4081s - works with non-ASCII ranges 4081s - raises Encoding::CompatibilityError when incompatible characters are given 4081s 4081s String#upto on sequence of numbers 4081s - calls the block as Integer#upto 4081s 4081s String#upto when no block is given 4081s - returns an enumerator 4081s 4081s String#upto when no block is given returned Enumerator size 4081s - should return nil 4081s 4081s String#valid_encoding? and UTF-8 1-byte character 4081s - is valid if is in format 0xxxxxxx 4081s - is not valid if is not in format 0xxxxxxx 4081s 4081s String#valid_encoding? and UTF-8 2-bytes character 4081s - is valid if in format [110xxxxx 10xxxxx] 4081s - is not valid if the first byte is not in format 110xxxxx 4081s - is not valid if the second byte is not in format 10xxxxxx 4081s - is not valid if is smaller than [xxxxxx10 xx000000] (codepoints < U+007F, that are encoded with the 1-byte format) 4081s - is not valid if the first byte is missing 4081s - is not valid if the second byte is missing 4081s 4081s String#valid_encoding? and UTF-8 3-bytes character 4081s - is valid if in format [1110xxxx 10xxxxxx 10xxxxxx] 4081s - is not valid if the first byte is not in format 1110xxxx 4081s - is not valid if the second byte is not in format 10xxxxxx 4081s - is not valid if the third byte is not in format 10xxxxxx 4081s - is not valid if is smaller than [xxxx0000 xx100000 xx000000] (codepoints < U+07FF that are encoded with the 2-byte format) 4081s - is not valid if in range [xxxx1101 xx100000 xx000000] - [xxxx1101 xx111111 xx111111] (codepoints U+D800 - U+DFFF) 4081s - is not valid if the first byte is missing 4081s - is not valid if the second byte is missing 4081s - is not valid if the second and the third bytes are missing 4081s 4081s String#valid_encoding? and UTF-8 4-bytes character 4081s - is valid if in format [11110xxx 10xxxxxx 10xxxxxx 10xxxxxx] 4081s - is not valid if the first byte is not in format 11110xxx 4081s - is not valid if the second byte is not in format 10xxxxxx 4081s - is not valid if the third byte is not in format 10xxxxxx 4081s - is not valid if the forth byte is not in format 10xxxxxx 4081s - is not valid if is smaller than [xxxxx000 xx001000 xx000000 xx000000] (codepoint < U+10000) 4081s - is not valid if is greater than [xxxxx100 xx001111 xx111111 xx111111] (codepoint > U+10FFFF) 4081s - is not valid if the first byte is missing 4081s - is not valid if the second byte is missing 4081s - is not valid if the second and the third bytes are missing 4081s - is not valid if the second, the third and the fourth bytes are missing 4081s 4081s String#valid_encoding? 4081s - returns true if the String's encoding is valid 4081s - returns true if self is valid in the current encoding and other encodings 4081s - returns true for all encodings self is valid in 4081s - returns true for IBM720 encoding self is valid in 4081s - returns false if self is valid in one encoding, but invalid in the one it's tagged with 4081s - returns false if self contains a character invalid in the associated encoding 4081s - returns false if a valid String had an invalid character appended to it 4081s - returns true if an invalid string is appended another invalid one but both make a valid string 4081s 4081s Struct-based class#clone 4081s - duplicates members 4081s 4081s Struct#deconstruct_keys 4081s - returns a hash of attributes 4081s - requires one argument 4081s - returns only specified keys 4081s - accepts string attribute names 4081s - accepts argument position number as well but returns them as keys 4081s - returns an empty hash when there are more keys than attributes 4081s - returns at first not existing attribute name 4081s - accepts nil argument and return all the attributes 4081s - raise TypeError if passed anything except nil or array 4081s 4081s Struct#deconstruct 4081s - returns an array of attribute values 4081s 4081s Struct#dig 4081s - returns the nested value specified by the sequence of keys 4081s - accepts String keys 4081s - returns the value by the index 4081s - returns the nested value specified if the sequence includes an index 4081s - returns nil if any intermediate step is nil 4081s - raises a TypeError if any intermediate step does not respond to #dig 4081s - raises an ArgumentError if no arguments provided 4081s - calls #dig on any intermediate step with the rest of the sequence as arguments 4081s 4081s Struct-based class#dup 4081s - duplicates members 4081s - retains an included module in the ancestor chain for the struct's singleton class 4081s 4081s Struct#each_pair 4081s - passes each key value pair to the given block 4081s - returns self if passed a block 4081s - returns an Enumerator if not passed a block 4081s - does not override the instance accessor method 4081s 4081s Struct#each_pair with a block variable 4081s - passes an array to the given block 4081s 4081s Struct#each_pair when no block is given returned Enumerator 4081s - size returns the enumerable size 4081s 4081s Struct#each 4081s - passes each value to the given block 4081s - returns self if passed a block 4081s - returns an Enumerator if not passed a block 4081s - does not override the instance accessor method 4081s 4081s Struct#each when no block is given returned Enumerator 4081s - size returns the enumerable size 4081s 4081s Struct[] 4081s - is a synonym for new 4081s 4081s Struct#[] 4081s - returns the attribute referenced 4081s - fails when it does not know about the requested attribute 4081s - fails if passed too many arguments 4081s - fails if not passed a string, symbol, or integer 4081s - returns attribute names that contain hyphens 4081s 4081s Struct#[]= 4081s - assigns the passed value 4081s - fails when trying to assign attributes which don't exist 4081s 4081s Struct#eql? 4081s - returns true if the other is the same object 4081s - returns true if the other has all the same fields 4081s - returns false if the other is a different object or has different fields 4081s - returns false if other is of a different class 4081s - handles recursive structures by returning false if a difference can be found 4081s - returns false if any corresponding elements are not #eql? 4081s 4081s Struct#== 4081s - returns true if the other is the same object 4081s - returns true if the other has all the same fields 4081s - returns false if the other is a different object or has different fields 4081s - returns false if other is of a different class 4081s - handles recursive structures by returning false if a difference can be found 4081s 4081s Struct#filter 4081s - raises an ArgumentError if given any non-block arguments 4081s - returns a new array of elements for which block is true 4081s - returns an instance of Array 4081s - does not override the instance accessor method 4081s 4081s Struct#filter without block 4081s - returns an instance of Enumerator 4081s 4081s Struct#filter when no block is given returned Enumerator 4081s - size returns the enumerable size 4081s 4081s Struct#hash 4081s - returns the same integer for structs with the same content 4081s - returns the same value if structs are #eql? 4081s - returns different hashes for structs with different values 4081s - returns different hashes for structs with different values when using keyword_init: true 4081s - allows for overriding methods in an included module 4081s - returns the same hash for recursive structs 4081s - returns different hashes for different struct classes 4081s - does not override the instance accessor method 4081s 4081s Struct#initialize 4081s - is private 4081s - allows valid Ruby method names for members 4081s - does nothing when passed a set of fields equal to self 4081s - explicitly sets instance variables to nil when args not provided to initialize 4081s - can be overridden 4081s - warns about passing only keyword arguments 4081s 4081s Struct#inspect 4081s - returns a string representation showing members and values 4081s - returns a string representation without the class name for anonymous structs 4081s - returns a string representation without the class name for structs nested in anonymous classes 4081s - returns a string representation without the class name for structs nested in anonymous modules 4081s - does not call #name method 4081s - does not call #name method when struct is anonymous 4081s 4081s Struct#instance_variable_get 4081s - returns nil for attributes 4081s - returns a user value for variables with the same name as attributes 4081s 4081s Struct#instance_variables 4081s - returns an empty array if only attributes are defined 4081s - returns an array with one name if an instance variable is added 4081s 4081s StructClass#keyword_init? 4081s - returns true for a struct that accepts keyword arguments to initialize 4081s - returns false for a struct that does not accept keyword arguments to initialize 4081s - returns nil for a struct that did not explicitly specify keyword_init 4081s - returns nil for a struct that does specify keyword_init to be nil 4081s 4081s Struct#length 4081s - returns the number of attributes 4081s - does not override the instance accessor method 4081s 4081s Struct#members 4081s - returns an array of attribute names 4081s - does not override the instance accessor method 4081s 4081s Struct.new 4081s - creates a constant in Struct namespace with string as first argument 4081s - overwrites previously defined constants with string as first argument 4081s - calls to_str on its first argument (constant name) 4081s - creates a new anonymous class with nil first argument 4081s - creates a new anonymous class with symbol arguments 4081s - does not create a constant with symbol as first argument 4081s - allows non-ASCII member name 4081s - fails with invalid constant name as first argument 4081s - raises a TypeError if object doesn't respond to to_sym 4081s - raises a TypeError or ArgumentError if passed a Hash with an unknown key 4081s - raises ArgumentError if not provided any arguments 4081s - raises ArgumentError when there is a duplicate member 4081s - raises a TypeError if object is not a Symbol 4081s - processes passed block with instance_eval 4081s 4081s Struct.new with a block 4081s - allows class to be modified via the block 4081s - passes same struct class to the block 4081s 4081s Struct.new on subclasses 4081s - creates a constant in subclass' namespace 4081s - creates an instance 4081s - creates reader methods 4081s - creates writer methods 4081s - fails with too many arguments 4081s 4081s Struct.new keyword_init: true option 4081s - creates a class that accepts keyword arguments to initialize 4081s - raises when there is a duplicate member 4081s 4081s Struct.new keyword_init: true option new class instantiation 4081s - accepts arguments as hash as well 4081s - allows missing arguments 4081s - allows no arguments 4081s - raises ArgumentError when passed not declared keyword argument 4081s - raises ArgumentError when passed a list of arguments 4081s - raises ArgumentError when passed a single non-hash argument 4081s 4081s Struct.new keyword_init: false option 4081s - behaves like it does without :keyword_init option 4081s 4081s Struct#select 4081s - raises an ArgumentError if given any non-block arguments 4081s - returns a new array of elements for which block is true 4081s - returns an instance of Array 4081s - does not override the instance accessor method 4081s 4081s Struct#select without block 4081s - returns an instance of Enumerator 4081s 4081s Struct#select when no block is given returned Enumerator 4081s - size returns the enumerable size 4081s 4081s Struct#size 4081s - is a synonym for length 4081s - does not override the instance accessor method 4081s 4081s Struct 4081s - includes Enumerable 4081s 4081s Struct anonymous class instance methods 4081s - includes Enumerable 4081s - reader method should be a synonym for [] 4081s - reader method should not interfere with undefined methods 4081s - writer method be a synonym for []= 4081s 4081s Struct subclasses 4081s - can be subclassed 4081s 4081s Struct#to_a 4081s - returns the values for this instance as an array 4081s - does not override the instance accessor method 4081s 4081s Struct#to_h 4081s - returns a Hash with members as keys 4081s - returns a Hash that is independent from the struct 4081s 4081s Struct#to_h with block 4081s - converts [key, value] pairs returned by the block to a hash 4081s - raises ArgumentError if block returns longer or shorter array 4081s - raises TypeError if block returns something other than Array 4081s - coerces returned pair to Array with #to_ary 4081s - does not coerce returned pair to Array with #to_a 4081s 4081s Struct#to_s 4081s - is a synonym for inspect 4081s - returns a string representation showing members and values 4081s - returns a string representation without the class name for anonymous structs 4081s - returns a string representation without the class name for structs nested in anonymous classes 4081s - returns a string representation without the class name for structs nested in anonymous modules 4081s - does not call #name method 4081s - does not call #name method when struct is anonymous 4081s 4081s Struct#values_at 4081s - supports multiple integer Ranges 4081s - supports mixing integer Ranges and Integers 4081s - returns a new empty Array if no arguments given 4081s - fails when passed unsupported types 4081s 4081s Struct#values_at when passed a list of Integers 4081s - returns an array containing each value given by one of integers 4081s - raises IndexError if any of integers is out of range 4081s 4081s Struct#values_at when passed an integer Range 4081s - returns an array containing each value given by the elements of the range 4081s - fills with nil values for range elements larger than the structure 4081s - raises RangeError if any element of the range is negative and out of range 4081s - supports endless Range 4081s - supports beginningless Range 4081s 4081s Struct#values 4081s - is a synonym for to_a 4081s 4081s Symbol.all_symbols 4081s - returns an array of Symbols 4081s - includes symbols that are strongly referenced 4081s - includes symbols that are referenced in source code but not yet executed 4081s 4081s Symbol#capitalize 4081s - returns a Symbol 4081s - converts the first character to uppercase if it is ASCII 4081s - leaves the first character alone if it is not an alphabetical character 4081s - capitalizes the first character if it is Unicode 4081s - converts subsequent uppercase ASCII characters to their lowercase equivalents 4081s - leaves ASCII characters already in the correct case as they were 4081s - works with both upper- and lowercase ASCII characters in the same Symbol 4081s - leaves lowercase Unicode characters (except in first position) as they were 4081s - leaves non-alphabetic ASCII characters as they were 4081s 4081s Symbol#=== 4081s - returns true when the argument is a Symbol 4081s - returns false when the argument is a String 4081s 4081s Symbol#casecmp with Symbol 4081s - compares symbols without regard to case 4081s - doesn't consider non-ascii characters equal that aren't 4081s - doesn't do case mapping for non-ascii characters 4081s - returns 0 for empty strings in different encodings 4081s 4081s Symbol#casecmp 4081s - returns nil if other is a String 4081s - returns nil if other is an Integer 4081s - returns nil if other is an object 4081s 4081s Symbol#casecmp? 4081s - compares symbols without regard to case 4081s - doesn't consider non-ascii characters equal that aren't 4081s - doesn't do case mapping for non-ascii and non-unicode characters 4081s - does case mapping for unicode characters 4081s - returns nil when comparing characters with different encodings 4081s - returns true for empty symbols in different encodings 4081s 4081s Symbol#<=> with Symbol 4081s - compares individual characters based on their ascii value 4081s - returns -1 when self is less than other 4081s - returns 0 when self is equal to other 4081s - returns 1 when self is greater than other 4081s - considers symbol that comes lexicographically first to be less if the symbols have same size 4081s - doesn't consider shorter string to be less if longer string starts with shorter one 4081s - compares shorter string with corresponding number of first chars of longer string 4081s 4081s Symbol#<=> 4081s - returns nil if other is a String 4081s - returns nil if other is an Integer 4081s - returns nil if other is an object 4081s 4081s Symbol#downcase 4081s - returns a Symbol 4081s - converts uppercase ASCII characters to their lowercase equivalents 4081s - leaves lowercase Unicode characters as they were 4081s - uncapitalizes all Unicode characters 4081s - leaves non-alphabetic ASCII characters as they were 4081s 4081s Symbol#dup 4081s - returns self 4081s 4081s Symbol#[] with an Integer index 4081s - returns the character code of the element at the index 4081s - returns nil if the index starts from the end and is greater than the length 4081s - returns nil if the index is greater than the length 4081s 4081s Symbol#[] with an Integer index and length and a positive index and length 4081s - returns a slice 4081s - returns a blank slice if the length is 0 4081s - returns a slice of all remaining characters if the given length is greater than the actual length 4081s - returns nil if the index is greater than the length 4081s 4081s Symbol#[] with an Integer index and length and a positive index and negative length 4081s - returns nil 4081s 4081s Symbol#[] with an Integer index and length and a negative index and positive length 4081s - returns a slice starting from the end upto the length 4081s - returns a blank slice if the length is 0 4081s - returns a slice of all remaining characters if the given length is larger than the actual length 4081s - returns nil if the index is past the start 4081s 4081s Symbol#[] with an Integer index and length and a negative index and negative length 4081s - returns nil 4081s 4081s Symbol#[] with an Integer index and length and a Float length 4081s - converts the length to an Integer 4081s 4081s Symbol#[] with an Integer index and length and a nil length 4081s - raises a TypeError 4081s 4081s Symbol#[] with an Integer index and length and a length that cannot be converted into an Integer 4081s - raises a TypeError when given an Array 4081s - raises a TypeError when given an Hash 4081s - raises a TypeError when given an Object 4081s 4081s Symbol#[] with a Float index 4081s - converts the index to an Integer 4081s 4081s Symbol#[] with a nil index 4081s - raises a TypeError 4081s 4081s Symbol#[] with an index that cannot be converted into an Integer 4081s - raises a TypeError when given an Array 4081s - raises a TypeError when given an Hash 4081s - raises a TypeError when given an Object 4081s 4081s Symbol#[] with a Range slice that is within bounds 4081s - returns a slice if both range values begin at the start and are within bounds 4081s - returns a slice if the first range value begins at the start and the last begins at the end 4081s - returns a slice if the first range value begins at the end and the last begins at the end 4081s 4081s Symbol#[] with a Range slice that is out of bounds 4081s - returns nil if the first range value begins past the end 4081s - returns a blank string if the first range value is within bounds and the last range value is not 4081s - 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 4081s - 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 4081s 4081s Symbol#[] with a Range slice with Float values 4081s - converts the first value to an Integer 4081s - converts the last value to an Integer 4081s 4081s Symbol#[] with a Range subclass slice 4081s - returns a slice 4081s 4081s Symbol#[] with a Regex slice without a capture index 4081s - returns a string of the match 4081s - returns nil if the expression does not match 4081s - sets $~ to the MatchData if there is a match 4081s - does not set $~ if there if there is not a match 4081s 4081s Symbol#[] with a Regex slice with a capture index 4081s - returns a string of the complete match if the capture index is 0 4081s - returns a string for the matched capture at the given index 4081s - returns nil if there is no capture for the index 4081s - converts the index to an Integer 4081s - raises a TypeError if the index is nil 4081s - sets $~ to the MatchData if there is a match 4081s - does not set $~ to the MatchData if there is not a match 4081s 4081s Symbol#[] with a Regex slice with a capture index and an index that cannot be converted to an Integer 4081s - raises a TypeError when given an Hash 4081s - raises a TypeError when given an Array 4081s - raises a TypeError when given an Object 4081s 4081s Symbol#[] with a String slice 4081s - does not set $~ 4081s - returns a string if there is match 4081s - returns nil if there is not a match 4081s 4081s Symbol#empty? 4081s - returns true if self is empty 4081s - returns false if self is non-empty 4081s 4081s Symbol#encoding for ASCII symbols 4081s - is US-ASCII 4081s - is US-ASCII after converting to string 4081s 4081s Symbol#encoding for UTF-8 symbols 4081s - is UTF-8 4081s - is UTF-8 after converting to string 4081s 4081s Symbol#end_with? 4081s - returns true only if ends match 4081s - returns false if the end does not match 4081s - returns true if the search string is empty 4081s - returns true only if any ending match 4081s - converts its argument using :to_str 4081s - ignores arguments not convertible to string 4081s - uses only the needed arguments 4081s - works for multibyte strings 4081s - raises an Encoding::CompatibilityError if the encodings are incompatible 4081s 4081s Symbol#== 4081s - only returns true when the other is exactly the same symbol 4081s 4081s Symbol#id2name 4081s - returns the string corresponding to self 4081s - returns a String in the same encoding as self 4081s 4081s Symbol#inspect 4081s - returns self as a symbol literal for :fred 4081s - returns self as a symbol literal for :fred? 4081s - returns self as a symbol literal for :fred! 4081s - returns self as a symbol literal for :BAD! 4081s - returns self as a symbol literal for :_BAD! 4081s - returns self as a symbol literal for :$ruby 4081s - returns self as a symbol literal for :@ruby 4081s - returns self as a symbol literal for :@@ruby 4081s - returns self as a symbol literal for :"$ruby!" 4081s - returns self as a symbol literal for :"$ruby?" 4081s - returns self as a symbol literal for :"@ruby!" 4081s - returns self as a symbol literal for :"@ruby?" 4081s - returns self as a symbol literal for :"@@ruby!" 4081s - returns self as a symbol literal for :"@@ruby?" 4081s - returns self as a symbol literal for :$-w 4081s - returns self as a symbol literal for :"$-ww" 4081s - returns self as a symbol literal for :$+ 4081s - returns self as a symbol literal for :$~ 4081s - returns self as a symbol literal for :$: 4081s - returns self as a symbol literal for :$? 4081s - returns self as a symbol literal for :$< 4081s - returns self as a symbol literal for :$_ 4081s - returns self as a symbol literal for :$/ 4081s - returns self as a symbol literal for :$' 4081s - returns self as a symbol literal for :$" 4081s - returns self as a symbol literal for :$$ 4081s - returns self as a symbol literal for :$. 4081s - returns self as a symbol literal for :$, 4081s - returns self as a symbol literal for :$` 4081s - returns self as a symbol literal for :$! 4081s - returns self as a symbol literal for :$; 4081s - returns self as a symbol literal for :$\ 4081s - returns self as a symbol literal for :$= 4081s - returns self as a symbol literal for :$* 4081s - returns self as a symbol literal for :$> 4081s - returns self as a symbol literal for :$& 4081s - returns self as a symbol literal for :$@ 4081s - returns self as a symbol literal for :$1234 4081s - returns self as a symbol literal for :-@ 4081s - returns self as a symbol literal for :+@ 4081s - returns self as a symbol literal for :% 4081s - returns self as a symbol literal for :& 4081s - returns self as a symbol literal for :* 4081s - returns self as a symbol literal for :** 4081s - returns self as a symbol literal for :/ 4081s - returns self as a symbol literal for :< 4081s - returns self as a symbol literal for :<= 4081s - returns self as a symbol literal for :<=> 4081s - returns self as a symbol literal for :== 4081s - returns self as a symbol literal for :=== 4081s - returns self as a symbol literal for :=~ 4081s - returns self as a symbol literal for :> 4081s - returns self as a symbol literal for :>= 4081s - returns self as a symbol literal for :>> 4081s - returns self as a symbol literal for :[] 4081s - returns self as a symbol literal for :[]= 4081s - returns self as a symbol literal for :<< 4081s - returns self as a symbol literal for :^ 4081s - returns self as a symbol literal for :` 4081s - returns self as a symbol literal for :~ 4081s - returns self as a symbol literal for :| 4081s - returns self as a symbol literal for :! 4081s - returns self as a symbol literal for :!= 4081s - returns self as a symbol literal for :!~ 4081s - returns self as a symbol literal for :"$" 4081s - returns self as a symbol literal for :"&&" 4081s - returns self as a symbol literal for :"'" 4081s - returns self as a symbol literal for :"," 4081s - returns self as a symbol literal for :"." 4081s - returns self as a symbol literal for :".." 4081s - returns self as a symbol literal for :"..." 4081s - returns self as a symbol literal for :":" 4081s - returns self as a symbol literal for :"::" 4081s - returns self as a symbol literal for :";" 4081s - returns self as a symbol literal for :"=" 4081s - returns self as a symbol literal for :"=>" 4081s - returns self as a symbol literal for :"?" 4081s - returns self as a symbol literal for :"@" 4081s - returns self as a symbol literal for :"||" 4081s - returns self as a symbol literal for :"|||" 4081s - returns self as a symbol literal for :"++" 4081s - returns self as a symbol literal for :"\"" 4081s - returns self as a symbol literal for :"\"\"" 4081s - returns self as a symbol literal for :"9" 4081s - returns self as a symbol literal for :"foo bar" 4081s - returns self as a symbol literal for :"*foo" 4081s - returns self as a symbol literal for :"foo " 4081s - returns self as a symbol literal for :" foo" 4081s - returns self as a symbol literal for :" " 4081s 4081s Symbol#intern 4081s - returns self 4081s - returns a Symbol 4081s 4081s Symbol#length 4081s - returns 0 for empty name 4081s - returns 1 for name formed by a NUL character 4081s - returns 3 for name formed by 3 ASCII characters 4081s - returns 4 for name formed by 4 ASCII characters 4081s - returns 4 for name formed by 1 multibyte and 3 ASCII characters 4081s 4081s Symbol#=~ 4081s - returns the index of the beginning of the match 4081s - returns nil if there is no match 4081s - sets the last match pseudo-variables 4081s 4081s Symbol#match 4081s - returns the MatchData 4081s - returns nil if there is no match 4081s - sets the last match pseudo-variables 4081s 4081s Symbol#match when passed a block 4081s - yields the MatchData 4081s - returns the block result 4081s - does not yield if there is no match 4081s 4081s Symbol#match? 4081s - returns false when does not match the given regex 4081s - takes matching position as the 2nd argument 4081s 4081s Symbol#match? when matches the given regex 4081s - returns true but does not set Regexp.last_match 4081s 4081s Symbol#name 4081s - returns string 4081s - returns same string instance 4081s - returns frozen string 4081s 4081s Symbol#next 4081s - returns a successor 4081s - propagates a 'carry' 4081s - increments non-alphanumeric characters when no alphanumeric characters are present 4081s 4081s Symbol#size 4081s - returns 0 for empty name 4081s - returns 1 for name formed by a NUL character 4081s - returns 3 for name formed by 3 ASCII characters 4081s - returns 4 for name formed by 4 ASCII characters 4081s - returns 4 for name formed by 1 multibyte and 3 ASCII characters 4081s 4081s Symbol#slice with an Integer index 4081s - returns the character code of the element at the index 4081s - returns nil if the index starts from the end and is greater than the length 4081s - returns nil if the index is greater than the length 4081s 4081s Symbol#slice with an Integer index and length and a positive index and length 4081s - returns a slice 4081s - returns a blank slice if the length is 0 4081s - returns a slice of all remaining characters if the given length is greater than the actual length 4081s - returns nil if the index is greater than the length 4081s 4081s Symbol#slice with an Integer index and length and a positive index and negative length 4081s - returns nil 4081s 4081s Symbol#slice with an Integer index and length and a negative index and positive length 4081s - returns a slice starting from the end upto the length 4081s - returns a blank slice if the length is 0 4081s - returns a slice of all remaining characters if the given length is larger than the actual length 4081s - returns nil if the index is past the start 4082s 4082s Symbol#slice with an Integer index and length and a negative index and negative length 4082s - returns nil 4082s 4082s Symbol#slice with an Integer index and length and a Float length 4082s - converts the length to an Integer 4082s 4082s Symbol#slice with an Integer index and length and a nil length 4082s - raises a TypeError 4082s 4082s Symbol#slice with an Integer index and length and a length that cannot be converted into an Integer 4082s - raises a TypeError when given an Array 4082s - raises a TypeError when given an Hash 4082s - raises a TypeError when given an Object 4082s 4082s Symbol#slice with a Float index 4082s - converts the index to an Integer 4082s 4082s Symbol#slice with a nil index 4082s - raises a TypeError 4082s 4082s Symbol#slice with an index that cannot be converted into an Integer 4082s - raises a TypeError when given an Array 4082s - raises a TypeError when given an Hash 4082s - raises a TypeError when given an Object 4082s 4082s Symbol#slice with a Range slice that is within bounds 4082s - returns a slice if both range values begin at the start and are within bounds 4082s - returns a slice if the first range value begins at the start and the last begins at the end 4082s - returns a slice if the first range value begins at the end and the last begins at the end 4082s 4082s Symbol#slice with a Range slice that is out of bounds 4082s - returns nil if the first range value begins past the end 4082s - returns a blank string if the first range value is within bounds and the last range value is not 4082s - 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 4082s - 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 4082s 4082s Symbol#slice with a Range slice with Float values 4082s - converts the first value to an Integer 4082s - converts the last value to an Integer 4082s 4082s Symbol#slice with a Range subclass slice 4082s - returns a slice 4082s 4082s Symbol#slice with a Regex slice without a capture index 4082s - returns a string of the match 4082s - returns nil if the expression does not match 4082s - sets $~ to the MatchData if there is a match 4082s - does not set $~ if there if there is not a match 4082s 4082s Symbol#slice with a Regex slice with a capture index 4082s - returns a string of the complete match if the capture index is 0 4082s - returns a string for the matched capture at the given index 4082s - returns nil if there is no capture for the index 4082s - converts the index to an Integer 4082s - raises a TypeError if the index is nil 4082s - sets $~ to the MatchData if there is a match 4082s - does not set $~ to the MatchData if there is not a match 4082s 4082s Symbol#slice with a Regex slice with a capture index and an index that cannot be converted to an Integer 4082s - raises a TypeError when given an Hash 4082s - raises a TypeError when given an Array 4082s - raises a TypeError when given an Object 4082s 4082s Symbol#slice with a String slice 4082s - does not set $~ 4082s - returns a string if there is match 4082s - returns nil if there is not a match 4082s 4082s Symbol#start_with? 4082s - returns true only if beginning match 4082s - returns true only if any beginning match 4082s - returns true if the search string is empty 4082s - converts its argument using :to_str 4082s - ignores arguments not convertible to string 4082s - uses only the needed arguments 4082s - works for multibyte strings 4082s - supports regexps 4082s - supports regexps with ^ and $ modifiers 4082s - sets Regexp.last_match if it returns true 4082s - does not check that we are not matching part of a character 4082s 4082s Symbol#succ 4082s - returns a successor 4082s - propagates a 'carry' 4082s - increments non-alphanumeric characters when no alphanumeric characters are present 4082s 4082s Symbol#swapcase 4082s - returns a Symbol 4082s - converts lowercase ASCII characters to their uppercase equivalents 4082s - converts uppercase ASCII characters to their lowercase equivalents 4082s - works with both upper- and lowercase ASCII characters in the same Symbol 4082s - swaps the case for Unicode characters 4082s - leaves non-alphabetic ASCII characters as they were 4082s 4082s Symbol 4082s - includes Comparable 4082s - .allocate raises a TypeError 4082s - .new is undefined 4082s 4082s Symbol#to_proc 4082s - returns a new Proc 4082s - sends self to arguments passed when calling #call on the Proc 4082s - returns a Proc with #lambda? true 4082s - produces a Proc that always returns [[:req], [:rest]] for #parameters 4082s - raises an ArgumentError when calling #call on the Proc without receiver 4082s - passes along the block passed to Proc#call 4082s 4082s Symbol#to_s 4082s - returns the string corresponding to self 4082s - returns a String in the same encoding as self 4082s 4082s Symbol#to_sym 4082s - returns self 4082s 4082s Symbol#upcase 4082s - returns a Symbol 4082s - converts lowercase ASCII characters to their uppercase equivalents 4082s - capitalizes all Unicode characters 4082s - leaves non-alphabetic ASCII characters as they were 4082s 4082s SystemExit#initialize 4082s - accepts a status 4082s - accepts a message 4082s - accepts a status and message 4082s - sets the status to 0 by default 4082s 4082s SystemExit#success? 4082s - returns true when the status is 0 4082s - returns false when the status is not 0 4082s 4082s Thread#abort_on_exception 4082s - is false by default 4082s - returns true when #abort_on_exception= is passed true 4082s 4082s Thread#abort_on_exception= when enabled and the thread dies due to an exception 4082s - causes the main thread to raise the exception raised in the thread 4082s 4082s Thread.abort_on_exception 4082s - is false by default 4082s - returns true when .abort_on_exception= is passed true 4082s 4082s Thread.abort_on_exception= when enabled and a non-main thread dies due to an exception 4082s - causes the main thread to raise the exception raised in the thread 4082s 4082s Thread#add_trace_func 4082s - needs to be reviewed for spec completeness 4082s 4082s Thread#alive? 4082s - can check it's own status 4082s - describes a running thread 4082s - describes a sleeping thread 4082s - describes a blocked thread 4082s - describes a completed thread 4082s - describes a killed thread 4082s - describes a thread with an uncaught exception 4082s - describes a dying running thread 4082s - describes a dying sleeping thread 4082s - returns true for a killed but still running thread 4082s 4082s Thread.allocate 4082s - raises a TypeError 4082s 4082s Thread::Backtrace.limit 4085s - returns maximum backtrace length set by --backtrace-limit command-line option 4087s - returns -1 when --backtrace-limit command-line option is not set 4087s 4087s Thread::Backtrace::Location#absolute_path 4087s - returns the absolute path of the call frame 4090s - returns an absolute path when using a relative main script path 4093s - returns the correct absolute path when using a relative main script path and changing CWD 4093s 4093s Thread::Backtrace::Location#absolute_path when used in #method_added 4093s - returns the user filename that defined the method 4093s 4093s Thread::Backtrace::Location#base_label 4093s - is for a module body 4093s - is for a class body 4093s - is 'singleton class' for a singleton class body 4093s 4093s Thread::Backtrace::Location#base_label when call frame is inside a block 4093s - returns the name of the method that contains the block 4093s 4093s Thread::Backtrace::Location#inspect 4093s - converts the call frame to a String 4093s 4093s Thread::Backtrace::Location#label 4093s - returns the method name for a method location 4093s - returns the block name for a block location 4093s - returns the module name for a module location 4093s 4093s Thread::Backtrace::Location#lineno 4093s - returns the line number of the call frame 4093s - should be the same line number as in #to_s, including for core methods 4093s 4093s Thread::Backtrace::Location#path 4093s - should be the same path as in #to_s, including for core methods 4093s 4093s Thread::Backtrace::Location#path outside a main script 4093s - returns an absolute path 4093s 4093s Thread::Backtrace::Location#path in a main script when the script is in the working directory when using a relative script path 4096s - returns a path relative to the working directory 4096s 4096s Thread::Backtrace::Location#path in a main script when the script is in the working directory when using an absolute script path 4099s - returns an absolute path 4099s 4099s 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 4102s - returns a path relative to the working directory 4102s 4102s 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 4105s - returns an absolute path 4105s 4105s Thread::Backtrace::Location#path in a main script when the script is outside of the working directory when using a relative script path 4108s - returns a path relative to the working directory 4108s 4108s Thread::Backtrace::Location#path in a main script when the script is outside of the working directory when using an absolute path 4111s - returns an absolute path 4111s 4111s Thread::Backtrace::Location#to_s 4111s - converts the call frame to a String 4111s 4111s Thread#backtrace_locations 4111s - returns an Array 4111s - sets each element to a Thread::Backtrace::Location 4111s - can be called on any Thread 4111s - can be called with a number of locations to omit 4111s - can be called with a maximum number of locations to return as second parameter 4111s - can be called with a range 4111s - can be called with an endless range 4111s - can be called with an beginless range 4111s - returns [] if omitting exactly the number of locations available 4111s - [1..-1] is the same as #caller_locations(0..-1) for Thread.current 4111s 4111s Thread#backtrace 4111s - returns nil for dead thread 4111s - can be called with a number of locations to omit 4111s - can be called with a maximum number of locations to return as second parameter 4111s - can be called with a range 4111s - returns nil if omitting more locations than available 4111s - returns [] if omitting exactly the number of locations available 4111s 4111s Thread.current 4111s - returns a thread 4111s - returns the current thread 4111s 4111s Thread#[] 4111s - gives access to thread local values 4111s - is not shared across threads 4111s - is accessible using strings or symbols 4111s - raises exceptions on the wrong type of keys 4111s 4111s Thread#[]= 4111s - raises a FrozenError if the thread is frozen 4111s - raises exceptions on the wrong type of keys 4111s - is not shared across fibers 4111s - stores a local in another thread when in a fiber 4111s 4111s Thread#exit! 4111s - needs to be reviewed for spec completeness 4111s 4111s Thread.exit 4111s - causes the current thread to exit 4111s 4111s Thread#fetch 4111s - raises an ArgumentError when not passed one or two arguments 4111s 4111s Thread#fetch with 2 arguments 4111s - returns the value of the fiber-local variable if value has been assigned 4111s - returns the default value if fiber-local variable hasn't been assigned 4111s 4111s Thread#fetch with 1 argument 4111s - raises a KeyError when the Thread does not have a fiber-local variable of the same name 4111s - returns the value of the fiber-local variable if value has been assigned 4111s 4111s Thread#fetch with a block 4111s - returns the value of the fiber-local variable if value has been assigned 4111s - returns the block value if fiber-local variable hasn't been assigned 4111s - does not call the block if value has been assigned 4111s - uses the block if a default is given and warns about it 4111s 4111s Thread.fork Thread.start 4111s - spawns a new Thread running the block 4111s - respects Thread subclasses 4111s 4111s Thread#group 4111s - needs to be reviewed for spec completeness 4111s 4111s Thread.handle_interrupt 4111s - with :never defers interrupts until exiting the handle_interrupt block 4111s - with :on_blocking defers interrupts until the next blocking call 4111s - with :immediate handles interrupts immediately 4111s - with :immediate immediately runs pending interrupts, before the block 4111s - also works with suspended Fibers and does not duplicate interrupts 4111s - runs pending interrupts at the end of the block, even if there was an exception raised in the block 4111s - supports multiple pairs in the Hash 4111s 4111s Thread.ignore_deadlock 4111s - returns false by default 4111s 4111s Thread.ignore_deadlock= 4111s - changes the value of Thread.ignore_deadlock 4111s 4111s Thread#initialize already initialized 4111s - raises a ThreadError 4111s 4111s Thread#inspect 4111s - returns a description including file and line number 4111s - can check it's own status 4111s - describes a running thread 4111s - describes a sleeping thread 4111s - describes a blocked thread 4111s - describes a completed thread 4111s - describes a killed thread 4111s - describes a thread with an uncaught exception 4111s - describes a dying sleeping thread 4111s - reports aborting on a killed thread 4111s - reports aborting on a killed thread after sleep 4111s 4111s Thread#join 4111s - returns the thread when it is finished 4111s - returns the thread when it is finished when given a timeout 4111s - coerces timeout to a Float if it is not nil 4111s - raises TypeError if the argument is not a valid timeout 4111s - returns nil if it is not finished when given a timeout 4111s - accepts a floating point timeout length 4111s - raises any exceptions encountered in the thread body 4111s - returns the dead thread 4111s - raises any uncaught exception encountered in ensure block 4111s 4111s Thread#key? 4111s - tests for existence of thread local variables using symbols or strings 4111s - raises exceptions on the wrong type of keys 4111s - is not shared across fibers 4111s - stores a local in another thread when in a fiber 4111s 4111s Thread#keys 4111s - returns an array of the names of the thread-local variables as symbols 4111s - is not shared across fibers 4111s - stores a local in another thread when in a fiber 4111s 4111s Thread#kill 4111s - kills sleeping thread 4111s - kills current thread 4111s - runs ensure clause 4111s - runs nested ensure clauses 4111s - does not set $! 4111s - does not reset $! 4111s - cannot be rescued 4111s - kills other fibers of that thread without running their ensure clauses (FAILED - 1) 4111s - can be rescued by outer rescue clause when inner ensure clause raises exception 4111s - is deferred if ensure clause does Thread.stop 4111s - does not deadlock when called from within the thread while being joined from without 4111s 4111s Thread.kill 4111s - causes the given thread to exit 4111s 4111s Thread.list 4111s - includes the current and main thread 4111s - includes threads of non-default thread groups 4111s - does not include deceased threads 4111s - includes waiting threads 4111s - returns instances of Thread and not null or nil values 4111s 4111s Thread.main 4111s - returns the main thread 4111s 4111s Thread#name 4111s - is nil initially 4111s - returns the thread name 4111s 4111s Thread#name= 4111s - can be set to a String 4111s - raises an ArgumentError if the name includes a null byte 4111s - can be reset to nil 4111s - calls #to_str to convert name to String 4111s 4111s Thread#native_thread_id 4111s - returns an integer when the thread is alive 4111s - returns nil when the thread is not running 4111s 4111s Thread.new 4111s - creates a thread executing the given block 4111s - can pass arguments to the thread block 4111s - raises an exception when not given a block 4111s - creates a subclass of thread calls super with a block in initialize 4111s - calls #initialize and raises an error if super not used 4111s - calls and respects #initialize for the block to use 4111s - releases Mutexes held by the Thread when the Thread finishes 4111s - releases Mutexes held by the Thread when the Thread finishes, also with Mutex#synchronize 4111s 4111s Thread.pass 4111s - returns nil 4111s 4111s Thread.pending_interrupt? 4111s - returns false if there are no pending interrupts, e.g., outside any Thread.handle_interrupt block 4111s - returns true if there are pending interrupts, e.g., Thread#raise inside Thread.handle_interrupt 4111s 4111s Thread#pending_interrupt? 4111s - returns whether the given threads has pending interrupts 4111s 4111s Thread#priority 4111s - inherits the priority of the current thread while running 4111s - maintain the priority of the current thread after death 4111s - returns an integer 4111s 4111s Thread#priority= when set with an integer 4111s - returns an integer 4111s - clamps the priority to -3..3 4111s 4111s Thread#priority= when set with a non-integer 4111s - raises a type error 4111s 4111s Thread#raise 4111s - ignores dead threads and returns nil 4111s 4111s Thread#raise on a sleeping thread 4111s - raises a RuntimeError if no exception class is given 4111s - raises the given exception 4111s - raises the given exception with the given message 4111s - raises the given exception and the backtrace is the one of the interrupted thread 4111s - is captured and raised by Thread#value 4111s - re-raises a previously rescued exception without overwriting the backtrace 4111s - calls #exception in both the caller and in the target thread 4111s 4111s Thread#raise on a running thread 4111s - raises a RuntimeError if no exception class is given 4111s - raises the given exception 4111s - raises the given exception with the given message 4111s - can go unhandled 4111s - raises the given argument even when there is an active exception 4111s 4111s Thread#raise on same thread 4111s - aborts execution 4111s - accepts an exception that implements to_hash 4111s - allows the message parameter to be a hash 4111s - allows extra keyword arguments for compatibility 4111s - does not allow message and extra keyword arguments 4111s - raises RuntimeError if no exception class is given 4111s - raises a given Exception instance 4111s - raises a RuntimeError if string given 4111s - passes no arguments to the constructor when given only an exception class 4111s - raises a TypeError when passed a non-Exception object 4111s - raises a TypeError when passed true 4111s - raises a TypeError when passed false 4111s - raises a TypeError when passed nil 4111s - allows Exception, message, and backtrace parameters 4111s 4111s Thread.report_on_exception 4114s - defaults to true 4114s 4114s Thread.report_on_exception= 4114s - changes the default value for new threads 4114s 4114s Thread#report_on_exception 4114s - returns true for the main Thread 4114s - returns true for new Threads 4114s - returns whether the Thread will print a backtrace if it exits with an exception 4114s 4114s Thread#report_on_exception= when set to true 4114s - prints a backtrace on $stderr if it terminates with an exception 4114s - prints the backtrace even if the thread was killed just after Thread#raise 4114s 4114s Thread#report_on_exception= when set to false 4114s - lets the thread terminates silently with an exception 4114s 4114s Thread#report_on_exception= when used in conjunction with Thread#abort_on_exception 4114s - first reports then send the exception back to the main Thread 4114s 4114s Thread#run 4114s - can interrupt Kernel#sleep 4114s - does not result in a deadlock 4114s - raises a ThreadError when trying to wake up a dead thread 4114s 4114s Thread#set_trace_func 4114s - needs to be reviewed for spec completeness 4114s 4114s Thread.start Thread.start 4114s - raises an ArgumentError if not passed a block 4114s - spawns a new Thread running the block 4114s - respects Thread subclasses 4114s - does not call #initialize 4114s 4114s Thread#status 4114s - can check it's own status 4114s - describes a running thread 4114s - describes a sleeping thread 4114s - describes a blocked thread 4114s - describes a completed thread 4114s - describes a killed thread 4114s - describes a thread with an uncaught exception 4114s - describes a dying sleeping thread 4114s - reports aborting on a killed thread 4114s - reports aborting on a killed thread after sleep 4114s - reports aborting on an externally killed thread that sleeps 4114s 4114s Thread.stop 4114s - causes the current thread to sleep indefinitely 4114s 4114s Thread#stop? 4114s - can check it's own status 4114s - describes a running thread 4114s - describes a sleeping thread 4114s - describes a blocked thread 4114s - describes a completed thread 4114s - describes a killed thread 4114s - describes a thread with an uncaught exception 4114s - describes a dying running thread 4114s - describes a dying sleeping thread 4114s - describes a dying thread after sleep 4114s 4114s Thread#terminate 4114s - kills sleeping thread 4114s - kills current thread 4114s - runs ensure clause 4114s - runs nested ensure clauses 4114s - does not set $! 4114s - does not reset $! 4114s - cannot be rescued 4114s - kills the entire thread when a fiber is active 4114s - can be rescued by outer rescue clause when inner ensure clause raises exception 4114s - is deferred if ensure clause does Thread.stop 4114s - does not deadlock when called from within the thread while being joined from without 4114s 4114s Thread#thread_variable_get 4114s - returns nil if the variable is not set 4114s - returns the value previously set by #thread_variable_set 4114s - returns a value private to self 4114s 4114s Thread#thread_variable_set 4114s - returns the value set 4114s - sets a value that will be returned by #thread_variable_get 4114s - sets a value private to self 4114s 4114s Thread#thread_variable? 4114s - returns false if the thread variables do not contain 'key' 4114s - returns true if the thread variables contain 'key' 4114s 4114s Thread#thread_variables 4114s - returns the keys of all the values set 4114s - sets a value private to self 4114s - only contains user thread variables and is empty initially 4114s 4114s Thread#to_s 4114s - returns a description including file and line number 4114s - can check it's own status 4114s - describes a running thread 4114s - describes a sleeping thread 4114s - describes a blocked thread 4114s - describes a completed thread 4114s - describes a killed thread 4114s - describes a thread with an uncaught exception 4114s - describes a dying sleeping thread 4114s - reports aborting on a killed thread 4114s - reports aborting on a killed thread after sleep 4114s 4114s Thread#value 4114s - returns the result of the block 4114s - re-raises an error for an uncaught exception 4115s - is nil for a killed thread 4115s - returns when the thread finished 4115s 4115s Thread#wakeup 4115s - can interrupt Kernel#sleep 4115s - does not result in a deadlock 4115s - raises a ThreadError when trying to wake up a dead thread 4115s 4115s ThreadGroup#add 4115s - adds the given thread to a group and returns self 4115s - removes itself from any other threadgroup 4115s 4115s ThreadGroup::Default 4115s - is a ThreadGroup instance 4115s - is the ThreadGroup of the main thread 4115s 4115s ThreadGroup#enclosed? 4115s - returns false when a ThreadGroup has not been enclosed (default state) 4115s - returns true when a ThreadGroup is enclosed 4115s 4115s Time#_dump 4115s - preserves the GMT flag 4115s - dumps a Time object to a bytestring 4115s - dumps an array with a date as first element 4115s - dumps an array with a time as second element 4115s - dumps like MRI's marshaled time format 4115s 4115s Time._load 4115s - loads a time object in the new format 4115s - loads a time object in the old UNIX timestamp based format 4115s - loads MRI's marshaled time format 4115s - treats the data as binary data 4115s 4115s Time#asctime 4115s - returns a canonical string representation of time 4115s 4115s Time.at passed Numeric 4115s - returns a Time object representing the given number of Integer seconds since 1970-01-01 00:00:00 UTC 4115s - returns a Time object representing the given number of Float seconds since 1970-01-01 00:00:00 UTC 4115s - returns a non-UTC Time 4115s - returns a subclass instance on a Time subclass 4115s - roundtrips a Rational produced by #to_r 4115s 4115s Time.at passed Numeric passed BigDecimal 4115s - doesn't round input value 4115s 4115s Time.at passed Numeric passed Rational 4115s - returns Time with correct microseconds 4115s - returns Time with correct nanoseconds 4115s 4115s Time.at passed Time 4115s - creates a new time object with the value given by time 4115s - creates a dup time object with the value given by time 4115s - returns a UTC time if the argument is UTC 4115s - returns a non-UTC time if the argument is non-UTC 4115s - returns a subclass instance 4115s 4115s Time.at passed non-Time, non-Numeric 4115s - raises a TypeError with a String argument 4115s - raises a TypeError with a nil argument 4115s 4115s Time.at passed non-Time, non-Numeric with an argument that responds to #to_int 4115s - coerces using #to_int 4115s 4115s Time.at passed non-Time, non-Numeric with an argument that responds to #to_r 4115s - coerces using #to_r 4115s - needs for the argument to respond to #to_int too 4115s 4115s Time.at passed [Integer, Numeric] 4115s - returns a Time object representing the given number of seconds and Integer microseconds since 1970-01-01 00:00:00 UTC 4115s - returns a Time object representing the given number of seconds and Float microseconds since 1970-01-01 00:00:00 UTC 4115s 4115s Time.at with a second argument that responds to #to_int 4115s - coerces using #to_int 4115s 4115s Time.at with a second argument that responds to #to_r 4115s - coerces using #to_r 4115s 4115s Time.at passed [Integer, nil] 4115s - raises a TypeError 4115s 4115s Time.at passed [Integer, String] 4115s - raises a TypeError 4115s 4115s Time.at passed [Time, Integer] 4115s - raises a TypeError 4115s 4115s Time.at passed [Time, Numeric, format] 4115s - supports Float second argument 4115s 4115s Time.at passed [Time, Numeric, format] :nanosecond format 4115s - treats second argument as nanoseconds 4115s 4115s Time.at passed [Time, Numeric, format] :nsec format 4115s - treats second argument as nanoseconds 4115s 4115s Time.at passed [Time, Numeric, format] :microsecond format 4115s - treats second argument as microseconds 4115s 4115s Time.at passed [Time, Numeric, format] :usec format 4115s - treats second argument as microseconds 4115s 4115s Time.at passed [Time, Numeric, format] :millisecond format 4115s - treats second argument as milliseconds 4115s 4115s Time.at passed [Time, Numeric, format] not supported format 4115s - raises ArgumentError 4115s - does not try to convert format to Symbol with #to_sym 4115s 4115s Time.at :in keyword argument 4115s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 4115s - could be UTC offset as a number of seconds 4115s - could be UTC offset as a 'UTC' String 4115s - could be UTC offset as a military zone A-Z 4115s - could be a timezone object 4115s - raises ArgumentError if format is invalid 4115s 4115s Time#ceil 4115s - defaults to ceiling to 0 places 4115s - ceils to 0 decimal places with an explicit argument 4115s - ceils to 2 decimal places with an explicit argument 4115s - ceils to 4 decimal places with an explicit argument 4115s - ceils to 7 decimal places with an explicit argument 4115s - returns an instance of Time, even if #ceil is called on a subclass 4115s - copies own timezone to the returning value 4115s 4115s Time#<=> 4115s - returns 1 if the first argument is a point in time after the second argument 4115s - returns 1 if the first argument is a point in time after the second argument (down to a millisecond) 4115s - returns 1 if the first argument is a point in time after the second argument (down to a microsecond) 4115s - returns 0 if time is the same as other 4115s - returns -1 if the first argument is a point in time before the second argument 4115s - returns -1 if the first argument is a point in time before the second argument (down to a millisecond) 4115s - returns -1 if the first argument is a point in time before the second argument (down to a microsecond) 4115s - returns 1 if the first argument is a fraction of a microsecond after the second argument 4115s - returns 0 if time is the same as other, including fractional microseconds 4115s - returns -1 if the first argument is a fraction of a microsecond before the second argument 4115s - returns nil when compared to an Integer because Time does not respond to #coerce 4115s 4115s Time#<=> given a non-Time argument 4115s - returns nil if argument <=> self returns nil 4115s - returns -1 if argument <=> self is greater than 0 4115s - returns 1 if argument <=> self is not greater than 0 and is less than 0 4115s - returns 0 if argument <=> self is neither greater than 0 nor less than 0 4115s - returns nil if argument also uses an inverse comparison for <=> 4115s 4115s Time#ctime 4115s - returns a canonical string representation of time 4115s 4115s Time#day 4115s - returns the day of the month (1..n) for a local Time 4115s - returns the day of the month for a UTC Time 4115s - returns the day of the month for a Time with a fixed offset 4115s 4115s Time#dst? 4115s - dst? returns whether time is during daylight saving time 4115s 4115s Time#dup 4115s - returns a Time object that represents the same time 4115s - copies the gmt state flag 4115s - returns an independent Time object 4115s - returns a subclass instance 4115s - returns a clone of Time instance 4115s - does not copy frozen status from the original 4115s 4115s Time#eql? 4115s - returns true if self and other have the same whole number of seconds 4115s - returns false if self and other have differing whole numbers of seconds 4115s - returns true if self and other have the same number of microseconds 4115s - returns false if self and other have differing numbers of microseconds 4115s - returns false if self and other have differing fractional microseconds 4115s - returns false when given a non-time value 4115s 4115s Time#floor 4115s - defaults to flooring to 0 places 4115s - floors to 0 decimal places with an explicit argument 4115s - floors to 7 decimal places with an explicit argument 4115s - returns an instance of Time, even if #floor is called on a subclass 4115s - copies own timezone to the returning value 4115s 4115s Time#friday? 4115s - returns true if time represents Friday 4115s - returns false if time doesn't represent Friday 4115s 4115s Time#getgm 4115s - returns a new time which is the utc representation of time 4115s 4115s Time#getlocal 4115s - returns a new time which is the local representation of time 4115s - returns a Time with UTC offset specified as an Integer number of seconds 4115s - returns a new time with the correct utc_offset according to the set timezone 4115s - returns a Time with a UTC offset specified as +HH:MM 4115s - returns a Time with a UTC offset specified as -HH:MM 4115s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 4115s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 4115s 4115s Time#getlocal with an argument that responds to #to_int 4115s - coerces using #to_int 4115s 4115s Time#getlocal with an argument that responds to #to_str 4115s - coerces using #to_str 4115s 4115s Time#getlocal with a timezone argument 4115s - returns a Time in the timezone 4115s - accepts timezone argument that must have #local_to_utc and #utc_to_local methods 4115s - raises TypeError if timezone does not implement #utc_to_local method 4115s - does not raise exception if timezone does not implement #local_to_utc method 4115s 4115s Time#getlocal with a timezone argument subject's class implements .find_timezone method 4115s - calls .find_timezone to build a time object if passed zone name as a timezone argument 4115s - does not call .find_timezone if passed any not string/numeric/timezone timezone argument 4115s 4115s Time#getutc 4115s - returns a new time which is the utc representation of time 4115s 4115s Time.gm 4115s - creates a time based on given values, interpreted as UTC (GMT) 4115s - creates a time based on given C-style gmtime arguments, interpreted as UTC (GMT) 4115s - interprets pre-Gregorian reform dates using Gregorian proleptic calendar 4115s - interprets Julian-Gregorian gap dates using Gregorian proleptic calendar 4115s - interprets post-Gregorian reform dates using Gregorian calendar 4115s - handles fractional usec close to rounding limit 4115s - handles bad leap seconds by carrying values forward 4115s - handles a value of 60 for seconds by carrying values forward in zone 'UTC' 4115s - accepts 1 argument (year) 4115s - accepts 2 arguments (year, month) 4115s - accepts 3 arguments (year, month, day) 4115s - accepts 4 arguments (year, month, day, hour) 4115s - accepts 5 arguments (year, month, day, hour, minute) 4115s - accepts a too big day of the month by going to the next month 4115s - raises a TypeError if the year is nil 4115s - accepts nil month, day, hour, minute, and second 4115s - handles a String year 4115s - coerces the year with #to_int 4115s - handles a String month given as a numeral 4115s - handles a String month given as a short month name 4115s - coerces the month with #to_str 4115s - coerces the month with #to_int 4115s - handles a String day 4115s - coerces the day with #to_int 4115s - handles a String hour 4115s - coerces the hour with #to_int 4115s - handles a String minute 4115s - coerces the minute with #to_int 4115s - handles a String second 4115s - coerces the second with #to_int 4115s - interprets all numerals as base 10 4115s - handles fractional seconds as a Float 4115s - handles fractional seconds as a Rational 4115s - handles years from 0 as such 4115s - accepts various year ranges 4115s - raises an ArgumentError for out of range month 4115s - raises an ArgumentError for out of range day 4115s - raises an ArgumentError for out of range hour 4115s - raises an ArgumentError for out of range minute 4115s - raises an ArgumentError for out of range second 4115s - raises ArgumentError when given 9 arguments 4115s - raises ArgumentError when given 11 arguments 4115s - returns subclass instances 4115s - handles string arguments 4115s - handles float arguments 4115s - raises an ArgumentError for out of range values 4115s - handles microseconds 4115s - raises an ArgumentError for out of range microsecond 4115s - handles fractional microseconds as a Float 4115s - handles fractional microseconds as a Rational 4115s - ignores fractional seconds if a passed whole number of microseconds 4115s - ignores fractional seconds if a passed fractional number of microseconds 4115s 4115s Time#gmt_offset 4115s - returns the offset in seconds between the timezone of time and UTC 4115s - returns 0 when the date is UTC 4115s - returns the correct offset for US Eastern time zone around daylight savings time change 4115s - returns the correct offset for Hawaii around daylight savings time change 4115s - returns the correct offset for New Zealand around daylight savings time change 4115s 4115s Time#gmt_offset given positive offset 4115s - returns a positive offset 4115s 4115s Time#gmt_offset given negative offset 4115s - returns a negative offset 4115s 4115s Time#gmt? 4115s - returns true if time represents a time in UTC (GMT) 4115s 4115s Time#gmtime 4115s - converts self to UTC, modifying the receiver 4115s - returns self 4115s 4115s Time#gmtime on a frozen time 4115s - does not raise an error if already in UTC 4115s - raises a FrozenError if the time is not UTC 4115s 4115s Time#gmtoff 4115s - returns the offset in seconds between the timezone of time and UTC 4115s - returns 0 when the date is UTC 4115s - returns the correct offset for US Eastern time zone around daylight savings time change 4115s - returns the correct offset for Hawaii around daylight savings time change 4115s - returns the correct offset for New Zealand around daylight savings time change 4115s 4115s Time#gmtoff given positive offset 4115s - returns a positive offset 4115s 4115s Time#gmtoff given negative offset 4115s - returns a negative offset 4115s 4115s Time#hash 4115s - returns an Integer 4115s - is stable 4115s 4115s Time#hour 4115s - returns the hour of the day (0..23) for a local Time 4115s - returns the hour of the day for a UTC Time 4115s - returns the hour of the day for a Time with a fixed offset 4115s 4115s Time#inspect 4115s - formats the local time following the pattern 'yyyy-MM-dd HH:mm:ss Z' 4115s - formats the UTC time following the pattern 'yyyy-MM-dd HH:mm:ss UTC' 4115s - formats the fixed offset time following the pattern 'yyyy-MM-dd HH:mm:ss +/-HHMM' 4115s - returns a US-ASCII encoded string 4115s - preserves microseconds 4115s - omits trailing zeros from microseconds 4115s - uses the correct time zone without microseconds 4115s - uses the correct time zone with microseconds 4115s - preserves nanoseconds 4115s 4115s Time#isdst 4115s - dst? returns whether time is during daylight saving time 4115s 4115s Time.local 4115s - creates a time based on given values, interpreted in the local time zone 4115s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 4115s - creates a time based on given C-style gmtime arguments, interpreted in the local time zone 4115s - creates the correct time just before dst change 4115s - creates the correct time just after dst change 4115s - accepts 1 argument (year) 4115s - accepts 2 arguments (year, month) 4115s - accepts 3 arguments (year, month, day) 4115s - accepts 4 arguments (year, month, day, hour) 4115s - accepts 5 arguments (year, month, day, hour, minute) 4115s - accepts a too big day of the month by going to the next month 4115s - raises a TypeError if the year is nil 4115s - accepts nil month, day, hour, minute, and second 4115s - handles a String year 4115s - coerces the year with #to_int 4115s - handles a String month given as a numeral 4115s - handles a String month given as a short month name 4115s - coerces the month with #to_str 4115s - coerces the month with #to_int 4115s - handles a String day 4115s - coerces the day with #to_int 4115s - handles a String hour 4115s - coerces the hour with #to_int 4115s - handles a String minute 4115s - coerces the minute with #to_int 4115s - handles a String second 4115s - coerces the second with #to_int 4115s - interprets all numerals as base 10 4115s - handles fractional seconds as a Float 4115s - handles fractional seconds as a Rational 4115s - handles years from 0 as such 4115s - accepts various year ranges 4115s - raises an ArgumentError for out of range month 4115s - raises an ArgumentError for out of range day 4115s - raises an ArgumentError for out of range hour 4115s - raises an ArgumentError for out of range minute 4115s - raises an ArgumentError for out of range second 4115s - raises ArgumentError when given 9 arguments 4115s - raises ArgumentError when given 11 arguments 4115s - returns subclass instances 4115s - handles string arguments 4115s - handles float arguments 4115s - raises an ArgumentError for out of range values 4115s - handles microseconds 4115s - raises an ArgumentError for out of range microsecond 4115s - handles fractional microseconds as a Float 4115s - handles fractional microseconds as a Rational 4115s - ignores fractional seconds if a passed whole number of microseconds 4115s - ignores fractional seconds if a passed fractional number of microseconds 4115s 4115s Time#localtime 4115s - converts self to local time, modifying the receiver 4115s - returns self 4115s - converts time to the UTC offset specified as an Integer number of seconds 4115s - returns a Time with a UTC offset specified as +HH:MM 4115s - returns a Time with a UTC offset specified as -HH:MM 4115s - returns a Time with a UTC offset specified as UTC 4115s - returns a Time with a UTC offset specified as A-Z military zone 4115s - changes the timezone according to the set one 4115s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 4115s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 4115s 4115s Time#localtime on a frozen time 4115s - does not raise an error if already in the right time zone 4115s - raises a FrozenError if the time has a different time zone 4115s 4115s Time#localtime with an argument that responds to #to_int 4115s - coerces using #to_int 4115s 4115s Time#localtime with an argument that responds to #to_str 4115s - coerces using #to_str 4115s 4115s Time#mday 4115s - returns the day of the month (1..n) for a local Time 4115s - returns the day of the month for a UTC Time 4115s - returns the day of the month for a Time with a fixed offset 4115s 4115s Time#min 4115s - returns the minute of the hour (0..59) for a local Time 4115s - returns the minute of the hour for a UTC Time 4115s - returns the minute of the hour for a Time with a fixed offset 4115s 4115s Time#- 4115s - decrements the time by the specified amount 4115s - understands negative subtractions 4115s - accepts arguments that can be coerced into Rational 4115s - raises a TypeError if given argument is a coercible String 4115s - raises TypeError on argument that can't be coerced 4115s - raises TypeError on nil argument 4115s - tracks microseconds 4115s - tracks microseconds from a Rational 4115s - tracks nanoseconds 4115s - maintains microseconds precision 4115s - maintains nanoseconds precision 4115s - returns a UTC time if self is UTC 4115s - returns a non-UTC time if self is non-UTC 4115s - returns a time with the same fixed offset as self 4115s - preserves time zone 4115s 4115s Time#- zone is a timezone object 4115s - preserves time zone 4115s 4115s Time.mktime 4115s - creates a time based on given values, interpreted in the local time zone 4115s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 4115s - creates a time based on given C-style gmtime arguments, interpreted in the local time zone 4115s - creates the correct time just before dst change 4115s - creates the correct time just after dst change 4115s - accepts 1 argument (year) 4115s - accepts 2 arguments (year, month) 4115s - accepts 3 arguments (year, month, day) 4115s - accepts 4 arguments (year, month, day, hour) 4115s - accepts 5 arguments (year, month, day, hour, minute) 4115s - accepts a too big day of the month by going to the next month 4115s - raises a TypeError if the year is nil 4115s - accepts nil month, day, hour, minute, and second 4115s - handles a String year 4115s - coerces the year with #to_int 4115s - handles a String month given as a numeral 4115s - handles a String month given as a short month name 4115s - coerces the month with #to_str 4115s - coerces the month with #to_int 4115s - handles a String day 4115s - coerces the day with #to_int 4115s - handles a String hour 4115s - coerces the hour with #to_int 4115s - handles a String minute 4115s - coerces the minute with #to_int 4115s - handles a String second 4115s - coerces the second with #to_int 4115s - interprets all numerals as base 10 4115s - handles fractional seconds as a Float 4115s - handles fractional seconds as a Rational 4115s - handles years from 0 as such 4115s - accepts various year ranges 4115s - raises an ArgumentError for out of range month 4115s - raises an ArgumentError for out of range day 4115s - raises an ArgumentError for out of range hour 4115s - raises an ArgumentError for out of range minute 4115s - raises an ArgumentError for out of range second 4115s - raises ArgumentError when given 9 arguments 4115s - raises ArgumentError when given 11 arguments 4115s - returns subclass instances 4115s - handles string arguments 4115s - handles float arguments 4115s - raises an ArgumentError for out of range values 4115s - handles microseconds 4115s - raises an ArgumentError for out of range microsecond 4115s - handles fractional microseconds as a Float 4115s - handles fractional microseconds as a Rational 4115s - ignores fractional seconds if a passed whole number of microseconds 4115s - ignores fractional seconds if a passed fractional number of microseconds 4115s 4115s Time#mon 4115s - returns the month of the year for a local Time 4115s - returns the month of the year for a UTC Time 4115s - returns the four digit year for a Time with a fixed offset 4115s 4115s Time#monday? 4115s - returns true if time represents Monday 4115s - returns false if time doesn't represent Monday 4115s 4115s Time#month 4115s - returns the month of the year for a local Time 4115s - returns the month of the year for a UTC Time 4115s - returns the four digit year for a Time with a fixed offset 4115s 4115s Time.new 4115s - creates a subclass instance if called on a subclass 4115s - sets the current time 4115s - uses the local timezone 4115s - has at least microsecond precision 4115s 4115s Time.new 4115s - creates a time based on given values, interpreted in the local time zone 4115s - uses the 'CET' timezone with TZ=Europe/Amsterdam in 1970 4115s - accepts 1 argument (year) 4115s - accepts 2 arguments (year, month) 4115s - accepts 3 arguments (year, month, day) 4115s - accepts 4 arguments (year, month, day, hour) 4115s - accepts 5 arguments (year, month, day, hour, minute) 4115s - accepts a too big day of the month by going to the next month 4115s - raises a TypeError if the year is nil 4115s - accepts nil month, day, hour, minute, and second 4115s - handles a String year 4115s - coerces the year with #to_int 4115s - handles a String month given as a numeral 4115s - handles a String month given as a short month name 4115s - coerces the month with #to_str 4115s - coerces the month with #to_int 4115s - handles a String day 4115s - coerces the day with #to_int 4115s - handles a String hour 4115s - coerces the hour with #to_int 4115s - handles a String minute 4115s - coerces the minute with #to_int 4115s - handles a String second 4115s - coerces the second with #to_int 4115s - interprets all numerals as base 10 4115s - handles fractional seconds as a Float 4115s - handles fractional seconds as a Rational 4115s - handles years from 0 as such 4115s - accepts various year ranges 4115s - raises an ArgumentError for out of range month 4115s - raises an ArgumentError for out of range day 4115s - raises an ArgumentError for out of range hour 4115s - raises an ArgumentError for out of range minute 4115s - raises an ArgumentError for out of range second 4115s - raises ArgumentError when given 9 arguments 4115s - raises ArgumentError when given 11 arguments 4115s - returns subclass instances 4115s 4115s Time.new with a utc_offset argument 4115s - returns a non-UTC time 4115s - returns a Time with a UTC offset of the specified number of Integer seconds 4115s - returns a Time with a UTC offset specified as +HH:MM 4115s - returns a Time with a UTC offset specified as -HH:MM 4115s - returns a Time with a UTC offset specified as +HH:MM:SS 4115s - returns a Time with a UTC offset specified as -HH:MM 4115s - returns a Time with a UTC offset specified as +HH 4115s - returns a Time with a UTC offset specified as -HH 4115s - returns a Time with a UTC offset specified as +HHMM 4115s - returns a Time with a UTC offset specified as -HHMM 4115s - returns a Time with a UTC offset specified as +HHMMSS 4115s - returns a Time with a UTC offset specified as -HHMMSS 4115s - returns a Time with UTC offset specified as UTC 4115s - returns a Time with UTC offset specified as a single letter military timezone 4115s - raises ArgumentError if the string argument is J 4115s - returns a local Time if the argument is nil 4115s - disallows a value for minutes greater than 59 4115s - raises ArgumentError if the hour value is greater than 23 4115s - raises ArgumentError if the argument represents a value less than or equal to -86400 seconds 4115s - raises ArgumentError if the argument represents a value greater than or equal to 86400 seconds 4115s - raises ArgumentError if the utc_offset argument is greater than or equal to 10e9 4115s 4115s Time.new with a utc_offset argument with an argument that responds to #to_int 4115s - coerces using #to_int 4115s 4115s Time.new with a utc_offset argument with an argument that responds to #to_str 4115s - coerces using #to_str 4115s 4115s Time.new with a timezone argument 4115s - returns a Time in the timezone 4115s - accepts timezone argument that must have #local_to_utc and #utc_to_local methods 4115s - raises TypeError if timezone does not implement #local_to_utc method 4115s - does not raise exception if timezone does not implement #utc_to_local method 4115s 4115s Time.new with a timezone argument returned value by #utc_to_local and #local_to_utc methods 4115s - could be Time instance 4115s - could be Time subclass instance 4115s - could be any object with #to_i method 4115s - could have any #zone and #utc_offset because they are ignored 4115s - leads to raising Argument error if difference between argument and result is too large 4115s 4115s Time.new with a timezone argument Time-like argument of #utc_to_local and #local_to_utc methods 4115s - implements subset of Time methods 4115s 4115s Time.new with a timezone argument subject's class implements .find_timezone method 4115s - calls .find_timezone to build a time object if passed zone name as a timezone argument 4115s - does not call .find_timezone if passed any not string/numeric/timezone timezone argument 4115s 4115s Time.new with a timezone argument :in keyword argument 4115s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 4115s - could be UTC offset as a number of seconds 4115s - returns a Time with UTC offset specified as a single letter military timezone 4115s - could be a timezone object 4115s - allows omitting minor arguments 4115s - converts to a provided timezone if all the positional arguments are omitted 4115s - raises ArgumentError if format is invalid 4115s - raises ArgumentError if two offset arguments are given 4115s 4115s Time.now 4115s - creates a subclass instance if called on a subclass 4115s - sets the current time 4115s - uses the local timezone 4115s - has at least microsecond precision 4115s 4115s Time.now :in keyword argument 4115s - could be UTC offset as a String in '+HH:MM or '-HH:MM' format 4115s - could be UTC offset as a number of seconds 4115s - returns a Time with UTC offset specified as a single letter military timezone 4115s - could be a timezone object 4115s - raises ArgumentError if format is invalid 4115s 4115s Time#nsec 4115s - returns 0 for a Time constructed with a whole number of seconds 4115s - returns the nanoseconds part of a Time constructed with a Float number of seconds 4115s - returns the nanoseconds part of a Time constructed with an Integer number of microseconds 4115s - returns the nanoseconds part of a Time constructed with an Float number of microseconds 4115s - returns the nanoseconds part of a Time constructed with a Rational number of seconds 4115s - returns the nanoseconds part of a Time constructed with an Rational number of microseconds 4115s - returns a positive value for dates before the epoch 4115s 4115s Time#+ 4115s - increments the time by the specified amount 4115s - is a commutative operator 4115s - raises a TypeError if given argument is a coercible String 4115s - increments the time by the specified amount as rational numbers 4115s - accepts arguments that can be coerced into Rational 4115s - raises TypeError on argument that can't be coerced into Rational 4115s - returns a UTC time if self is UTC 4115s - returns a non-UTC time if self is non-UTC 4115s - returns a time with the same fixed offset as self 4115s - preserves time zone 4115s - raises TypeError on Time argument 4115s - raises TypeError on nil argument 4115s - tracks microseconds 4115s - tracks nanoseconds 4115s - maintains precision 4115s - maintains microseconds precision 4115s - maintains nanoseconds precision 4115s 4115s Time#+ zone is a timezone object 4115s - preserves time zone 4115s 4115s Time#round 4115s - defaults to rounding to 0 places 4115s - rounds to 0 decimal places with an explicit argument 4115s - rounds to 7 decimal places with an explicit argument 4115s - returns an instance of Time, even if #round is called on a subclass 4115s - copies own timezone to the returning value 4115s 4115s Time#saturday? 4115s - returns true if time represents Saturday 4115s - returns false if time doesn't represent Saturday 4115s 4115s Time#sec 4115s - returns the second of the minute(0..60) for time 4115s 4115s Time#strftime 4115s - should be able to print the full day name 4115s - should be able to print the short day name 4115s - should be able to print the full month name 4115s - should be able to print the short month name 4115s - should be able to print the century 4115s - should be able to print the month day with leading zeroes 4115s - should be able to print the month day with leading spaces 4115s - should be able to print the commercial year with leading zeroes 4115s - should be able to print the commercial year with only two digits 4115s - should be able to print the hour with leading zeroes (hour is always 00) 4115s - should be able to print the hour in 12 hour notation with leading zeroes 4115s - should be able to print the julian day with leading zeroes 4115s - should be able to print the hour in 24 hour notation with leading spaces 4115s - should be able to print the hour in 12 hour notation with leading spaces 4115s - should be able to print the minutes with leading zeroes 4115s - should be able to print the month with leading zeroes 4115s - should be able to add a newline 4115s - should be able to show AM/PM 4115s - should be able to show am/pm 4115s - should be able to show the number of seconds with leading zeroes 4115s - should be able to show the number of seconds since the unix epoch for a date 4115s - should be able to add a tab 4115s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 4115s - should be able to show the commercial week day 4115s - should be able to show the commercial week with %V 4115s - should be able to show the week day 4115s - should be able to show the year in YYYY format 4115s - should be able to show the year in YY format 4115s - should be able to show the timezone of the date with a : separator 4115s - should be able to escape the % character 4115s - should be able to print the date in full 4115s - should be able to print the date with slashes 4115s - should be able to print the date as YYYY-MM-DD 4115s - should be able to show HH:MM for a date 4115s - should be able to show HH:MM:SS AM/PM for a date 4115s - should be able to show HH:MM:SS 4115s - should be able to show HH:MM:SS 4115s - should be able to show MM/DD/YY 4115s - supports GNU modificators 4115s - supports the '-' modifier to drop leading zeros 4115s - passes the format string's encoding to the result string 4115s - formats time according to the directives in the given format string 4115s - returns the 24-based hour with %H 4115s - returns the 12-based hour with %I 4115s - supports 24-hr formatting with %l 4115s - supports 12-hr formatting with %l 4115s - returns the minute with %M 4115s - supports am/pm formatting with %P 4115s - supports AM/PM formatting with %p 4115s - returns the second with %S 4115s - should be able to show the number of seconds since the unix epoch 4115s - returns the timezone with %Z 4115s - should be able to print the time in full 4115s - should be able to show HH:MM 4115s - should be able to show HH:MM:SS AM/PM 4115s - supports HH:MM:SS formatting with %T 4115s - supports HH:MM:SS formatting with %X 4115s - supports the '-' modifier to drop leading zeros 4115s - supports the '-' modifier for padded format directives 4115s - should be able to show default Logger format 4115s - requires an argument 4115s - should be able to show the timezone if available 4115s - should be able to show the commercial week 4115s 4115s Time#strftime with %L 4115s - formats the milliseconds of the second 4115s 4115s Time#strftime with %N 4115s - formats the nanoseconds of the second with %N 4115s - formats the milliseconds of the second with %3N 4115s - formats the microseconds of the second with %6N 4115s - formats the nanoseconds of the second with %9N 4115s 4115s Time#strftime with %z 4115s - formats a UTC time offset as '+0000' 4115s - formats a local time with positive UTC offset as '+HHMM' 4115s - formats a local time with negative UTC offset as '-HHMM' 4115s - formats a time with fixed positive offset as '+HHMM' 4115s - formats a time with fixed negative offset as '-HHMM' 4115s - formats a time with fixed offset as '+/-HH:MM' with ':' specifier 4115s - formats a time with fixed offset as '+/-HH:MM:SS' with '::' specifier 4115s 4115s Time#subsec 4115s - returns 0 as an Integer for a Time with a whole number of seconds 4115s - returns the fractional seconds as a Rational for a Time constructed with a Rational number of seconds 4115s - returns the fractional seconds as a Rational for a Time constructed with a Float number of seconds 4115s - returns the fractional seconds as a Rational for a Time constructed with an Integer number of microseconds 4115s - returns the fractional seconds as a Rational for a Time constructed with an Rational number of microseconds 4115s - returns the fractional seconds as a Rational for a Time constructed with an Float number of microseconds 4115s 4115s Time#sunday? 4115s - returns true if time represents Sunday 4115s - returns false if time doesn't represent Sunday 4115s 4115s Time#thursday? 4115s - returns true if time represents Thursday 4115s - returns false if time doesn't represent Thursday 4115s 4115s Time 4115s - includes Comparable 4115s 4115s Time#to_a 4115s - returns a 10 element array representing the deconstructed time 4115s 4115s Time#to_f 4115s - returns the float number of seconds + usecs since the epoch 4115s 4115s Time#to_i 4115s - returns the value of time as an integer number of seconds since epoch 4115s - doesn't return an actual number of seconds in time 4115s - rounds fractional seconds toward zero 4115s 4115s Time#to_r 4115s - returns the a Rational representing seconds and subseconds since the epoch 4115s - returns a Rational even for a whole number of seconds 4115s 4115s Time#to_s 4115s - formats the local time following the pattern 'yyyy-MM-dd HH:mm:ss Z' 4115s - formats the UTC time following the pattern 'yyyy-MM-dd HH:mm:ss UTC' 4115s - formats the fixed offset time following the pattern 'yyyy-MM-dd HH:mm:ss +/-HHMM' 4115s - returns a US-ASCII encoded string 4115s 4115s Time#tuesday? 4115s - returns true if time represents Tuesday 4115s - returns false if time doesn't represent Tuesday 4115s 4115s Time#tv_nsec 4115s - needs to be reviewed for spec completeness 4115s 4115s Time#tv_sec 4115s - returns the value of time as an integer number of seconds since epoch 4115s - doesn't return an actual number of seconds in time 4115s - rounds fractional seconds toward zero 4115s 4115s Time#tv_usec 4115s - needs to be reviewed for spec completeness 4115s 4115s Time#usec 4115s - returns 0 for a Time constructed with a whole number of seconds 4115s - returns the microseconds part of a Time constructed with a Float number of seconds 4115s - returns the microseconds part of a Time constructed with an Integer number of microseconds 4115s - returns the microseconds part of a Time constructed with an Float number of microseconds > 1 4115s - returns 0 for a Time constructed with an Float number of microseconds < 1 4115s - returns the microseconds part of a Time constructed with a Rational number of seconds 4115s - returns the microseconds part of a Time constructed with an Rational number of microseconds > 1 4115s - returns 0 for a Time constructed with an Rational number of microseconds < 1 4115s - returns the microseconds for time created by Time#local 4115s - returns a positive value for dates before the epoch 4115s 4115s Time#utc_offset 4115s - returns the offset in seconds between the timezone of time and UTC 4115s - returns 0 when the date is UTC 4115s - returns the correct offset for US Eastern time zone around daylight savings time change 4115s - returns the correct offset for Hawaii around daylight savings time change 4115s - returns the correct offset for New Zealand around daylight savings time change 4115s 4115s Time#utc_offset given positive offset 4115s - returns a positive offset 4115s 4115s Time#utc_offset given negative offset 4115s - returns a negative offset 4115s 4115s Time#utc? 4115s - returns true only if time represents a time in UTC (GMT) 4115s - treats time as UTC what was created in different ways 4115s - does not treat time with +00:00 offset as UTC 4115s - does not treat time with 0 offset as UTC 4115s 4115s Time.utc 4115s - creates a time based on given values, interpreted as UTC (GMT) 4115s - creates a time based on given C-style gmtime arguments, interpreted as UTC (GMT) 4115s - interprets pre-Gregorian reform dates using Gregorian proleptic calendar 4115s - interprets Julian-Gregorian gap dates using Gregorian proleptic calendar 4115s - interprets post-Gregorian reform dates using Gregorian calendar 4115s - handles fractional usec close to rounding limit 4115s - handles bad leap seconds by carrying values forward 4115s - handles a value of 60 for seconds by carrying values forward in zone 'UTC' 4115s - accepts 1 argument (year) 4115s - accepts 2 arguments (year, month) 4115s - accepts 3 arguments (year, month, day) 4115s - accepts 4 arguments (year, month, day, hour) 4115s - accepts 5 arguments (year, month, day, hour, minute) 4115s - accepts a too big day of the month by going to the next month 4115s - raises a TypeError if the year is nil 4115s - accepts nil month, day, hour, minute, and second 4115s - handles a String year 4115s - coerces the year with #to_int 4115s - handles a String month given as a numeral 4115s - handles a String month given as a short month name 4115s - coerces the month with #to_str 4115s - coerces the month with #to_int 4115s - handles a String day 4115s - coerces the day with #to_int 4115s - handles a String hour 4115s - coerces the hour with #to_int 4115s - handles a String minute 4115s - coerces the minute with #to_int 4115s - handles a String second 4115s - coerces the second with #to_int 4115s - interprets all numerals as base 10 4115s - handles fractional seconds as a Float 4115s - handles fractional seconds as a Rational 4115s - handles years from 0 as such 4115s - accepts various year ranges 4115s - raises an ArgumentError for out of range month 4115s - raises an ArgumentError for out of range day 4115s - raises an ArgumentError for out of range hour 4115s - raises an ArgumentError for out of range minute 4115s - raises an ArgumentError for out of range second 4115s - raises ArgumentError when given 9 arguments 4115s - raises ArgumentError when given 11 arguments 4115s - returns subclass instances 4115s - handles string arguments 4115s - handles float arguments 4115s - raises an ArgumentError for out of range values 4115s - handles microseconds 4115s - raises an ArgumentError for out of range microsecond 4115s - handles fractional microseconds as a Float 4115s - handles fractional microseconds as a Rational 4115s - ignores fractional seconds if a passed whole number of microseconds 4115s - ignores fractional seconds if a passed fractional number of microseconds 4115s 4115s Time#utc 4115s - converts self to UTC, modifying the receiver 4115s - returns self 4115s 4115s Time#utc on a frozen time 4115s - does not raise an error if already in UTC 4115s - raises a FrozenError if the time is not UTC 4115s 4115s Time#wday 4115s - returns an integer representing the day of the week, 0..6, with Sunday being 0 4115s 4115s Time#wednesday? 4115s - returns true if time represents Wednesday 4115s - returns false if time doesn't represent Wednesday 4115s 4115s Time#yday 4115s - returns an integer representing the day of the year, 1..366 4115s - returns the correct value for each day of each month 4115s 4115s Time#year 4115s - returns the four digit year for a local Time as an Integer 4115s - returns the four digit year for a UTC Time as an Integer 4115s - returns the four digit year for a Time with a fixed offset 4115s 4115s Time#zone 4115s - returns the time zone used for time 4115s - returns nil for a Time with a fixed offset 4115s - returns the correct timezone for a local time 4115s - returns nil when getting the local time with a fixed offset 4115s 4115s Time#zone Encoding.default_internal is set 4115s - returns an ASCII string 4115s - doesn't raise errors for a Time with a fixed offset 4115s 4115s TrueClass#& 4115s - returns false if other is nil or false, otherwise true 4115s 4115s TrueClass#=== 4115s - returns true for true 4115s - returns false for non-true object 4115s 4115s TrueClass#dup 4115s - returns self 4115s 4115s TrueClass#inspect 4115s - returns the string 'true' 4115s 4115s TrueClass#| 4115s - returns true 4115s 4115s TrueClass#to_s 4115s - returns the string 'true' 4115s - returns a frozen string 4115s - always returns the same string 4115s 4115s TrueClass 4115s - .allocate raises a TypeError 4115s - .new is undefined 4115s 4115s TrueClass#^ 4115s - returns true if other is nil or false, otherwise false 4115s 4115s UnboundMethod#arity returns zero 4115s - for method definition 'def m() end' 4115s - for method definition 'def n(&b) end' 4115s 4115s UnboundMethod#arity returns positive values 4115s - for method definition 4115s def m(a) end 4115s def n(a, b) end 4115s def o(a, b, c) end 4115s def p(a, b, c, d) end 4115s - for method definition 4115s def m(a:) end 4115s def n(a:, b:) end 4115s def o(a: 1, b:, c:, d: 2) end 4115s - for method definition 4115s def m(a, b:) end 4115s def n(a, b:, &l) end 4115s - for method definition 4115s def m(a, b, c:, d: 1) end 4115s def n(a, b, c:, d: 1, **k, &l) end 4115s 4115s UnboundMethod#arity returns negative values 4115s - for method definition 4115s def m(a=1) end 4115s def n(a=1, b=2) end 4115s - for method definition 4115s def m(a, b=1) end 4115s def n(a, b, c=1, d=2) end 4115s - for method definition 4115s def m(a=1, *b) end 4115s def n(a=1, b=2, *c) end 4115s - for method definition 4115s def m(*) end 4115s def n(*a) end 4115s - for method definition 4115s def m(a, *) end 4115s def n(a, *b) end 4115s def o(a, b, *c) end 4115s def p(a, b, c, *d) end 4115s - for method definition 4115s def m(*a, b) end 4115s def n(*a, b, c) end 4115s def o(*a, b, c, d) end 4115s - for method definition 4115s def m(a, *b, c) end 4115s def n(a, b, *c, d, e) end 4115s - for method definition 4115s def m(a, b=1, c=2, *d, e, f) end 4115s def n(a, b, c=1, *d, e, f, g) end 4115s - for method definition 4115s def m(a: 1) end 4115s def n(a: 1, b: 2) end 4115s - for method definition 4115s def m(a=1, b: 2) end 4115s def n(*a, b: 1) end 4115s def o(a=1, b: 2) end 4115s def p(a=1, *b, c: 2, &l) end 4115s - for method definition 4115s def m(**k, &l) end 4115s def n(*a, **k) end 4115s def o(a: 1, b: 2, **k) end 4115s - for method definition 'def m(a=1, *b, c:, d: 2, **k, &l) end' 4115s - for method definition 4115s def m(a, b=1, *c, d, e:, f: 2, **k, &l) end 4115s def n(a, b=1, *c, d:, e:, f: 2, **k, &l) end 4115s def o(a=0, b=1, *c, d, e:, f: 2, **k, &l) end 4115s def p(a=0, b=1, *c, d:, e:, f: 2, **k, &l) end 4115s 4115s UnboundMethod#arity for a Method generated by respond_to_missing? 4115s - returns -1 4115s 4115s UnboundMethod#bind_call 4115s - raises TypeError if object is not kind_of? the Module the method defined in 4115s - binds and calls the method if object is kind_of the Module the method defined in 4115s - binds and calls the method on any object when UnboundMethod is unbound from a module 4115s - binds and calls the method for any object kind_of? the Module the method is defined in 4115s - binds and calls a Kernel method retrieved from Object on BasicObject 4115s - binds and calls a Parent's class method to any Child's class methods 4115s - will raise when binding a an object singleton's method to another object 4115s - allows calling super for module methods bound to hierarchies that do not already have that module 4115s 4115s UnboundMethod#bind 4115s - raises TypeError if object is not kind_of? the Module the method defined in 4115s - returns Method for any object that is kind_of? the Module method was extracted from 4115s - returns Method on any object when UnboundMethod is unbound from a module 4115s - the returned Method is equal to the one directly returned by obj.method 4115s - returns Method for any object kind_of? the Module the method is defined in 4115s - allows binding a Kernel method retrieved from Object on BasicObject 4115s - returns a callable method 4115s - binds a Parent's class method to any Child's class methods 4115s - will raise when binding a an object singleton's method to another object 4115s - allows calling super for module methods bound to hierarchies that do not already have that module 4115s 4115s UnboundMethod#clone 4115s - returns a copy of the UnboundMethod 4115s 4115s UnboundMethod#eql? 4115s - needs to be reviewed for spec completeness 4115s 4115s Creating UnboundMethods 4115s - there is no difference between Method#unbind and Module#instance_method 4115s 4115s UnboundMethod#== 4115s - returns true if objects refer to the same method 4115s - returns true if either is an alias for the other 4115s - returns true if both are aliases for a third method 4115s - returns true if same method is extracted from the same subclass 4115s - returns false if UnboundMethods are different methods 4115s - returns false if both have identical body but are not the same 4115s - returns false if same method but one extracted from a subclass 4115s - returns false if same method but extracted from two different subclasses 4115s - returns false if methods are the same but added from an included Module 4115s - returns false if both have same Module, same name, identical body but not the same 4115s 4115s UnboundMethod#hash 4115s - returns the same value for user methods that are eql? 4115s - returns the same value for builtin methods that are eql? 4115s - equals a hash of the same method in the superclass 4115s 4115s UnboundMethod#inspect 4115s - returns a String 4115s - the String reflects that this is an UnboundMethod object 4115s - the String shows the method name, Module defined in and Module extracted from 4115s - returns a String including all details 4115s - does not show the defining module if it is the same as the origin 4115s 4115s UnboundMethod#name 4115s - returns the name of the method 4115s - returns the name even when aliased 4115s 4115s UnboundMethod#original_name 4115s - returns the name of the method 4115s - returns the original name 4115s - returns the original name even when aliased twice 4115s 4115s UnboundMethod#owner 4115s - returns the owner of the method 4115s - returns the same owner when aliased in the same classes 4115s - returns the class/module it was defined in 4115s - returns the new owner for aliased methods on singleton classes 4115s 4115s UnboundMethod#parameters 4115s - needs to be reviewed for spec completeness 4115s 4115s UnboundMethod#private? 4115s - returns false when the method is public 4115s - returns false when the method is protected 4115s - returns true when the method is private 4115s 4115s UnboundMethod#protected? 4115s - returns false when the method is public 4115s - returns true when the method is protected 4115s - returns false when the method is private 4115s 4115s UnboundMethod#public? 4115s - returns true when the method is public 4115s - returns false when the method is protected 4115s - returns false when the method is private 4115s 4115s UnboundMethod#source_location 4115s - sets the first value to the path of the file in which the method was defined 4115s - sets the last value to an Integer representing the line on which the method was defined 4115s - returns the last place the method was defined 4115s - returns the location of the original method even if it was aliased 4115s - works for define_method methods 4115s - works for define_singleton_method methods 4115s - works for eval with a given line 4115s 4115s UnboundMethod#super_method 4115s - returns the method that would be called by super in the method 4115s - returns nil when there's no super method in the parent 4115s - returns nil when the parent's method is removed 4115s 4115s UnboundMethod#super_method after changing an inherited methods visibility 4115s - calls the proper super method 4115s - returns the expected super_method 4115s 4115s UnboundMethod#super_method after aliasing an inherited method 4115s - returns the expected super_method 4115s 4115s UnboundMethod#to_s 4115s - returns a String 4115s - the String reflects that this is an UnboundMethod object 4115s - the String shows the method name, Module defined in and Module extracted from 4115s - returns a String including all details 4115s - does not show the defining module if it is the same as the origin 4115s 4115s Warning.[] 4121s - returns default values for categories :deprecated and :experimental 4121s - raises for unknown category 4121s - raises for non-Symbol category 4121s 4121s Warning.[]= 4127s - emits and suppresses warnings for :deprecated 4127s - raises for unknown category 4127s - raises for non-Symbol category 4127s 4127s Warning.[]= :experimental 4132s - emits and suppresses warnings for :experimental 4132s 4132s Warning.warn 4132s - complains 4135s - does not add a newline 4138s - returns nil 4138s - extends itself 4141s - has Warning as the method owner 4144s - can be overridden 4144s - is called by parser warnings 4144s - is called by Kernel.warn with nil category keyword 4144s - is called by Kernel.warn with given category keyword converted to a symbol 4144s - warns when category is :deprecated and Warning[:deprecated] is true 4144s - warns when category is :experimental and Warning[:experimental] is true 4144s - doesn't print message when category is :deprecated but Warning[:deprecated] is false 4144s - doesn't print message when category is :experimental but Warning[:experimental] is false 4144s - prints the message when VERBOSE is false 4144s - prints the message when VERBOSE is nil 4144s - prints the message when VERBOSE is true 4144s 4144s English 4144s - aliases $ERROR_INFO to $! 4144s - aliases $ERROR_POSITION to $@ 4144s - aliases $FS to $; 4144s - aliases $FIELD_SEPARATOR to $; 4144s - aliases $OFS to $, 4144s - aliases $OUTPUT_FIELD_SEPARATOR to $, 4144s - aliases $RS to $/ 4144s - aliases $INPUT_RECORD_SEPARATOR to $/ 4144s - aliases $ORS to $\ 4144s - aliases $OUTPUT_RECORD_SEPARATOR to $\ 4144s - aliases $INPUT_LINE_NUMBER to $. 4144s - aliases $NR to $. 4144s - aliases $LAST_READ_LINE to $_ needs to be reviewed for spec completeness 4144s - aliases $DEFAULT_OUTPUT to $> 4144s - aliases $DEFAULT_INPUT to $< 4144s - aliases $PID to $$ 4144s - aliases $PID to $$ 4144s - aliases $PROCESS_ID to $$ 4147s - aliases $CHILD_STATUS to $? 4147s - aliases $LAST_MATCH_INFO to $~ 4147s - aliases $IGNORECASE to $= 4147s - aliases $ARGV to $* 4147s - aliases $MATCH to $& 4147s - aliases $PREMATCH to $` 4147s - aliases $POSTMATCH to $' 4147s - aliases $LAST_PAREN_MATCH to $+ 4147s 4147s English 4147s - aliases $! to $ERROR_INFO and $ERROR_INFO still returns an Exception with a backtrace 4147s - aliases $@ to $ERROR_POSITION and $ERROR_POSITION still returns a backtrace 4147s 4147s Abbrev.abbrev 4147s - returns a hash of all unambiguous abbreviations of the array of strings passed in 4147s - returns an empty hash when called on an empty array 4147s 4147s Array#abbrev 4147s - returns a hash of all unambiguous abbreviations of the array of strings passed in 4147s - returns an empty hash when called on an empty array 4147s 4147s Base64#decode64 4147s - returns the Base64-decoded version of the given string 4147s - returns the Base64-decoded version of the given shared string 4147s - returns the Base64-decoded version of the given string with wrong padding 4147s - returns the Base64-decoded version of the given string that contains an invalid character 4147s - returns a binary encoded string 4147s - decodes without padding suffix == 4147s 4147s Base64#encode64 4147s - returns the Base64-encoded version of the given string 4147s - returns the Base64-encoded version of the given string 4147s - returns the Base64-encoded version of the given shared string 4147s - returns a US_ASCII encoded string 4147s 4147s Base64#strict_decode64 4147s - returns the Base64-decoded version of the given string 4147s - returns the Base64-decoded version of the given shared string 4147s - raises ArgumentError when the given string contains CR 4147s - raises ArgumentError when the given string contains LF 4147s - raises ArgumentError when the given string has wrong padding 4147s - raises ArgumentError when the given string contains an invalid character 4147s - returns a binary encoded string 4147s 4147s Base64#strict_encode64 4147s - returns the Base64-encoded version of the given string 4147s - returns the Base64-encoded version of the given shared string 4147s - returns a US_ASCII encoded string 4147s 4147s Base64#urlsafe_decode64 4147s - uses '_' instead of '/' 4147s - uses '-' instead of '+' 4147s - does not require padding 4147s 4147s Base64#urlsafe_encode64 4147s - uses '_' instead of '/' 4147s - uses '-' instead of '+' 4147s - makes padding optional 4147s 4147s BigDecimal 4150s - is not defined unless it is required 4150s 4150s Kernel#BigDecimal 4150s - creates a new object of class BigDecimal 4150s - BigDecimal(Rational) with bigger-than-double numerator 4150s - accepts significant digits >= given precision 4150s - determines precision from initial value 4150s - ignores leading and trailing whitespace 4150s - coerces the value argument with #to_str 4150s - does not ignores trailing garbage 4150s - raises ArgumentError for invalid strings 4150s - allows omitting the integer part 4150s - process underscores as Float() 4150s - accepts NaN and [+-]Infinity 4150s - allows for [eEdD] as exponent separator 4150s - allows for varying signs 4150s - raises ArgumentError when Float is used without precision 4150s - returns appropriate BigDecimal zero for signed zero 4150s - pre-coerces long integers 4153s - does not call to_s when calling inspect 4153s 4153s Kernel#BigDecimal accepts NaN and [+-]Infinity as Float values 4153s - works without an explicit precision 4153s - works with an explicit precision 4153s 4153s Kernel#BigDecimal when interacting with Rational 4153s - has the LHS print as expected 4153s - has the RHS print as expected 4153s - produces the expected result when done via Float 4153s - produces the expected result when done via to_f 4153s - BigDecimal(Rational, 18) produces the result we expect 4153s - produces a BigDecimal 4153s - produces the expected result 4153s - produces the correct class for other arithmetic operators 4153s 4153s BigDecimal#abs 4153s - returns the absolute value 4153s - properly handles special values 4153s 4153s BigDecimal#add 4153s - returns a + b with given precision 4153s - returns a + [Fixnum value] with given precision 4153s - returns a + [Bignum value] with given precision 4153s - favors the precision specified in the second argument over the global limit 4153s - uses the current rounding mode if rounding is needed 4153s - uses the default ROUND_HALF_UP rounding if it wasn't explicitly changed 4153s - returns NaN if NaN is involved 4153s - returns Infinity or -Infinity if these are involved 4153s - returns NaN if Infinity + (- Infinity) 4153s - raises TypeError when adds nil 4153s - raises TypeError when precision parameter is nil 4153s - raises ArgumentError when precision parameter is negative 4153s 4153s BigDecimal#add with Object 4153s - tries to coerce the other operand to self 4153s 4153s BigDecimal#add with Rational 4153s - produces a BigDecimal 4153s 4153s BigDecimal#=== 4153s - tests for equality 4153s - returns false for NaN as it is never equal to any number 4153s - returns true for infinity values with the same sign 4153s - returns false for infinity values with different signs 4153s - returns false when infinite value compared to finite one 4153s - returns false when compared objects that can not be coerced into BigDecimal 4153s 4153s BigDecimal#ceil 4153s - returns an Integer, if n is unspecified 4153s - returns a BigDecimal, if n is specified 4153s - returns the smallest integer greater or equal to self, if n is unspecified 4153s - raise exception, if self is special value 4153s - returns n digits right of the decimal point if given n > 0 4153s - sets n digits left of the decimal point to 0, if given n < 0 4153s 4153s BigDecimal#dup 4153s - returns self 4153s 4153s BigDecimal#coerce 4153s - returns [other, self] both as BigDecimal 4153s 4153s BigDecimal#<=> 4153s - returns 0 if a == b 4153s - returns 1 if a > b 4153s - returns -1 if a < b 4153s - returns nil if NaN is involved 4153s - returns nil if the argument is nil 4153s 4153s BigDecimal constants 4153s - defines a VERSION value 4153s - has a BASE value 4153s - has a NaN value 4153s - has an INFINITY value 4153s 4153s BigDecimal constants exception-related constants 4153s - has a EXCEPTION_ALL value 4153s - has a EXCEPTION_INFINITY value 4153s - has a EXCEPTION_NaN value 4153s - has a EXCEPTION_UNDERFLOW value 4153s - has a EXCEPTION_OVERFLOW value 4153s - has a EXCEPTION_ZERODIVIDE value 4153s 4153s BigDecimal constants rounding-related constants 4153s - has a ROUND_MODE value 4153s - has a ROUND_UP value 4153s - has a ROUND_DOWN value 4153s - has a ROUND_HALF_UP value 4153s - has a ROUND_HALF_DOWN value 4153s - has a ROUND_CEILING value 4153s - has a ROUND_FLOOR value 4153s - has a ROUND_HALF_EVEN value 4153s 4153s BigDecimal constants sign-related constants 4153s - has a SIGN_NaN value 4153s - has a SIGN_POSITIVE_ZERO value 4153s - has a SIGN_NEGATIVE_ZERO value 4153s - has a SIGN_POSITIVE_FINITE value 4153s - has a SIGN_NEGATIVE_FINITE value 4153s - has a SIGN_POSITIVE_INFINITE value 4153s - has a SIGN_NEGATIVE_INFINITE value 4153s 4153s BigDecimal#div with precision set to 0 4154s - returns a / b 4154s - returns 0 if divided by Infinity 4154s - returns (+|-) Infinity if (+|-) Infinity divided by one 4154s - returns NaN if Infinity / ((+|-) Infinity) 4154s - returns (+|-) Infinity if divided by zero 4154s - returns NaN if zero is divided by zero 4154s 4154s BigDecimal#div with precision set to 0 with Object 4154s - tries to coerce the other operand to self 4154s 4154s BigDecimal#div 4154s - returns a / b with optional precision 4154s - raises FloatDomainError if NaN is involved 4154s - returns 0 if divided by Infinity and no precision given 4154s - returns 0 if divided by Infinity with given precision 4154s - raises ZeroDivisionError if divided by zero and no precision given 4154s - returns NaN if zero is divided by zero 4154s - raises FloatDomainError if (+|-) Infinity divided by 1 and no precision given 4154s - returns (+|-)Infinity if (+|-)Infinity by 1 and precision given 4154s - returns NaN if Infinity / ((+|-) Infinity) 4154s 4154s BigDecimal#div with Object 4154s - tries to coerce the other operand to self 4154s 4154s BigDecimal#/ 4155s - returns a / b 4155s - returns 0 if divided by Infinity 4155s - returns (+|-) Infinity if (+|-) Infinity divided by one 4155s - returns NaN if Infinity / ((+|-) Infinity) 4155s - returns (+|-) Infinity if divided by zero 4155s - returns NaN if zero is divided by zero 4155s 4155s BigDecimal#/ with Object 4155s - tries to coerce the other operand to self 4155s 4155s BigDecimal#/ with Rational 4155s - produces a BigDecimal 4155s 4155s BigDecimal#mod_part_of_divmod 4155s - returns self modulo other 4155s - returns a [Float value] when the argument is Float 4155s - returns NaN if NaN is involved 4155s - returns NaN if the dividend is Infinity 4155s - returns the dividend if the divisor is Infinity 4155s - raises TypeError if the argument cannot be coerced to BigDecimal 4155s - raises ZeroDivisionError if other is zero 4155s 4155s BigDecimal#mod_part_of_divmod with Object 4155s - tries to coerce the other operand to self 4155s 4155s BigDecimal#divmod 4155s - divides value, returns an array 4155s - array contains quotient and modulus as BigDecimal 4156s - can be reversed with * and + 4156s - returns an array of two NaNs if NaN is involved 4156s - raises ZeroDivisionError if the divisor is zero 4156s - returns an array of Infinity and NaN if the dividend is Infinity 4156s - returns an array of zero and the dividend if the divisor is Infinity 4156s - returns an array of two zero if the dividend is zero 4156s - raises TypeError if the argument cannot be coerced to BigDecimal 4156s 4156s BigDecimal.double_fig 4156s - returns the number of digits a Float number is allowed to have 4156s 4156s BigDecimal#dup 4156s - returns self 4156s 4156s BigDecimal#eql? 4156s - tests for equality 4156s - returns false for NaN as it is never equal to any number 4156s - returns true for infinity values with the same sign 4156s - returns false for infinity values with different signs 4156s - returns false when infinite value compared to finite one 4156s - returns false when compared objects that can not be coerced into BigDecimal 4156s 4156s BigDecimal#== 4156s - tests for equality 4156s - returns false for NaN as it is never equal to any number 4156s - returns true for infinity values with the same sign 4156s - returns false for infinity values with different signs 4156s - returns false when infinite value compared to finite one 4156s - returns false when compared objects that can not be coerced into BigDecimal 4156s 4156s BigDecimal#** 4156s - powers of self 4156s - powers of 1 equal 1 4156s - 0 to power of 0 is 1 4156s - 0 to powers < 0 is Infinity 4156s - other powers of 0 are 0 4156s - returns NaN if self is NaN 4156s - returns 0.0 if self is infinite and argument is negative 4156s - returns infinite if self is infinite and argument is positive 4156s 4156s BigDecimal#exponent 4156s - returns an Integer 4156s - is n if number can be represented as 0.xxx*10**n 4156s - returns 0 if self is 0 4156s 4156s BigDecimal#finite? 4156s - is false if Infinity or NaN 4156s - returns true for finite values 4156s 4156s BigDecimal#fix 4156s - returns a BigDecimal 4156s - returns the integer part of the absolute value 4156s - correctly handles special values 4156s - returns 0 if the absolute value is < 1 4156s - does not allow any arguments 4156s 4156s BigDecimal#floor 4156s - returns the greatest integer smaller or equal to self 4156s - raise exception, if self is special value 4156s - returns n digits right of the decimal point if given n > 0 4156s - sets n digits left of the decimal point to 0, if given n < 0 4156s 4156s BigDecimal#frac 4156s - returns a BigDecimal 4156s - returns the fractional part of the absolute value 4156s - returns 0 if the value is 0 4156s - returns 0 if the value is an integer 4156s - correctly handles special values 4156s 4156s BigDecimal#> 4156s - returns true if a > b 4156s - properly handles infinity values 4156s - properly handles Float infinity values 4156s - properly handles NaN values 4156s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 4156s 4156s BigDecimal#>= 4156s - returns true if a >= b 4156s - properly handles infinity values 4156s - properly handles Float infinity values 4156s - properly handles NaN values 4156s - returns nil if the argument is nil 4156s 4156s BidDecimal#hash two BigDecimal objects with the same value 4156s - should have the same hash for ordinary values 4156s - should have the same hash for infinite values 4156s - should have the same hash for NaNs 4156s - should have the same hash for zero values 4156s 4156s BidDecimal#hash two BigDecimal objects with numerically equal values 4156s - should have the same hash value 4156s 4156s BigDecimal#infinite? 4156s - returns 1 if self is Infinity 4156s - returns -1 if self is -Infinity 4156s - returns not true otherwise 4156s - returns not true if self is NaN 4156s 4156s BigDecimal#inspect 4156s - returns String 4156s - looks like this 4156s - does not add an exponent for zero values 4156s - properly cases non-finite values 4156s 4156s BigDecimal.limit 4156s - returns the value before set if the passed argument is nil or is not specified 4156s - uses the global limit if no precision is specified 4156s - picks the specified precision over global limit 4156s - picks the global precision when limit 0 specified 4156s 4156s BigDecimal#< 4156s - returns true if a < b 4156s - properly handles infinity values 4156s - properly handles Float infinity values 4156s - properly handles NaN values 4156s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 4156s 4156s BigDecimal#<= 4156s - returns true if a <= b 4156s - properly handles infinity values 4156s - properly handles Float infinity values 4156s - properly handles NaN values 4156s - raises an ArgumentError if the argument can't be coerced into a BigDecimal 4156s 4156s BigDecimal#- 4156s - returns a - b 4156s - returns NaN if NaN is involved 4156s - returns NaN both operands are infinite with the same sign 4156s - returns Infinity or -Infinity if these are involved 4156s 4156s BigDecimal#- with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal.mode 4156s - returns the appropriate value and continue the computation if the flag is false 4156s - returns Infinity when too big 4156s - raise an exception if the flag is true 4156s 4156s BigDecimal#% 4156s - returns self modulo other 4156s - returns a [Float value] when the argument is Float 4156s - returns NaN if NaN is involved 4156s - returns NaN if the dividend is Infinity 4156s - returns the dividend if the divisor is Infinity 4156s - raises TypeError if the argument cannot be coerced to BigDecimal 4156s - raises ZeroDivisionError if other is zero 4156s 4156s BigDecimal#% with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#modulo 4156s - returns self modulo other 4156s - returns a [Float value] when the argument is Float 4156s - returns NaN if NaN is involved 4156s - returns NaN if the dividend is Infinity 4156s - returns the dividend if the divisor is Infinity 4156s - raises TypeError if the argument cannot be coerced to BigDecimal 4156s - raises ZeroDivisionError if other is zero 4156s 4156s BigDecimal#modulo with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#mult 4156s - returns zero of appropriate sign if self or argument is zero 4156s - returns NaN if NaN is involved 4156s - returns zero if self or argument is zero 4156s - returns infinite value if self or argument is infinite 4156s - returns NaN if the result is undefined 4156s 4156s BigDecimal#mult 4156s - multiply self with other with (optional) precision 4156s 4156s BigDecimal#mult with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#* 4156s - returns zero of appropriate sign if self or argument is zero 4156s - returns NaN if NaN is involved 4156s - returns zero if self or argument is zero 4156s - returns infinite value if self or argument is infinite 4156s - returns NaN if the result is undefined 4156s 4156s BigDecimal#* 4156s - multiply self with other 4156s 4156s BigDecimal#* with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#* with Rational 4156s - produces a BigDecimal 4156s 4156s BigDecimal#nan? 4156s - returns true if self is not a number 4156s - returns false if self is not a NaN 4156s 4156s BigDecimal#nonzero? 4156s - returns self if self doesn't equal zero 4156s - returns nil otherwise 4156s 4156s BigDecimal#+ 4156s - returns a + b 4156s - returns NaN if NaN is involved 4156s - returns Infinity or -Infinity if these are involved 4156s - returns NaN if Infinity + (- Infinity) 4156s 4156s BigDecimal#+ with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#power 4156s - powers of self 4156s - powers of 1 equal 1 4156s - 0 to power of 0 is 1 4156s - 0 to powers < 0 is Infinity 4156s - other powers of 0 are 0 4156s - returns NaN if self is NaN 4156s - returns 0.0 if self is infinite and argument is negative 4156s - returns infinite if self is infinite and argument is positive 4156s 4156s BigDecimal#precs 4156s - returns array of two values 4156s - returns Integers as array values 4156s - returns the current value of significant digits as the first value 4156s - returns the maximum number of significant digits as the second value 4156s 4156s BigDecimal#quo 4156s - returns a / b 4156s - returns 0 if divided by Infinity 4156s - returns (+|-) Infinity if (+|-) Infinity divided by one 4156s - returns NaN if Infinity / ((+|-) Infinity) 4156s - returns (+|-) Infinity if divided by zero 4156s - returns NaN if zero is divided by zero 4156s - returns NaN if NaN is involved 4156s 4156s BigDecimal#quo with Object 4156s - tries to coerce the other operand to self 4156s 4156s BigDecimal#remainder 4157s - it equals modulo, if both values are of same sign 4158s - means self-arg*(self/arg).truncate 4158s - returns NaN used with zero 4158s - returns zero if used on zero 4158s - returns NaN if NaN is involved 4158s - coerces arguments to BigDecimal if possible 4158s - raises TypeError if the argument cannot be coerced to BigDecimal 4158s 4158s BigDecimal#remainder with Object 4158s - tries to coerce the other operand to self 4158s 4158s BigDecimal#round 4158s - uses default rounding method unless given 4158s - raise exception, if self is special value 4158s - do not raise exception, if self is special value and precision is given 4158s - raise for a non-existent round mode 4158s 4158s BigDecimal#round BigDecimal::ROUND_UP 4158s - rounds values away from zero 4158s 4158s BigDecimal#round :up 4158s - rounds values away from zero 4158s 4158s BigDecimal#round BigDecimal::ROUND_DOWN 4158s - rounds values towards zero 4158s 4158s BigDecimal#round :down 4158s - rounds values towards zero 4158s 4158s BigDecimal#round :truncate 4158s - rounds values towards zero 4158s 4158s BigDecimal#round BigDecimal::ROUND_HALF_UP 4158s - rounds values >= 5 up, otherwise down 4158s 4158s BigDecimal#round :half_up 4158s - rounds values >= 5 up, otherwise down 4158s 4158s BigDecimal#round :default 4158s - rounds values >= 5 up, otherwise down 4158s 4158s BigDecimal#round BigDecimal::ROUND_HALF_DOWN 4158s - rounds values > 5 up, otherwise down 4158s 4158s BigDecimal#round :half_down 4158s - rounds values > 5 up, otherwise down 4158s 4158s BigDecimal#round BigDecimal::ROUND_CEILING 4158s - rounds values towards +infinity 4158s 4158s BigDecimal#round :ceiling 4158s - rounds values towards +infinity 4158s 4158s BigDecimal#round :ceil 4158s - rounds values towards +infinity 4158s 4158s BigDecimal#round BigDecimal::ROUND_FLOOR 4158s - rounds values towards -infinity 4158s 4158s BigDecimal#round :floor 4158s - rounds values towards -infinity 4158s 4158s BigDecimal#round BigDecimal::ROUND_HALF_EVEN 4158s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 4158s 4158s BigDecimal#round :half_even 4158s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 4158s 4158s BigDecimal#round :banker 4158s - rounds values > 5 up, < 5 down and == 5 towards even neighbor 4158s 4158s BigDecimal#sign 4158s - defines several constants for signs 4158s - returns positive value if BigDecimal greater than 0 4158s - returns negative value if BigDecimal less than 0 4158s - returns positive zero if BigDecimal equals positive zero 4158s - returns negative zero if BigDecimal equals negative zero 4158s - returns BigDecimal::SIGN_NaN if BigDecimal is NaN 4158s 4158s BigDecimal#split 4158s - splits BigDecimal in an array with four values 4158s - first value: 1 for numbers > 0 4158s - first value: -1 for numbers < 0 4158s - first value: 0 if BigDecimal is NaN 4158s - second value: a string with the significant digits 4158s - third value: the base (currently always ten) 4158s - fourth value: the exponent 4158s 4158s BigDecimal#sqrt 4158s - returns square root of 2 with desired precision 4158s - returns square root of 3 with desired precision 4158s - returns square root of 121 with desired precision 4177s - returns square root of 0.9E-99999 with desired precision 4177s - raises ArgumentError when no argument is given 4177s - raises ArgumentError if a negative number is given 4177s - raises ArgumentError if 2 arguments are given 4177s - raises TypeError if nil is given 4177s - raises TypeError if a string is given 4177s - raises TypeError if a plain Object is given 4177s - returns 1 if precision is 0 or 1 4177s - raises FloatDomainError on negative values 4177s - returns positive infinity for infinity 4177s - raises FloatDomainError for negative infinity 4177s - raises FloatDomainError for NaN 4177s - returns 0 for 0, +0.0 and -0.0 4177s 4177s BigDecimal#sub 4177s - returns a - b with given precision 4177s - returns NaN if NaN is involved 4177s - returns NaN if both values are infinite with the same signs 4177s - returns Infinity or -Infinity if these are involved 4177s 4177s BigDecimal#sub with Object 4177s - tries to coerce the other operand to self 4177s 4177s BigDecimal#sub with Rational 4177s - produces a BigDecimal 4177s 4177s Float#to_d 4177s - returns appropriate BigDecimal zero for signed zero 4177s 4177s BigDecimal#to_f 4177s - returns number of type float 4177s - rounds correctly to Float precision 4177s - properly handles special values 4177s - remembers negative zero when converted to float 4177s 4177s BigDecimal#to_i 4177s - raises FloatDomainError if BigDecimal is infinity or NaN 4177s - returns Integer otherwise 4177s 4177s BigDecimal#to_int 4177s - raises FloatDomainError if BigDecimal is infinity or NaN 4177s - returns Integer otherwise 4177s 4177s BigDecimal#to_r 4177s - returns a Rational 4177s - returns a Rational with bignum values 4177s - returns a Rational from a BigDecimal with an exponent 4177s - returns a Rational from a negative BigDecimal with an exponent 4178s 4178s BigDecimal#to_s 4178s - return type is of class String 4178s - the default format looks like 0.xxxxenn 4178s - does not add an exponent for zero values 4178s - takes an optional argument 4178s - starts with + if + is supplied and value is positive 4178s - inserts a space every n chars to fraction part, if integer n is supplied 4178s - can return a leading space for values > 0 4178s - removes trailing spaces in floating point notation 4178s - can use engineering notation 4178s - can use conventional floating point notation 4178s - returns a String in US-ASCII encoding when Encoding.default_internal is nil 4178s - returns a String in US-ASCII encoding when Encoding.default_internal is not nil 4178s 4178s BigDecimal#truncate 4178s - returns value of type Integer. 4178s - returns the integer part as a BigDecimal if no precision given 4178s - returns value of given precision otherwise 4178s - sets n digits left of the decimal point to 0, if given n < 0 4178s - returns NaN if self is NaN 4178s - returns Infinity if self is infinite 4178s - returns the same value if self is special value 4178s 4178s BigDecimal#-@ 4178s - negates self 4178s - properly handles special values 4178s 4178s BigDecimal#+@ 4178s - returns the same value with same sign (twos complement) 4178s 4178s BigDecimal's util method definitions #to_d 4178s - should define #to_d on Integer 4178s - should define #to_d on Float 4178s - should define #to_d on String 4178s - should define #to_d on BigDecimal 4178s - should define #to_d on Rational 4178s - should define #to_d on nil 4178s 4178s BigDecimal's util method definitions #to_digits 4178s - should define #to_digits on BigDecimal 4178s 4178s BigDecimal#zero? 4178s - returns true if self does equal zero 4178s - returns false otherwise 4178s 4178s BigDecimal#log 4178s - handles high-precision Rational arguments 4178s 4178s CGI::Cookie#domain 4178s - returns self's domain 4178s 4178s CGI::Cookie#domain= 4178s - sets self's domain 4178s 4178s CGI::Cookie#expires 4178s - returns self's expiration date 4178s 4178s CGI::Cookie#expires= 4178s - sets self's expiration date 4178s 4178s CGI::Cookie#initialize when passed String 4178s - sets the self's name to the passed String 4178s - sets the self's value to an empty Array 4178s - sets self to a non-secure cookie 4178s - does set self's path to an empty String when ENV["SCRIPT_NAME"] is not set 4178s - does set self's path based on ENV["SCRIPT_NAME"] when ENV["SCRIPT_NAME"] is set 4178s - does not set self's expiration date 4178s - does not set self's domain 4178s 4178s CGI::Cookie#initialize when passed Hash 4178s - sets self's contents based on the passed Hash 4178s - does set self's path based on ENV["SCRIPT_NAME"] when the Hash has no 'path' entry 4178s - tries to convert the Hash's 'value' to an Array using #Array 4178s - raises a ArgumentError when the passed Hash has no 'name' entry 4178s 4178s CGI::Cookie#initialize when passed String, values ... 4178s - sets the self's name to the passed String 4178s - sets the self's value to an Array containing all passed values 4178s - sets self to a non-secure cookie 4178s 4178s CGI::Cookie#name 4178s - returns self's name 4178s 4178s CGI::Cookie#name= 4178s - sets self's expiration date 4178s 4178s CGI::Cookie.parse 4178s - parses a raw cookie string into a hash of Cookies 4178s - does not use , for cookie separators 4178s - unescapes the Cookie values 4178s 4178s CGI::Cookie#path 4178s - returns self's path 4178s 4178s CGI::Cookie#path= 4178s - sets self's path 4178s 4178s CGI::Cookie#secure 4178s - returns whether self is a secure cookie or not 4178s 4178s CGI::Cookie#secure= when passed true 4178s - returns true 4178s - sets self to a secure cookie 4178s 4178s CGI::Cookie#secure= when passed false 4178s - returns false 4178s - sets self to a non-secure cookie 4178s 4178s CGI::Cookie#secure= when passed Object 4178s - does not change self's secure value 4178s 4178s CGI::Cookie#to_s 4178s - returns a String representation of self 4178s - escapes the self's values 4178s - does not escape tilde 4178s 4178s CGI::Cookie#value 4178s - returns self's value 4178s - is in synch with self 4178s 4178s CGI::Cookie#value= 4178s - sets self's value 4178s - automatically converts the passed Object to an Array using #Array 4178s - does keep self and the values in sync 4178s 4178s CGI.escapeElement when passed String, elements, ... 4178s - escapes only the tags of the passed elements in the passed String 4178s - is case-insensitive 4178s 4178s CGI.escapeHTML 4178s - escapes special HTML characters (&"<>') in the passed argument 4178s - escapes invalid encoding 4178s - does not escape any other characters 4178s 4178s CGI.escape 4178s - url-encodes the passed argument 4178s - does not escape tilde 4178s 4178s CGI::HtmlExtension#a when passed a String 4178s - returns an 'a'-element, using the passed String as the 'href'-attribute 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#a when passed a Hash 4178s - returns an 'a'-element, using the passed Hash for attributes 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#a when each HTML generation 4178s - returns the doctype declaration for HTML3 4178s - returns the doctype declaration for HTML4 4178s - returns the doctype declaration for the Transitional version of HTML4 4178s 4178s CGI::HtmlExtension#base when bassed a String 4178s - returns a 'base'-element, using the passed String as the 'href'-attribute 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#base when passed a Hash 4178s - returns a 'base'-element, using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#blockquote when passed a String 4178s - returns a 'blockquote'-element, using the passed String for the 'cite'-attribute 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#blockquote when passed a Hash 4178s - returns a 'blockquote'-element, using the passed Hash for attributes 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#br when each HTML generation 4178s - returns the doctype declaration for HTML3 4178s - returns the doctype declaration for HTML4 4178s - returns the doctype declaration for the Transitional version of HTML4 4178s 4178s CGI::HtmlExtension#caption when passed a String 4178s - returns a 'caption'-element, using the passed String for the 'align'-attribute 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#caption when passed a Hash 4178s - returns a 'caption'-element, using the passed Hash for attributes 4178s - includes the passed block's return value when passed a block 4178s 4178s CGI::HtmlExtension#checkbox_group when passed name, values ... 4178s - returns a sequence of 'checkbox'-elements with the passed name and the passed values 4178s - allows passing a value inside an Array 4178s - allows passing a value as an Array containing the value and the checked state or a label 4178s - allows passing a value as an Array containing the value, a label and the checked state 4178s - returns an empty String when passed no values 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox_group when passed Hash 4178s - uses the passed Hash to generate the checkbox sequence 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox when passed no arguments 4178s - returns a checkbox-'input'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox when passed name 4178s - returns a checkbox-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox CGI::HtmlExtension#checkbox when passed name, value 4178s - returns a checkbox-'input'-element with the passed name and value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox when passed name, value, checked 4178s - returns a checked checkbox-'input'-element with the passed name and value when checked is true 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#checkbox when passed Hash 4178s - returns a checkbox-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#doctype when each HTML generation 4178s - returns the doctype declaration for HTML3 4178s - returns the doctype declaration for HTML4 4178s - returns the doctype declaration for the Frameset version of HTML4 4178s - returns the doctype declaration for the Transitional version of HTML4 4178s 4178s CGI::HtmlExtension#file_field when passed no arguments 4178s - returns a file-'input'-element without a name and a size of 20 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#file_field when passed name 4178s - returns a checkbox-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#file_field when passed name, size 4178s - returns a checkbox-'input'-element with the passed name and size 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#file_field when passed name, size, maxlength 4178s - returns a checkbox-'input'-element with the passed name, size and maxlength 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#file_field when passed a Hash 4178s - returns a file-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#form when passed no arguments 4178s - returns a 'form'-element 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#form when passed method 4178s - returns a 'form'-element with the passed method 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#form when passed method, action 4178s - returns a 'form'-element with the passed method and the passed action 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#form when passed method, action, enctype 4178s - returns a 'form'-element with the passed method, action and enctype 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#frame 4178s - initializes the HTML Generation methods for the Frameset version of HTML4 4178s 4178s CGI::HtmlExtension#frameset 4178s - initializes the HTML Generation methods for the Frameset version of HTML4 4178s 4178s CGI::HtmlExtension#hidden when passed no arguments 4178s - returns an hidden-'input'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#hidden when passed name 4178s - returns an hidden-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#hidden when passed name, value 4178s - returns an hidden-'input'-element with the passed name and value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#hidden when passed Hash 4178s - returns a checkbox-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#html when passed no arguments 4178s - returns a self's doctype and an 'html'-element 4178s - includes the passed block when passed a block 4178s 4178s CGI::HtmlExtension#html when passed 'PRETTY' 4178s - returns pretty output when the passed String is 'PRETTY 4178s - includes the passed block when passed a block 4178s 4178s CGI::HtmlExtension#html when passed a Hash 4178s - returns an 'html'-element using the passed Hash for attributes 4178s - omits the doctype when the Hash contains a 'DOCTYPE' entry that's false or nil 4178s 4178s CGI::HtmlExtension#html when each HTML generation 4178s - returns the doctype declaration for HTML3 4178s - returns the doctype declaration for HTML4 4178s - returns the doctype declaration for the Transitional version of HTML4 4178s 4178s CGI::HtmlExtension#image_button when passed no arguments 4178s - returns an image-'input'-element without a source image 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#image_button when passed src 4178s - returns an image-'input'-element with the passed src 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#image_button when passed src, name 4178s - returns an image-'input'-element with the passed src and name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#image_button when passed src, name, alt 4178s - returns an image-'input'-element with the passed src, name and alt 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#image_button when passed Hash 4178s - returns a image-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed no arguments 4178s - returns an 'img'-element without an src-url or alt-text 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed src 4178s - returns an 'img'-element with the passed src-url 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed src, alt 4178s - returns an 'img'-element with the passed src-url and the passed alt-text 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed src, alt, width 4178s - returns an 'img'-element with the passed src-url, the passed alt-text and the passed width 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed src, alt, width, height 4178s - returns an 'img'-element with the passed src-url, the passed alt-text, the passed width and the passed height 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#img when passed Hash 4178s - returns an 'img'-element with the passed Hash as attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#multipart_form when passed no arguments 4178s - returns a 'form'-element with it's enctype set to multipart 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#multipart_form when passed action 4178s - returns a 'form'-element with the passed action 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#multipart_form when passed action, enctype 4178s - returns a 'form'-element with the passed action and enctype 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#multipart_form when passed Hash 4178s - returns a 'form'-element with the passed Hash as attributes 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#password_field when passed no arguments 4178s - returns an password-'input'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#password_field when passed name 4178s - returns an password-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#password_field when passed name, value 4178s - returns an password-'input'-element with the passed name and value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#password_field when passed name, value, size 4178s - returns an password-'input'-element with the passed name, value and size 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#password_field when passed name, value, size, maxlength 4178s - returns an password-'input'-element with the passed name, value, size and maxlength 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#password_field when passed Hash 4178s - returns a checkbox-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#popup_menu when passed no arguments 4178s - returns an empty 'select'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#popup_menu when passed name, values ... 4178s - returns a 'select'-element with the passed name containing 'option'-elements based on the passed values 4178s - allows passing values inside of arrays 4178s - allows passing a value as an Array containing the value and the select state or a label 4178s - allows passing a value as an Array containing the value, a label and the select state 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#popup_menu when passed a Hash 4178s - uses the passed Hash to generate the 'select'-element and the 'option'-elements 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_button when passed no arguments 4178s - returns a radio-'input'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_button when passed name 4178s - returns a radio-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_button CGI::HtmlExtension#checkbox when passed name, value 4178s - returns a radio-'input'-element with the passed name and value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_button when passed name, value, checked 4178s - returns a checked radio-'input'-element with the passed name and value when checked is true 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_button when passed Hash 4178s - returns a radio-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_group when passed name, values ... 4178s - returns a sequence of 'radio'-elements with the passed name and the passed values 4178s - allows passing a value inside an Array 4178s - allows passing a value as an Array containing the value and the checked state or a label 4178s - allows passing a value as an Array containing the value, a label and the checked state 4178s - returns an empty String when passed no values 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#radio_group when passed Hash 4178s - uses the passed Hash to generate the radio sequence 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#reset when passed no arguments 4178s - returns a reset-'input'-element 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#reset when passed value 4178s - returns a reset-'input'-element with the passed value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#reset when passed value, name 4178s - returns a reset-'input'-element with the passed value and the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#reset when passed Hash 4178s - returns a reset-'input'-element with the passed value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#scrolling_list when passed no arguments 4178s - returns an empty 'select'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#scrolling_list when passed name, values ... 4178s - returns a 'select'-element with the passed name containing 'option'-elements based on the passed values 4178s - allows passing values inside of arrays 4178s - allows passing a value as an Array containing the value and the select state or a label 4178s - allows passing a value as an Array containing the value, a label and the select state 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#scrolling_list when passed a Hash 4178s - uses the passed Hash to generate the 'select'-element and the 'option'-elements 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#submit when passed no arguments 4178s - returns a submit-'input'-element 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#submit when passed value 4178s - returns a submit-'input'-element with the passed value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#submit when passed value, name 4178s - returns a submit-'input'-element with the passed value and the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#submit when passed Hash 4178s - returns a submit-'input'-element with the passed value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed no arguments 4178s - returns an text-'input'-element without a name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed name 4178s - returns an text-'input'-element with the passed name 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed name, value 4178s - returns an text-'input'-element with the passed name and value 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed name, value, size 4178s - returns an text-'input'-element with the passed name, value and size 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed name, value, size, maxlength 4178s - returns an text-'input'-element with the passed name, value, size and maxlength 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#text_field when passed Hash 4178s - returns a checkbox-'input'-element using the passed Hash for attributes 4178s - ignores a passed block 4178s 4178s CGI::HtmlExtension#textarea when passed no arguments 4178s - returns an 'textarea'-element without a name 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#textarea when passed name 4178s - returns an 'textarea'-element with the passed name 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#textarea when passed name, cols 4178s - returns an 'textarea'-element with the passed name and the passed amount of columns 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#textarea when passed name, cols, rows 4178s - returns an 'textarea'-element with the passed name, the passed amount of columns and the passed number of rows 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI::HtmlExtension#textarea when passed Hash 4178s - uses the passed Hash as attributes 4178s - includes the return value of the passed block when passed a block 4178s 4178s CGI#http_header CGI#http_header when passed no arguments 4178s - returns a HTTP header specifying the Content-Type as text/html 4178s - includes Cookies in the @output_cookies field 4178s 4178s CGI#http_header CGI#http_header when passed String 4178s - returns a HTTP header specifying the Content-Type as the passed String's content 4178s - includes Cookies in the @output_cookies field 4178s 4178s CGI#http_header CGI#http_header when passed Hash 4178s - returns a HTTP header based on the Hash's key/value pairs 4178s - includes Cookies in the @output_cookies field 4178s - returns a HTTP header specifying the Content-Type as text/html when passed an empty Hash 4178s 4178s CGI#initialize 4178s - is private 4178s 4178s CGI#initialize when passed no arguments 4178s - extends self with CGI::QueryExtension 4178s - does not extend self with CGI::HtmlExtension 4178s - does not extend self with any of the other HTML modules 4178s - sets #cookies based on ENV['HTTP_COOKIE'] 4178s - sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is GET 4178s - sets #params based on ENV['QUERY_STRING'] when ENV['REQUEST_METHOD'] is HEAD 4178s 4178s CGI#initialize when passed type 4178s - extends self with CGI::QueryExtension 4178s - extends self with CGI::QueryExtension, CGI::Html3 and CGI::HtmlExtension when the passed type is 'html3' 4178s - extends self with CGI::QueryExtension, CGI::Html4 and CGI::HtmlExtension when the passed type is 'html4' 4178s - extends self with CGI::QueryExtension, CGI::Html4Tr and CGI::HtmlExtension when the passed type is 'html4Tr' 4178s - extends self with CGI::QueryExtension, CGI::Html4Tr, CGI::Html4Fr and CGI::HtmlExtension when the passed type is 'html4Fr' 4178s 4178s CGI#out 4178s - it writes a HTMl header based on the passed argument to $stdout 4178s - appends the block's return value to the HTML header 4178s - automatically sets the Content-Length Header based on the block's return value 4178s - includes Cookies in the @output_cookies field 4178s 4178s CGI#out when passed no block 4178s - raises a LocalJumpError 4178s 4178s CGI.parse when passed String 4178s - parses a HTTP Query String into a Hash 4178s - parses query strings with semicolons in place of ampersands 4178s - allows passing multiple values for one key 4178s - unescapes keys and values 4178s 4178s CGI.pretty when passed html 4178s - indents the passed html String with two spaces 4178s 4178s CGI.pretty when passed html, indentation_unit 4178s - indents the passed html String with the passed indentation_unit 4178s 4178s CGI#print 4178s - passes all arguments to $stdout.print 4178s - returns the result of calling $stdout.print 4178s 4178s CGI::QueryExtension#accept_charset 4178s - returns ENV['HTTP_ACCEPT_CHARSET'] 4178s 4178s CGI::QueryExtension#accept_encoding 4178s - returns ENV['HTTP_ACCEPT_ENCODING'] 4178s 4178s CGI::QueryExtension#accept_language 4178s - returns ENV['HTTP_ACCEPT_LANGUAGE'] 4178s 4178s CGI::QueryExtension#accept 4178s - returns ENV['HTTP_ACCEPT'] 4178s 4178s CGI::QueryExtension#auth_type 4178s - returns ENV['AUTH_TYPE'] 4178s 4178s CGI::QueryExtension#cache_control 4178s - returns ENV['HTTP_CACHE_CONTROL'] 4178s 4178s CGI::QueryExtension#content_length 4178s - returns ENV['CONTENT_LENGTH'] as Integer 4178s 4178s CGI::QueryExtension#content_type 4178s - returns ENV['CONTENT_TYPE'] 4178s 4178s CGI::QueryExtension#cookies 4178s - needs to be reviewed for spec completeness 4178s 4178s CGI::QueryExtension#cookies= 4178s - needs to be reviewed for spec completeness 4178s 4178s CGI::QueryExtension#[] 4178s - it returns the value for the parameter with the given key 4178s - only returns the first value for parameters with multiple values 4178s - returns a String 4178s 4178s CGI::QueryExtension#from 4178s - returns ENV['HTTP_FROM'] 4178s 4178s CGI::QueryExtension#gateway_interface 4178s - returns ENV['GATEWAY_INTERFACE'] 4178s 4178s CGI::QueryExtension#has_key? 4178s - returns true when the passed key exists in the HTTP Query 4178s 4178s CGI::QueryExtension#host 4178s - returns ENV['HTTP_HOST'] 4178s 4178s CGI::QueryExtension#include? 4178s - returns true when the passed key exists in the HTTP Query 4178s 4178s CGI::QueryExtension#key? 4178s - returns true when the passed key exists in the HTTP Query 4178s 4178s CGI::QueryExtension#keys 4178s - returns all parameter keys as an Array 4178s 4178s CGI::QueryExtension#multipart? 4178s - returns true if the current Request is a multipart request 4178s 4178s CGI::QueryExtension#negotiate 4178s - returns ENV['HTTP_NEGOTIATE'] 4178s 4178s CGI::QueryExtension#params 4178s - returns the parsed HTTP Query Params 4178s 4178s CGI::QueryExtension#params= 4178s - sets the HTTP Query Params to the passed argument 4178s 4178s CGI::QueryExtension#path_info 4178s - returns ENV['PATH_INFO'] 4178s 4178s CGI::QueryExtension#path_translated 4178s - returns ENV['PATH_TRANSLATED'] 4178s 4178s CGI::QueryExtension#pragma 4178s - returns ENV['HTTP_PRAGMA'] 4178s 4178s CGI::QueryExtension#query_string 4178s - returns ENV['QUERY_STRING'] 4178s 4178s CGI::QueryExtension#raw_cookie2 4178s - returns ENV['HTTP_COOKIE2'] 4178s 4178s CGI::QueryExtension#raw_cookie 4178s - returns ENV['HTTP_COOKIE'] 4178s 4178s CGI::QueryExtension#referer 4178s - returns ENV['HTTP_REFERER'] 4178s 4178s CGI::QueryExtension#remote_addr 4178s - returns ENV['REMOTE_ADDR'] 4178s 4178s CGI::QueryExtension#remote_host 4178s - returns ENV['REMOTE_HOST'] 4178s 4178s CGI::QueryExtension#remote_ident 4178s - returns ENV['REMOTE_IDENT'] 4178s 4178s CGI::QueryExtension#remote_user 4178s - returns ENV['REMOTE_USER'] 4178s 4178s CGI::QueryExtension#request_method 4178s - returns ENV['REQUEST_METHOD'] 4178s 4178s CGI::QueryExtension#script_name 4178s - returns ENV['SCRIPT_NAME'] 4178s 4178s CGI::QueryExtension#server_name 4178s - returns ENV['SERVER_NAME'] 4178s 4178s CGI::QueryExtension#server_port 4178s - returns ENV['SERVER_PORT'] as Integer 4178s 4178s CGI::QueryExtension#server_protocol 4178s - returns ENV['SERVER_PROTOCOL'] 4178s 4178s CGI::QueryExtension#server_software 4178s - returns ENV['SERVER_SOFTWARE'] 4178s 4178s CGI::QueryExtension#user_agent 4178s - returns ENV['HTTP_USER_AGENT'] 4178s 4178s CGI.rfc1123_date when passed Time 4178s - returns the passed Time formatted in RFC1123 ('Sat, 01 Dec 2007 15:56:42 GMT') 4178s 4178s CGI.unescapeElement when passed String, elements, ... 4178s - unescapes only the tags of the passed elements in the passed String 4178s - is case-insensitive 4178s 4178s CGI.unescapeHTML 4178s - unescapes '& < > "' to '& < > "' 4178s - doesn't unescape other html entities such as '©' or '&heart' 4178s - unescapes 'c' format entities 4178s - unescapes '香' format entities 4178s - leaves invalid formatted strings 4178s - leaves partial invalid &# at end of string 4178s - unescapes invalid encoding 4178s 4178s CGI.unescape 4178s - url-decodes the passed argument 4178s 4178s Coverage.peek_result 4178s - returns the result so far 4178s - immediate second call returns same result 4178s - second call after require returns accumulated result 4178s - call right before Coverage.result should give equal result 4178s 4178s Coverage.result 4178s - gives the covered files as a hash with arrays of count or nil 4178s - no requires/loads should give empty hash 4178s - second call should give exception 4178s - second run should give same result 4178s - second run without load/require should give empty hash 4178s - does not include the file starting coverage since it is not tracked 4178s - returns the correct results when eval is used 4178s - disables coverage measurement when stop option is not specified 4178s - disables coverage measurement when stop: true option is specified 4178s - does not disable coverage measurement when stop: false option is specified 4178s - does not disable coverage measurement when stop option is not specified but clear: true specified 4178s - does not disable coverage measurement when stop option is not specified but clear: false specified 4178s - disables coverage measurement when stop: true and clear: true specified 4178s - disables coverage measurement when stop: true and clear: false specified 4178s - does not disable coverage measurement when stop: false and clear: true specified 4178s - does not disable coverage measurement when stop: false and clear: false specified 4178s - resets counters (remove them) when stop: true specified but clear option is not specified 4178s - resets counters (remove them) when stop: true and clear: true specified 4178s - resets counters (remove them) when stop: true and clear: false specified 4178s - resets counters (remove them) when both stop and clear options are not specified 4178s - clears counters (sets 0 values) when stop is not specified but clear: true specified 4178s - does not clear counters when stop is not specified but clear: false specified 4178s - does not clear counters when stop: false and clear is not specified 4178s - clears counters (sets 0 values) when stop: false and clear: true specified 4178s - does not clear counters when stop: false and clear: false specified 4178s 4178s Coverage.running? 4178s - returns false if coverage is not started 4178s - returns true if coverage is started 4178s - returns false if coverage was started and stopped 4178s 4178s Coverage.start 4178s - enables the coverage measurement 4178s - returns nil 4178s - raises error when repeated Coverage.start call happens 4178s 4178s CSV::BasicWriter#close_on_terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::BasicWriter#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::BasicWriter#terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Cell#data 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Cell#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV.foreach 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV.generate_line 4178s - generates an empty string 4178s - generates the string 'foo,bar' 4178s - generates the string 'foo;bar' 4178s - generates the string 'foo,,bar' 4178s - generates the string 'foo;;bar' 4178s 4178s CSV.generate_row 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV.generate 4178s - returns CSV string 4178s - accepts a col separator 4178s - appends and returns the argument itself 4178s 4178s CSV::IOBuf#close 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOBuf#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOBuf#read 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOBuf#terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOReader#close_on_terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOReader#get_row 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOReader#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::IOReader#terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV#liberal_parsing? 4178s - returns true if illegal input is handled 4178s - returns false if illegal input is not handled 4178s - returns false by default 4178s 4178s CSV.open 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV.parse 4178s - parses '' into [] 4178s - parses ' 4178s ' into [[]] 4178s - parses 'foo' into [['foo']] 4178s - parses 'foo,bar,baz' into [['foo','bar','baz']] 4178s - parses 'foo,baz' into [[foo,nil,baz]] 4178s - parses ' 4178s foo' into [[],['foo']] 4178s - parses 'foo 4178s ' into [['foo']] 4178s - parses 'foo 4178s bar' into [['foo'],['bar']] 4178s - parses 'foo,bar 4178s baz,quz' into [['foo','bar'],['baz','quz']] 4178s - parses 'foo,bar' 4178s baz' into [['foo','bar'],['baz']] 4178s - parses 'foo 4178s bar,baz' into [['foo'],['bar','baz']] 4178s - parses ' 4178s 4178s bar' into [[],[],'bar']] 4178s - parses 'foo' into [['foo']] with a separator of ; 4178s - parses 'foo;bar' into [['foo','bar']] with a separator of ; 4178s - parses 'foo;bar 4178s baz;quz' into [['foo','bar'],['baz','quz']] with a separator of ; 4178s - raises CSV::MalformedCSVError exception if input is illegal 4178s - handles illegal input with the liberal_parsing option 4178s 4178s CSV.read 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV.readlines 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV#readlines 4178s - returns an Array of Array containing each element in a one-line CSV file 4178s - returns an Array of Arrays containing each element in a multi-line CSV file 4178s - returns nil for a missing value 4178s - raises CSV::MalformedCSVError exception if input is illegal 4178s - handles illegal input with the liberal_parsing option 4178s 4178s CSV::StreamBuf#add_buf 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#buf_size 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#drop 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#[] 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#get 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#idx_is_eos? 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#is_eos? 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#read 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#rel_buf 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StreamBuf#terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StringReader#get_row 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::StringReader#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer#add_row 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer#<< 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer#close 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer.create 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer.generate 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer#initialize 4178s - needs to be reviewed for spec completeness 4178s 4178s CSV::Writer#terminate 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#ajd 4178s - determines the Astronomical Julian day 4178s 4178s Date#amjd 4178s - determines the Astronomical Modified Julian day 4178s 4178s Date#day_fraction 4178s - determines the day fraction 4178s 4178s Date#mjd 4178s - determines the Modified Julian day 4178s 4178s Date#ld 4178s - determines the Modified Julian day 4178s 4178s Date#year 4178s - determines the year 4178s 4178s Date#yday 4178s - determines the year 4178s 4178s Date#mon 4178s - determines the month 4178s 4178s Date#mday 4178s - determines the day of the month 4178s 4178s Date#wday 4178s - determines the week day 4178s 4178s Date#cwyear 4178s - determines the commercial year 4178s 4178s Date#cweek 4178s - determines the commercial week 4178s 4178s Date#cwday 4178s - determines the commercial week day 4178s 4178s Date#>> 4178s - adds the number of months to a Date 4178s - sets the day to the last day of a month if the day doesn't exist 4178s - raise a TypeError when passed a Symbol 4178s - raise a TypeError when passed a String 4178s - raise a TypeError when passed a Date 4178s - raise a TypeError when passed an Object 4178s 4178s Date#+ 4178s - adds the number of days to a Date 4178s - adds a negative number of days to a Date 4178s - raises a TypeError when passed a Symbol 4178s - raises a TypeError when passed a String 4178s - raises a TypeError when passed a Date 4178s - raises a TypeError when passed an Object 4178s 4178s Date#ajd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.ajd_to_amjd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.ajd_to_jd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#amjd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.amjd_to_ajd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#<< 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#asctime 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#<=> 4178s - returns 0 when two dates are equal 4178s - returns -1 when self is less than another date 4178s - returns -1 when self is less than a Numeric 4178s - returns 1 when self is greater than another date 4178s - returns 1 when self is greater than a Numeric 4178s 4178s Date#=== 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.civil 4178s - creates a Date for -4712 by default 4178s - creates a date with arguments 4178s - doesn't create dates for invalid arguments 4178s - creates a Date for different calendar reform dates 4178s 4178s Date#commercial 4178s - creates a Date for Julian Day Number day 0 by default 4178s - creates a Date for the monday in the year and week given 4178s - creates a Date for the correct day given the year, week and day number 4178s - creates only Date objects for valid weeks 4178s 4178s Date.commercial_to_jd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#<=> 4178s - needs to be reviewed for spec completeness 4178s 4178s Date constants 4178s - defines JULIAN 4178s - defines GREGORIAN 4178s - defines ITALY 4178s - defines ENGLAND 4178s - defines MONTHNAMES 4178s - defines DAYNAMES 4178s - defines ABBR_MONTHNAMES 4178s - freezes MONTHNAMES, DAYNAMES, ABBR_MONTHNAMES, ABBR_DAYSNAMES 4178s 4178s Date#new_start 4178s - converts a date object into another with a new calendar reform 4178s 4178s Date#italy 4178s - converts a date object into another with the Italian calendar reform 4178s 4178s Date#england 4178s - converts a date object into another with the English calendar reform 4178s 4178s Date#julian 4178s - converts a date object into another with the Julian calendar 4178s 4178s Date#gregorian 4178s - converts a date object into another with the Gregorian calendar 4178s 4178s Date#ctime 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#cwday 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#cweek 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#cwyear 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#day_fraction 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.day_fraction_to_time 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#day 4178s - returns the day 4178s 4178s Date#downto 4178s - creates earlier dates when passed a negative step 4178s 4178s Date#england 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#eql? 4178s - returns true if self is equal to another date 4178s - returns false if self is not equal to another date 4178s 4178s Date::Format::Bag#method_missing 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Format::Bag#to_hash 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#friday? 4178s - should be friday 4178s - should not be friday 4178s 4178s Date#gregorian_leap? 4178s - returns true if a year is a leap year in the Gregorian calendar 4178s - returns false if a year is not a leap year in the Gregorian calendar 4178s 4178s Date#gregorian? 4178s - marks a day before the calendar reform as Julian 4178s - marks a day after the calendar reform as Julian 4178s 4178s Date#hash 4178s - returns the same value for equal dates 4178s 4178s Date::Infinity#abs 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#coerce 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#<=> 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#d 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#finite? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#infinite? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#nan? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#-@ 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#+@ 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity#zero? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date::Infinity 4178s - should be able to check whether Infinity is zero 4178s - should be able to check whether Infinity is finite 4178s - should be able to check whether Infinity is infinite 4178s - should be able to check whether Infinity is not a number 4178s - should be able to compare Infinity objects 4178s - should be able to return plus Infinity for abs 4178s - should be able to use -@ and +@ for Date::Infinity 4178s - should be able to coerce a Date::Infinity object 4178s 4178s Date#inspect 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.iso8601 4178s - parses YYYY-MM-DD into a Date object 4178s - parses YYYYMMDD into a Date object 4178s - parses a negative Date 4178s - parses a StringSubclass into a Date object 4178s - raises a Date::Error if the argument is a invalid Date 4178s - raises a Date::Error when passed a nil 4178s - raises a TypeError when passed an Object 4178s 4178s Date._iso8601 4178s - returns an empty hash if the argument is a invalid Date 4178s - returns an empty hash if the argument is nil 4178s - raises a TypeError when passed an Object 4178s 4178s Date#italy 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#jd 4178s - determines the Julian day for a Date object 4178s 4178s Date.jd 4178s - constructs a Date object if passed a Julian day 4178s - returns a Date object representing Julian day 0 (-4712-01-01) if no arguments passed 4178s - constructs a Date object if passed a negative number 4178s 4178s Date.jd_to_ajd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_civil 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_commercial 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_ld 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_mjd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_ordinal 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.jd_to_wday 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.julian_leap? 4178s - determines whether a year is a leap year in the Julian calendar 4178s - determines whether a year is not a leap year in the Julian calendar 4178s 4178s Date#julian? 4178s - marks a day before the calendar reform as Julian 4178s - marks a day after the calendar reform as Julian 4178s 4178s Date#ld 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.ld_to_jd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#leap? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.leap? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#mday 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#<< 4178s - subtracts a number of months from a date 4178s - returns the last day of a month if the day doesn't exist 4178s - raises an error on non numeric parameters 4178s 4178s Date#- 4178s - subtracts a number of days from a Date 4178s - subtracts a negative number of days from a Date 4178s - computes the difference between two dates 4178s - raises an error for non Numeric arguments 4178s 4178s Date#mjd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.mjd_to_jd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#mon 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#monday? 4178s - should be monday 4178s 4178s Date#month 4178s - returns the month 4178s 4178s Date.new 4178s - creates a Date for -4712 by default 4178s - creates a date with arguments 4178s - doesn't create dates for invalid arguments 4178s - creates a Date for different calendar reform dates 4178s 4178s Date#new_start 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#next_day 4178s - returns the next day 4178s - returns three days later across months 4178s 4178s Date#next_month 4178s - returns the next month 4178s - returns three months later 4178s - returns three months later across years 4178s - returns last day of month two months later 4178s - returns last day of next month when same day does not exist 4178s 4178s Date#next 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.ordinal 4178s - constructs a Date object from an ordinal date 4178s 4178s Date.ordinal_to_jd 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#parse 4178s - parses a day name into a Date object 4178s - parses a month name into a Date object 4178s - parses a month day into a Date object 4178s - throws an argument error for a single digit 4178s - parses DD as month day number 4178s - parses DDD as year day number 4178s - parses MMDD as month and day 4178s - parses YYDDD as year and day number in 1969--2068 4178s - parses YYMMDD as year, month and day in 1969--2068 4178s - parses YYYYDDD as year and day number 4178s - parses YYYYMMDD as year, month and day number 4178s - raises a TypeError trying to parse non-String-like object 4178s - coerces using to_str 4178s 4178s Date#parse with '.' separator 4178s - can parse a mmm-YYYY string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'YYYY mmm DD' string into a Date object 4178s - can parse a month name and day into a Date object 4178s - can parse a month name, day and year into a Date object 4178s - can parse a year, month name and day into a Date object 4178s - can parse a day, month name and year into a Date object 4178s - can handle negative year numbers 4178s 4178s Date#parse with '/' separator 4178s - can parse a mmm-YYYY string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'YYYY mmm DD' string into a Date object 4178s - can parse a month name and day into a Date object 4178s - can parse a month name, day and year into a Date object 4178s - can parse a year, month name and day into a Date object 4178s - can parse a day, month name and year into a Date object 4178s - can handle negative year numbers 4178s 4178s Date#parse with ' ' separator 4178s - can parse a mmm-YYYY string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'DD mmm YYYY' string into a Date object 4178s - can parse a 'YYYY mmm DD' string into a Date object 4178s - can parse a month name and day into a Date object 4178s - can parse a month name, day and year into a Date object 4178s - can parse a year, month name and day into a Date object 4178s - can parse a day, month name and year into a Date object 4178s - can handle negative year numbers 4178s 4178s Date#parse with '/' separator US-style 4178s - parses a YYYYMMDD string into a Date object 4178s - parses a DDMMYYYY string into a Date object 4178s - parses a YYMMDD string into a Date object 4178s - parses a YYMMDD string into a Date object NOT using the year digits as 20XX 4178s - parses a YYMMDD string into a Date object using the year digits as 20XX 4178s 4178s Date#parse with '-' separator EU-style 4178s - can parse a YYYY-MM-DD string into a Date object 4178s - can parse a DD-MM-YYYY string into a Date object 4178s - can parse a YY-MM-DD string into a Date object 4178s - can parse a YY-MM-DD string into a Date object NOT using the year digits as 20XX 4178s - can parse a YY-MM-DD string into a Date object using the year digits as 20XX 4178s 4178s Date#parse(.) 4178s - parses YYYY.MM.DD into a Date object 4178s - parses DD.MM.YYYY into a Date object 4178s - parses YY.MM.DD into a Date object using the year 20YY 4178s - parses YY.MM.DD using the year digits as 20YY when given true as additional argument 4178s 4178s Date#+ 4178s - returns a new Date object that is n days later than the current one 4178s - accepts a negative argument and returns a new Date that is earlier than the current one 4178s - raises TypeError if argument is not Numeric 4178s 4178s Date#prev_day 4178s - returns previous day 4178s - returns three days ago across months 4178s 4178s Date#prev_month 4178s - returns previous month 4178s - returns three months ago 4178s - returns three months ago across years 4178s - returns last day of month two months ago 4178s - returns last day of previous month when same day does not exist 4178s 4178s Date#=== 4178s - returns 0 when comparing two equal dates 4178s - computes the difference between two dates 4178s - compares to another numeric 4178s 4178s Date.rfc3339 4178s - needs to be reviewed for spec completeness 4178s 4178s Date._rfc3339 4178s - returns an empty hash if the argument is a invalid Date 4178s 4178s Date#>> 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#saturday? 4178s - should be saturday 4178s 4178s Date#start 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#step 4178s - steps forward in time 4178s - steps backward in time 4178s 4178s Date#strftime 4178s - should be able to print the full day name 4178s - should be able to print the short day name 4178s - should be able to print the full month name 4178s - should be able to print the short month name 4178s - should be able to print the century 4178s - should be able to print the month day with leading zeroes 4178s - should be able to print the month day with leading spaces 4178s - should be able to print the commercial year with leading zeroes 4178s - should be able to print the commercial year with only two digits 4178s - should be able to print the hour with leading zeroes (hour is always 00) 4178s - should be able to print the hour in 12 hour notation with leading zeroes 4178s - should be able to print the julian day with leading zeroes 4178s - should be able to print the hour in 24 hour notation with leading spaces 4178s - should be able to print the hour in 12 hour notation with leading spaces 4178s - should be able to print the minutes with leading zeroes 4178s - should be able to print the month with leading zeroes 4178s - should be able to add a newline 4178s - should be able to show AM/PM 4178s - should be able to show am/pm 4178s - should be able to show the number of seconds with leading zeroes 4178s - should be able to show the number of seconds since the unix epoch for a date 4178s - should be able to add a tab 4178s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 4178s - should be able to show the commercial week day 4178s - should be able to show the commercial week with %V 4178s - should be able to show the week day 4178s - should be able to show the year in YYYY format 4178s - should be able to show the year in YY format 4178s - should be able to show the timezone of the date with a : separator 4178s - should be able to escape the % character 4178s - should be able to print the date in full 4178s - should be able to print the date with slashes 4178s - should be able to print the date as YYYY-MM-DD 4178s - should be able to show HH:MM for a date 4178s - should be able to show HH:MM:SS AM/PM for a date 4178s - should be able to show HH:MM:SS 4178s - should be able to show HH:MM:SS 4178s - should be able to show MM/DD/YY 4178s - supports GNU modificators 4178s - supports the '-' modifier to drop leading zeros 4178s - passes the format string's encoding to the result string 4178s - should be able to print the date with no argument 4178s - should be able to show the timezone with a : separator 4178s - should be able to show the commercial week 4178s - shows the number of milliseconds since epoch 4178s - should be able to show a full notation 4178s 4178s Date#strptime 4178s - returns January 1, 4713 BCE when given no arguments 4178s - uses the default format when not given a date format 4178s - parses a full day name 4178s - parses a short day name 4178s - parses a full month name 4178s - parses a short month name 4178s - parses a century 4178s - parses a month day with leading zeroes 4178s - parses a month day with leading spaces 4178s - parses a commercial year with leading zeroes 4178s - parses a commercial year with only two digits 4178s - parses a year day with leading zeroes 4178s - parses a month with leading zeroes 4178s - parses a week number for a week starting on Sunday 4178s - parses a week number for a week starting on Monday 4178s - parses a commercial week day 4178s - parses a commercial week 4178s - parses a week day 4178s - parses a year in YYYY format 4178s - parses a year in YY format 4178s - parses a full date 4178s - parses a date with slashes 4178s - parses a date given as YYYY-MM-DD 4178s - parses a commercial week 4178s - parses a date given MM/DD/YY 4178s - parses a date given in full notation 4178s 4178s Date.strptime 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#succ 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#sunday? 4178s - should be sunday 4178s 4178s Date#thursday? 4178s - should be thursday 4178s 4178s Date.time_to_day_fraction 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#to_s 4178s - needs to be reviewed for spec completeness 4178s 4178s Date.today 4178s - returns a Date object 4178s - sets Date object to the current date 4178s 4178s Date#tuesday? 4178s - should be tuesday 4178s 4178s Date#upto 4178s - returns future dates for the default step value 4178s 4178s Date#valid_civil? 4178s - returns true if it is a valid civil date 4178s - returns false if it is not a valid civil date 4178s - handles negative months and days 4178s 4178s Date#valid_commercial? 4178s - returns true if it is a valid commercial date 4178s - returns false it is not a valid commercial date 4178s - handles negative week and day numbers 4178s 4178s Date#valid_date? 4178s - returns true if it is a valid civil date 4178s - returns false if it is not a valid civil date 4178s - handles negative months and days 4178s 4178s Date.valid_jd? 4178s - returns true if passed a number value 4178s - returns false if passed nil 4178s - returns false if passed symbol 4178s - returns false if passed false 4178s 4178s Date.valid_ordinal? 4178s - determines if the date is a valid ordinal date 4178s - handles negative day numbers 4178s 4178s Date.valid_time? 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#wday 4178s - returns the week day as a number starting with Sunday as 0 4178s 4178s Date#wednesday? 4178s - should be wednesday 4178s 4178s Date#yday 4178s - needs to be reviewed for spec completeness 4178s 4178s Date#year 4178s - returns the year 4178s 4178s Date.zone_to_diff 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime._strptime 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#+ 4178s - is able to add sub-millisecond precision values 4178s 4178s DateTime.civil 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.commercial 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#hour 4178s - returns 0 if no argument is passed 4178s - returns the hour given as argument 4178s - adds 24 to negative hours 4178s - raises an error, when the hour is smaller than -24 4178s - raises an error, when the hour is larger than 24 4178s - adds 1 to day, when 24 hours given 4178s 4178s DateTime.httpdate 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.iso8601 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#iso8601 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.jd 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.jisx0301 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#jisx0301 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.min 4178s - returns 0 if no argument is passed 4178s - returns the minute passed as argument 4178s - adds 60 to negative minutes 4178s - raises an error, when the minute is smaller than -60 4178s - raises an error, when the minute is greater or equal than 60 4178s 4178s DateTime.minute 4178s - returns 0 if no argument is passed 4178s - returns the minute passed as argument 4178s - adds 60 to negative minutes 4178s - raises an error, when the minute is smaller than -60 4178s - raises an error, when the minute is greater or equal than 60 4178s 4178s DateTime#new_offset 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.new 4178s - sets all values to default if passed no arguments 4178s - takes the first argument as year 4178s - takes the second argument as month 4178s - takes the third argument as day 4178s - takes the forth argument as hour 4178s - takes the fifth argument as minute 4178s - takes the sixth argument as second 4178s - takes the seventh argument as an offset 4178s - takes the eighth argument as the date of calendar reform 4178s - raises an error on invalid arguments 4178s 4178s DateTime.now 4178s - creates an instance of DateTime 4178s - sets the current date 4178s - sets the current time 4178s - grabs the local timezone 4178s 4178s DateTime#offset 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.ordinal 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.parse 4178s - parses a day name into a DateTime object 4178s - parses a month name into a DateTime object 4178s - parses a month day into a DateTime object 4178s - throws an argument error for a single digit 4178s - parses DD as month day number 4178s - parses DDD as year day number 4178s - parses MMDD as month and day 4178s - parses YYYYMMDD as year, month and day 4178s - parses YYDDD as year and day number in 1969--2068 4178s - parses YYMMDD as year, month and day in 1969--2068 4178s - parses YYYYDDD as year and day number 4178s - parses YYYYMMDD as year, month and day number 4178s 4178s DateTime.parse YYYY-MM-DDTHH:MM:SS format 4178s - parses YYYY-MM-DDTHH:MM:SS into a DateTime object 4178s - throws an argument error for invalid month values 4178s - throws an argument error for invalid day values 4178s - throws an argument error for invalid hour values 4178s - throws an argument error for invalid minute values 4178s - throws an argument error for invalid second values 4178s 4178s DateTime.parse(.) 4178s - parses YYYY.MM.DD into a DateTime object 4178s - parses DD.MM.YYYY into a DateTime object 4178s - parses YY.MM.DD into a DateTime object using the year 20YY 4178s - parses YY.MM.DD using the year digits as 20YY when given true as additional argument 4178s 4178s DateTime.rfc2822 4178s - needs to be reviewed for spec completeness 4178s - raises DateError if passed nil 4178s 4178s DateTime.rfc3339 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#rfc3339 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.rfc822 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#sec_fraction 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime.sec 4178s - returns 0 seconds if passed no arguments 4178s - returns the seconds passed in the arguments 4178s - adds 60 to negative values 4178s - returns the absolute value of a Rational 4178s - returns the absolute value of a float 4178s - raises an error, when the second is smaller than -60 4178s - raises an error, when the second is greater or equal than 60 4178s - raises an error for second fractions smaller than -60 4178s - takes a second fraction near 60 4178s 4178s DateTime#second_fraction 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#second 4178s - returns 0 seconds if passed no arguments 4178s - returns the seconds passed in the arguments 4178s - adds 60 to negative values 4178s - returns the absolute value of a Rational 4178s - returns the absolute value of a float 4178s - raises an error, when the second is smaller than -60 4178s - raises an error, when the second is greater or equal than 60 4178s - raises an error for second fractions smaller than -60 4178s - takes a second fraction near 60 4178s 4178s DateTime#strftime 4178s - should be able to print the full day name 4178s - should be able to print the short day name 4178s - should be able to print the full month name 4178s - should be able to print the short month name 4178s - should be able to print the century 4178s - should be able to print the month day with leading zeroes 4178s - should be able to print the month day with leading spaces 4178s - should be able to print the commercial year with leading zeroes 4178s - should be able to print the commercial year with only two digits 4178s - should be able to print the hour with leading zeroes (hour is always 00) 4178s - should be able to print the hour in 12 hour notation with leading zeroes 4178s - should be able to print the julian day with leading zeroes 4178s - should be able to print the hour in 24 hour notation with leading spaces 4178s - should be able to print the hour in 12 hour notation with leading spaces 4178s - should be able to print the minutes with leading zeroes 4178s - should be able to print the month with leading zeroes 4178s - should be able to add a newline 4178s - should be able to show AM/PM 4178s - should be able to show am/pm 4178s - should be able to show the number of seconds with leading zeroes 4178s - should be able to show the number of seconds since the unix epoch for a date 4178s - should be able to add a tab 4178s - should be able to show the week number with the week starting on Sunday (%U) and Monday (%W) 4178s - should be able to show the commercial week day 4178s - should be able to show the commercial week with %V 4178s - should be able to show the week day 4178s - should be able to show the year in YYYY format 4178s - should be able to show the year in YY format 4178s - should be able to show the timezone of the date with a : separator 4178s - should be able to escape the % character 4178s - should be able to print the date in full 4178s - should be able to print the date with slashes 4178s - should be able to print the date as YYYY-MM-DD 4178s - should be able to show HH:MM for a date 4178s - should be able to show HH:MM:SS AM/PM for a date 4178s - should be able to show HH:MM:SS 4178s - should be able to show HH:MM:SS 4178s - should be able to show MM/DD/YY 4178s - supports GNU modificators 4178s - supports the '-' modifier to drop leading zeros 4178s - passes the format string's encoding to the result string 4178s - formats time according to the directives in the given format string 4178s - returns the 24-based hour with %H 4178s - returns the 12-based hour with %I 4178s - supports 24-hr formatting with %l 4178s - supports 12-hr formatting with %l 4178s - returns the minute with %M 4178s - supports am/pm formatting with %P 4178s - supports AM/PM formatting with %p 4178s - returns the second with %S 4178s - should be able to show the number of seconds since the unix epoch 4178s - returns the timezone with %Z 4178s - should be able to print the time in full 4178s - should be able to show HH:MM 4178s - should be able to show HH:MM:SS AM/PM 4178s - supports HH:MM:SS formatting with %T 4178s - supports HH:MM:SS formatting with %X 4178s - supports the '-' modifier to drop leading zeros 4178s - supports the '-' modifier for padded format directives 4178s - should be able to show default Logger format 4178s - should be able to print the datetime with no argument 4178s - should be able to show the timezone with a : separator 4178s - should be able to show the commercial week 4178s - shows the number of milliseconds since epoch 4178s - should be able to show a full notation 4178s 4178s DateTime#strftime with %L 4178s - formats the milliseconds of the second 4178s 4178s DateTime#strftime with %N 4178s - formats the nanoseconds of the second with %N 4178s - formats the milliseconds of the second with %3N 4178s - formats the microseconds of the second with %6N 4178s - formats the nanoseconds of the second with %9N 4178s - formats the picoseconds of the second with %12N 4178s 4178s DateTime#strftime with %z 4178s - formats a UTC time offset as '+0000' 4178s - formats a local time with positive UTC offset as '+HHMM' 4178s - formats a local time with negative UTC offset as '-HHMM' 4178s - formats a time with fixed positive offset as '+HHMM' 4178s - formats a time with fixed negative offset as '-HHMM' 4178s - formats a time with fixed offset as '+/-HH:MM' with ':' specifier 4178s - formats a time with fixed offset as '+/-HH:MM:SS' with '::' specifier 4178s 4178s DateTime.strptime 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#- 4178s - is able to subtract sub-millisecond precision values 4178s - correctly calculates sub-millisecond time differences 4178s 4178s DateTime#to_date 4178s - returns an instance of Date 4178s - maintains the same year 4178s - maintains the same month 4178s - maintains the same day 4178s - maintains the same mday 4178s - maintains the same julian day regardless of local time or zone 4178s 4178s DateTime#to_datetime 4178s - returns itself 4178s 4178s DateTime#to_s 4178s - returns a new String object 4178s - maintains timezone regardless of local time 4178s 4178s DateTime#to_time 4178s - yields a new Time object 4178s - returns a Time representing the same instant 4178s - preserves the same time regardless of local time or zone 4178s 4178s DateTime.xmlschema 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#xmlschema 4178s - needs to be reviewed for spec completeness 4178s 4178s DateTime#zone 4178s - needs to be reviewed for spec completeness 4178s 4178s DelegateClass.instance_method 4178s - returns a method object for public instance methods of the delegated class 4178s - returns a method object for protected instance methods of the delegated class 4178s - raises a NameError for a private instance methods of the delegated class 4178s - returns a method object for public instance methods of the DelegateClass class 4178s - returns a method object for protected instance methods of the DelegateClass class 4178s - returns a method object for private instance methods of the DelegateClass class 4178s - raises a NameError for an invalid method name 4178s 4178s DelegateClass.instance_methods 4178s - includes all public methods of the delegated class 4178s - includes all protected methods of the delegated class 4178s - includes instance methods of the DelegateClass class 4178s - does not include private methods 4178s 4178s DelegateClass.private_instance_methods 4178s - does not include any instance methods of the delegated class 4178s - includes private instance methods of the DelegateClass class 4178s - does not include public or protected instance methods of the DelegateClass class 4178s 4178s DelegateClass.protected_instance_methods 4178s - does not include public methods of the delegated class 4178s - includes the protected methods of the delegated class 4178s - includes protected instance methods of the DelegateClass class 4178s - does not include public instance methods of the DelegateClass class 4178s - does not include private methods 4178s 4178s DelegateClass.public_instance_methods 4178s - includes all public methods of the delegated class 4178s - does not include the protected methods of the delegated class 4178s - includes public instance methods of the DelegateClass class 4178s - does not include private methods 4178s 4178s DelegateClass#respond_to_missing? 4178s - is used for respond_to? behavior of late-bound delegated methods 4178s 4178s Delegator#=== 4178s - is delegated 4178s 4178s Delegator#<=> 4178s - is delegated 4178s 4178s Delegator#~ 4178s - is delegated 4178s 4178s Delegator#eql? 4178s - returns true when compared with same delegator 4178s - returns true when compared with the inner object 4178s - returns false when compared with the delegator with other object 4178s - returns false when compared with the other object 4178s 4178s Delegator#equal? 4178s - returns true only when compared with the delegator 4178s 4178s Delegator#== 4178s - is not delegated when passed self 4178s - is delegated when passed the delegated object 4178s - is delegated in general 4178s 4178s Delegator when frozen 4178s - is still readable 4178s - is frozen 4178s - is not writable 4178s - creates a frozen clone 4178s - creates an unfrozen dup 4178s - causes mutative calls to raise RuntimeError 4178s - returns false if only the delegated object is frozen 4178s 4178s Delegator#hash 4178s - is delegated 4178s 4178s SimpleDelegator 4178s - can be marshalled 4178s - can be marshalled with its instance variables intact 4178s 4178s Delegator#method 4178s - returns a method object for public methods of the delegate object 4178s - raises a NameError for protected methods of the delegate object 4178s - raises a NameError for a private methods of the delegate object 4178s - returns a method object for public methods of the Delegator class 4178s - returns a method object for protected methods of the Delegator class 4178s - returns a method object for private methods of the Delegator class 4178s - raises a NameError for an invalid method name 4178s - returns a method that respond_to_missing? 4178s - raises a NameError if method is no longer valid because object has changed 4178s 4178s Delegator#methods 4178s - returns singleton methods when passed false 4178s - includes all public methods of the delegate object 4178s - includes all protected methods of the delegate object 4178s - includes instance methods of the Delegator class 4178s - does not include private methods 4178s 4178s Delegator#!= 4178s - is not delegated when passed self 4178s - is delegated when passed the delegated object 4178s - is delegated in general 4178s 4178s Delegator#! 4178s - is delegated 4178s 4178s Delegator#private_methods 4178s - does not include any method of the delegate object 4178s - includes all private instance methods of the Delegate class 4178s 4178s Delegator#protected_methods 4178s - includes protected methods of the delegate object 4178s - includes protected instance methods of the Delegator class 4178s 4178s Delegator#public_methods 4178s - includes public methods of the delegate object 4178s - includes public instance methods of the Delegator class 4178s 4178s SimpleDelegator.new 4178s - forwards public method calls 4178s - forwards protected method calls 4178s - doesn't forward private method calls 4178s - doesn't forward private method calls even via send or __send__ 4178s 4178s Delegator#tap 4178s - yield the delegator object 4178s 4178s Digest.bubblebabble 4178s - returns a String 4178s - returns a String in the Bubble Babble Binary Data Encoding format 4178s - calls #to_str on an object and returns the bubble babble value of the result 4178s - raises a TypeError when passed nil 4178s - raises a TypeError when passed an Integer 4178s 4178s Digest.hexencode 4178s - returns '' when passed an empty String 4178s - returns the hex-encoded value of a non-empty String 4178s - calls #to_str on an object and returns the hex-encoded value of the result 4178s - raises a TypeError when passed nil 4178s - raises a TypeError when passed an Integer 4178s 4178s Digest::Instance#<< 4178s - raises a RuntimeError if called 4178s 4178s Digest::Instance#new 4178s - returns a copy of the digest instance 4178s - calls reset 4178s 4178s Digest::Instance#update 4178s - raises a RuntimeError if called 4178s 4178s Digest::MD5#<< 4178s - can update 4178s 4178s Digest::MD5#block_length 4178s - returns the length of digest block 4178s 4178s Digest::MD5#digest! 4178s - returns a digest and can digest! 4178s 4178s Digest::MD5#digest_length 4178s - returns the length of computed digests 4178s 4178s Digest::MD5#digest 4178s - returns a digest 4178s 4178s Digest::MD5.digest 4178s - returns a digest 4178s 4178s Digest::MD5#== 4178s - equals itself 4178s - equals the string representing its hexdigest 4178s - equals the appropriate object that responds to to_str 4178s - equals the same digest for a different object 4178s 4178s Digest::MD5.file 4178s - raises a Errno::ENOENT when passed a path that does not exist 4178s - raises a TypeError when passed nil 4178s 4178s Digest::MD5.file when passed a path to a file that exists 4178s - returns a Digest::MD5 object 4178s - returns a Digest::MD5 object with the correct digest 4178s - calls #to_str on an object and returns the Digest::MD5 with the result 4178s 4178s Digest::MD5#hexdigest! 4178s - returns a hexdigest and resets the state 4178s 4178s Digest::MD5#hexdigest 4178s - returns a hexdigest 4178s 4178s Digest::MD5.hexdigest 4178s - returns a hexdigest 4178s 4178s Digest::MD5#inspect 4178s - returns a Ruby object representation 4178s 4178s Digest::MD5#length 4178s - returns the length of the digest 4179s 4179s Digest::MD5#reset 4179s - returns digest state to initial conditions 4179s 4179s Digest::MD5#size 4179s - returns the length of the digest 4179s 4179s Digest::MD5#to_s 4179s - returns a hexdigest 4179s - does not change the internal state 4179s 4179s Digest::MD5#update 4179s - can update 4179s 4179s Digest::SHA1#digest 4179s - returns a digest 4179s 4179s Digest::SHA1.digest 4179s - returns a digest 4179s 4179s Digest::SHA1.file 4179s - raises a Errno::ENOENT when passed a path that does not exist 4179s - raises a TypeError when passed nil 4179s 4179s Digest::SHA1.file when passed a path to a file that exists 4179s - returns a Digest::SHA1 object 4179s - returns a Digest::SHA1 object with the correct digest 4179s - calls #to_str on an object and returns the Digest::SHA1 with the result 4179s 4179s Digest::SHA2#hexdigest 4179s - returns a SHA256 hexdigest by default 4179s 4179s Digest::SHA2.hexdigest 4179s - returns a SHA256 hexdigest by default 4179s 4179s Digest::SHA256#<< 4179s - can update 4179s 4179s Digest::SHA256#block_length 4179s - returns the length of digest block 4179s 4179s Digest::SHA256#digest! 4179s - returns a digest and can digest! 4179s 4179s Digest::SHA256#digest_length 4179s - returns the length of computed digests 4179s 4179s Digest::SHA256#digest 4179s - returns a digest 4179s 4179s Digest::SHA256.digest 4179s - returns a digest 4179s 4179s Digest::SHA256#== 4179s - equals itself 4179s - equals the string representing its hexdigest 4179s - equals the appropriate object that responds to to_str 4179s - equals the same digest for a different object 4179s 4179s Digest::SHA256.file 4179s - raises a Errno::ENOENT when passed a path that does not exist 4179s - raises a TypeError when passed nil 4179s 4179s Digest::SHA256.file when passed a path to a file that exists 4179s - returns a Digest::SHA256 object 4179s - returns a Digest::SHA256 object with the correct digest 4182s - can be used with frozen-string-literal 4182s - calls #to_str on an object and returns the Digest::SHA256 with the result 4182s 4182s Digest::SHA256#hexdigest! 4182s - returns a hexdigest and resets the state 4182s 4182s Digest::SHA256#hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA256.hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA256#inspect 4182s - returns a Ruby object representation 4182s 4182s Digest::SHA256#length 4182s - returns the length of the digest 4182s 4182s Digest::SHA256#reset 4182s - returns digest state to initial conditions 4182s 4182s Digest::SHA256#size 4182s - returns the length of the digest 4182s 4182s Digest::SHA256#to_s 4182s - returns a hexdigest 4182s - does not change the internal state 4182s 4182s Digest::SHA256#update 4182s - can update 4182s 4182s Digest::SHA384#<< 4182s - can update 4182s 4182s Digest::SHA384#block_length 4182s - returns the length of digest block 4182s 4182s Digest::SHA384#digest! 4182s - returns a digest and can digest! 4182s 4182s Digest::SHA384#digest_length 4182s - returns the length of computed digests 4182s 4182s Digest::SHA384#digest 4182s - returns a digest 4182s 4182s Digest::SHA384.digest 4182s - returns a digest 4182s 4182s Digest::SHA384#== 4182s - equals itself 4182s - equals the string representing its hexdigest 4182s - equals the appropriate object that responds to to_str 4182s - equals the same digest for a different object 4182s 4182s Digest::SHA384.file 4182s - raises a Errno::ENOENT when passed a path that does not exist 4182s - raises a TypeError when passed nil 4182s 4182s Digest::SHA384.file when passed a path to a file that exists 4182s - returns a Digest::SHA384 object 4182s - returns a Digest::SHA384 object with the correct digest 4182s - calls #to_str on an object and returns the Digest::SHA384 with the result 4182s 4182s Digest::SHA384#hexdigest! 4182s - returns a hexdigest and resets the state 4182s 4182s Digest::SHA384#hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA384.hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA384#inspect 4182s - returns a Ruby object representation 4182s 4182s Digest::SHA384#length 4182s - returns the length of the digest 4182s 4182s Digest::SHA384#reset 4182s - returns digest state to initial conditions 4182s 4182s Digest::SHA384#size 4182s - returns the length of the digest 4182s 4182s Digest::SHA384#to_s 4182s - returns a hexdigest 4182s - does not change the internal state 4182s 4182s Digest::SHA384#update 4182s - can update 4182s 4182s Digest::SHA512#<< 4182s - can update 4182s 4182s Digest::SHA512#block_length 4182s - returns the length of digest block 4182s 4182s Digest::SHA512#digest! 4182s - returns a digest and can digest! 4182s 4182s Digest::SHA512#digest_length 4182s - returns the length of computed digests 4182s 4182s Digest::SHA512#digest 4182s - returns a digest 4182s 4182s Digest::SHA512.digest 4182s - returns a digest 4182s 4182s Digest::SHA512#== 4182s - equals itself 4182s - equals the string representing its hexdigest 4182s - equals the appropriate object that responds to to_str 4182s - equals the same digest for a different object 4182s 4182s Digest::SHA512.file 4182s - raises a Errno::ENOENT when passed a path that does not exist 4182s - raises a TypeError when passed nil 4182s 4182s Digest::SHA512.file when passed a path to a file that exists 4182s - returns a Digest::SHA512 object 4182s - returns a Digest::SHA512 object with the correct digest 4182s - calls #to_str on an object and returns the Digest::SHA512 with the result 4182s 4182s Digest::SHA512#hexdigest! 4182s - returns a hexdigest and resets the state 4182s 4182s Digest::SHA512#hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA512.hexdigest 4182s - returns a hexdigest 4182s 4182s Digest::SHA512#inspect 4182s - returns a Ruby object representation 4182s 4182s Digest::SHA512#length 4182s - returns the length of the digest 4182s 4182s Digest::SHA512#reset 4182s - returns digest state to initial conditions 4182s 4182s Digest::SHA512#size 4182s - returns the length of the digest 4182s 4182s Digest::SHA512#to_s 4182s - returns a hexdigest 4182s - does not change the internal state 4182s 4182s Digest::SHA512#update 4182s - can update 4182s 4182s DRb.start_service 4182s - runs a basic remote call 4182s - runs a basic remote call passing a block 4182s 4182s ERB#def_class 4182s - return an unnamed class which has instance method to render eRuby script 4182s 4182s ERB#def_method 4182s - define module's instance method to render eRuby file 4182s 4182s ERB#def_module 4182s - return unnamed module which has instance method to render eRuby 4182s 4182s ERB::DefMethod.def_erb_method 4182s - define method to render eRuby file as an instance method of current module 4182s - define method to render eRuby object as an instance method of current module 4182s 4182s ERB#filename 4182s - raises an exception if there are errors processing content 4182s - uses '(erb)' as filename when filename is not set 4182s 4182s ERB.new 4182s - compiles eRuby script into ruby code when trim mode is 0 or not specified 4182s - warns invalid trim_mode 4182s - removes ' 4182s ' when trim_mode is 1 or '>' 4182s - removes spaces at beginning of line and ' 4182s ' when trim_mode is 2 or '<>' 4182s - removes spaces around '<%- -%>' when trim_mode is '-' 4182s - does not support '<%-= expr %> even when trim_mode is '-' 4182s - regards lines starting with '%' as '<% ... %>' when trim_mode is '%' 4182s - regards lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%>' 4182s - regard lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%<>' 4182s - regard lines starting with '%' as '<% ... %>' and spaces around '<%- -%>' when trim_mode is '%-' 4182s - changes '_erbout' variable name in the produced source 4182s - ignores '<%# ... %>' 4182s - forget local variables defined previous one 4182s 4182s ERB.new warning about arguments 4182s - warns when passed safe_level and later arguments 4182s - does not warn when passed arguments as keyword argument 4182s 4182s ERB#result 4182s - return the result of compiled ruby code 4182s - share local variables 4182s - is not able to h() or u() unless including ERB::Util 4182s - is able to h() or u() if ERB::Util is included 4182s 4182s ERB#run 4182s - print the result of compiled ruby code 4182s - share local variables 4182s - is not able to h() or u() unless including ERB::Util 4182s - is able to h() or u() if ERB::Util is included 4182s 4182s ERB#src 4182s - returns the compiled ruby code evaluated to a String 4182s 4182s ERB::Util.h 4182s - escape (& < > " ') to (& < > " ') 4182s - not escape characters except (& < > " ') 4182s - return empty string when argument is nil 4182s - returns string when argument is number 4182s - returns string when argument is boolean 4182s 4182s ERB::Util.html_escape 4182s - escape (& < > " ') to (& < > " ') 4182s - not escape characters except (& < > " ') 4182s - return empty string when argument is nil 4182s - returns string when argument is number 4182s - returns string when argument is boolean 4182s 4182s ERB::Util.u 4182s - encode characters 4182s - does not escape tilde 4182s - encode unicode string 4182s - returns empty string when argument is nil 4182s - returns string when argument is number 4182s - returns string when argument is boolean 4182s 4182s ERB::Util.url_encode 4182s - encode characters 4182s - does not escape tilde 4182s - encode unicode string 4182s - returns empty string when argument is nil 4182s - returns string when argument is number 4182s - returns string when argument is boolean 4182s 4182s Etc.confstr 4182s - returns a String for Etc::CS_PATH 4182s - raises Errno::EINVAL for unknown configuration variables 4182s 4182s Etc.getgrgid 4182s - returns a Etc::Group struct instance for the given user 4182s - returns the Etc::Group for a given gid if it exists 4182s - uses Process.gid as the default value for the argument 4182s - raises if the group does not exist 4182s - raises a TypeError if not passed an Integer 4182s - can be called safely by multiple threads 4182s 4182s Etc.getgrnam 4182s - returns a Etc::Group struct instance for the given group 4182s - only accepts strings as argument 4182s 4182s Etc.getpwnam 4182s - returns a Etc::Passwd struct instance for the given user 4182s - only accepts strings as argument 4182s 4182s Etc.getpwuid 4182s - returns a Etc::Passwd struct instance for the given user 4182s - uses Process.uid as the default value for the argument 4182s - only accepts integers as argument 4182s 4182s Etc.group 4182s - returns a Etc::Group struct 4182s - raises a RuntimeError for parallel iteration 4182s 4182s Etc.nprocessors 4182s - returns the number of online processors 4182s 4182s Etc.passwd 4182s - returns a Etc::Passwd struct 4182s 4182s Etc::Group 4182s - returns group name 4182s - returns group password 4182s - returns group id 4182s - returns an array of users belonging to the group 4182s - can be compared to another object 4182s 4182s Etc::Passwd 4182s - returns user name 4182s - returns user password 4182s - returns user id 4182s - returns user group id 4182s - returns user personal information (gecos field) 4182s - returns user home directory 4182s - returns user shell 4182s - can be compared to another object 4182s 4182s Etc.sysconf 4182s - returns the value of POSIX.1 system configuration variable SC_ARG_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_HOST_NAME_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_LOGIN_NAME_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_NGROUPS_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_CLK_TCK 4182s - returns the value of POSIX.1 system configuration variable SC_OPEN_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_PAGESIZE 4182s - returns the value of POSIX.1 system configuration variable SC_RE_DUP_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_STREAM_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_TTY_NAME_MAX 4182s - returns the value of POSIX.1 system configuration variable SC_VERSION 4182s 4182s Etc.sysconfdir 4182s - returns a String 4182s 4182s Etc.systmpdir 4182s - returns a String 4182s 4182s Etc.uname 4182s - returns a Hash with the documented keys 4182s 4182s IO#expect 4182s - matches data against a Regexp 4182s - matches data against a String 4182s - returns any captures of the Regexp 4182s - returns raises IOError if the IO is closed 4182s - returns nil if eof is hit 4182s - yields the result if a block is given 4182s 4182s Fiber#alive? 4182s - returns true for a Fiber that hasn't had #resume called 4182s - returns true for a Fiber that's yielded to the caller 4182s - returns true when called from its Fiber 4182s - doesn't invoke the block associated with the Fiber 4182s - returns false for a Fiber that's dead 4182s - always returns false for a dead Fiber 4182s 4182s Fiber.current 4184s - is available without an extra require 4184s - returns the root Fiber when called outside of a Fiber 4184s - returns the current Fiber when called from a Fiber 4184s 4184s Fiber#resume 4184s - raises a FiberError if the Fiber attempts to resume a resuming fiber 4184s 4184s Fiber#transfer 4184s - can be invoked from the root Fiber 4184s - raises a FiberError if invoked from a different Thread 4184s - passes control to the beginning of the block on first invocation 4184s - returns the last value encountered on first invocation 4184s - runs until the end of the block 4184s - accepts any number of arguments 4184s - raises a FiberError if the Fiber is dead 4184s - raises a LocalJumpError if the block includes a break statement 4184s 4184s Fiber#transfer 4184s - returns to the root Fiber when finished 4184s - works if Fibers in different Threads each transfer to a Fiber in the same Thread 4184s - transfers control between a non-main thread's root fiber to a child fiber and back again 4184s 4184s Find.find 4184s - should recursively yield every file in the directory 4184s 4184s Find.find when called without a block 4184s - returns an Enumerator 4184s 4184s Find.prune 4184s - should throw :prune 4184s 4184s GetoptLong#each_option 4184s - passes each argument/value pair to the block 4184s 4184s GetoptLong#each 4184s - passes each argument/value pair to the block 4184s 4184s GetoptLong#error_message 4184s - returns nil if no error occurred 4184s - returns the error message of the last error that occurred 4184s 4184s GetoptLong#get_option 4184s - returns the next option name and its argument as an Array 4184s - shifts ARGV on each call 4184s - terminates processing when encountering '--' 4184s - raises a if an argument was required, but none given 4184s - returns multiline argument 4184s 4184s GetoptLong#get 4184s - returns the next option name and its argument as an Array 4184s - shifts ARGV on each call 4184s - terminates processing when encountering '--' 4184s - raises a if an argument was required, but none given 4184s - returns multiline argument 4184s 4184s GetoptLong#initialize 4184s - sets ordering to REQUIRE_ORDER if ENV['POSIXLY_CORRECT'] is set 4184s - sets ordering to PERMUTE if ENV['POSIXLY_CORRECT'] is not set 4184s 4184s GetoptLong#ordering= 4184s - raises an ArgumentError if called after processing has started 4184s - raises an ArgumentError if given an invalid value 4184s - does not allow changing ordering to PERMUTE if ENV['POSIXLY_CORRECT'] is set 4184s 4184s GetoptLong#set_options 4184s - allows setting command line options 4184s - discards previously defined command line options 4184s - raises an ArgumentError if too many argument flags where given 4184s - raises a RuntimeError if processing has already started 4184s - raises an ArgumentError if no argument flag was given 4184s - raises an ArgumentError if one of the given arguments is not an Array 4184s - raises an ArgumentError if the same option is given twice 4184s - raises an ArgumentError if the given option is invalid 4184s 4184s GetoptLong#terminate 4184s - terminates option processing 4184s - returns self when option processing is terminated 4184s - returns nil when option processing was already terminated 4184s 4184s GetoptLong#terminated? 4184s - returns true if option processing has terminated 4184s 4184s IO#wait [timeout, mode] passed 4184s - raises ArgumentError when passed wrong Symbol value as mode argument 4184s 4184s IO#wait_writable 4184s - waits for the IO to become writable with no timeout 4184s - waits for the IO to become writable with the given timeout 4184s - waits for the IO to become writable with the given large timeout 4184s 4184s IPAddr#hton 4184s - converts IPAddr to network byte order 4184s 4184s IPAddr#new_ntoh 4184s - creates a new IPAddr using hton notation 4184s 4184s IPAddr#ipv4_compat 4184s - should ipv4_compat? 4184s 4184s IPAddr#ipv4_mapped 4184s - should ipv4_mapped 4184s 4184s IPAddr#new 4184s - initializes IPAddr 4184s - initializes IPAddr ipv6 address with short notation 4184s - initializes IPAddr ipv6 address with long notation 4184s - initializes IPAddr ipv6 address with / subnet notation 4184s - initializes IPAddr ipv6 address with mask subnet notation 4184s - initializes IPAddr ipv4 address with all zeroes 4184s - initializes IPAddr ipv4 address 4184s - initializes IPAddr ipv4 address with / subnet notation 4184s - initializes IPAddr ipv4 address with subnet mask 4184s - initializes IPAddr ipv4 mapped address with subnet mask 4184s - raises on incorrect IPAddr strings 4184s 4184s IPAddr Operator 4184s - bitwises or 4184s - bitwises and 4184s - bitshifts right 4184s - bitshifts left 4184s - inverts 4184s - tests for equality 4184s - tests for equality correctly if object cannot be converted to IPAddr 4184s - sets a mask 4184s - checks whether an address is included in a range 4184s 4184s IPAddr#reverse 4184s - generates the reverse DNS lookup entry 4184s 4184s IPAddr#ip6_arpa 4184s - converts an IPv6 address into the reverse DNS lookup representation according to RFC3172 4184s 4184s IPAddr#ip6_int 4184s - converts an IPv6 address into the reverse DNS lookup representation according to RFC1886 4184s 4184s IPAddr#to_s 4184s - displays IPAddr using short notation 4184s 4184s IPAddr#to_string 4184s - displays an IPAddr using full notation 4184s 4184s Logger::LogDevice#close 4184s - closes the LogDevice's stream 4184s 4184s Logger::LogDevice#new 4184s - creates a new log device 4184s - receives an IO object to log there as first argument 4184s - creates a File if the IO object does not exist 4184s - receives options via a hash as second argument 4184s 4184s Logger::LogDevice#write 4184s - writes a message to the device 4184s - can create a file and writes empty message 4184s - fails if the device is already closed 4184s 4184s Logger#add 4184s - writes a new message to the logger 4184s - receives a severity 4184s - receives a message 4184s - receives a program name 4184s - receives a block 4184s - calls the block if message is nil 4184s - ignores the block if the message is not nil 4184s 4184s Logger#close 4184s - closes the logging device 4184s 4184s Logger#datetime_format 4184s - returns the date format used for the logs 4184s - returns nil logger is using the default date format 4184s 4184s Logger#datetime_format= 4184s - sets the date format for the logs 4184s - follows the Time#strftime format 4184s 4184s Logger#debug? 4184s - returns true if severity level allows debug messages 4184s - returns false if severity level does not allow debug messages 4184s 4184s Logger#debug 4184s - logs a DEBUG message 4184s - accepts an application name with a block 4184s 4184s Logger#error? 4184s - returns true if severity level allows printing errors 4184s - returns false if severity level does not allow errors 4184s 4184s Logger#error 4184s - logs a ERROR message 4184s - accepts an application name with a block 4184s 4184s Logger#fatal? 4184s - returns true if severity level allows fatal messages 4184s - returns false if severity level does not allow fatal messages 4184s 4184s Logger#fatal 4184s - logs a FATAL message 4184s - accepts an application name with a block 4184s 4184s Logger#info? 4184s - returns true if severity level allows info messages 4184s - returns false if severity level does not allow info messages 4184s 4184s Logger#info 4184s - logs a INFO message 4184s - accepts an application name with a block 4184s 4184s Logger#new 4184s - creates a new logger object 4184s - receives a logging device as first argument 4184s - receives a frequency rotation as second argument 4184s - also receives a number of log files to keep as second argument 4184s - receives a maximum logfile size as third argument 4184s - receives level symbol as keyword argument 4184s - receives level as keyword argument 4184s - receives progname as keyword argument 4184s - receives datetime_format as keyword argument 4184s - receives formatter as keyword argument 4184s - receives shift_period_suffix 4184s 4184s Logger#unknown 4184s - logs a message with unknown severity 4184s - defaults the priority value to 5 and text value to ANY 4184s - receives empty messages 4184s 4184s Logger#warn? 4184s - returns true if severity level allows printing warn messages 4184s - returns false if severity level does not allow printing warn messages 4184s 4184s Logger#warn 4184s - logs a WARN message 4184s - accepts an application name with a block 4184s 4184s Logger::Severity 4184s - defines Logger severity constants 4184s 4184s mkmf 4188s - can be required with --enable-frozen-string-literal 4188s 4188s Monitor#enter 4188s - acquires the monitor 4188s 4188s Monitor#exit 4188s - raises ThreadError when monitor is not entered 4188s 4188s MonitorMixin#mon_initialize 4188s - can be called in initialize_copy to get a new Mutex and used with synchronize 4188s 4188s Monitor#new_cond 4188s - creates a MonitorMixin::ConditionVariable 4188s - returns a condition variable which can be waited on by a thread holding the monitor 4188s - returns a condition variable which can be waited on by a thread holding the monitor inside multiple synchronize blocks 4188s - returns a condition variable which can be signalled by a thread holding the monitor inside multiple synchronize blocks 4188s 4188s Monitor#synchronize 4188s - unlocks after return, even if it was interrupted by Thread#raise 4188s - raises a LocalJumpError if not passed a block 4188s - raises a thread error if the monitor is not owned on exiting the block 4188s 4188s Monitor#try_enter 4188s - will acquire a monitor not held by another thread 4188s - will not acquire a monitor already held by another thread 4188s 4188s Observer#add_observer 4188s - adds the observer 4188s 4188s Observer#count_observers 4188s - returns the number of observers 4188s - returns the number of unique observers 4188s 4188s Observer#delete_observer 4188s - deletes the observer 4188s 4188s Observer#delete_observers 4188s - deletes the observers 4188s 4188s Observer#notify_observers 4188s - must call changed before notifying observers 4188s - verifies observer responds to update 4188s - receives the callback 4188s 4188s Open3.capture2 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.capture2e 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.capture3 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.pipeline_r 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.pipeline_rw 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.pipeline 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.pipeline_start 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.pipeline_w 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.popen2 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.popen2e 4188s - needs to be reviewed for spec completeness 4188s 4188s Open3.popen3 4191s - returns in, out, err and a thread waiting the process 4194s - executes a process with a pipe to read stdout 4196s - executes a process with a pipe to read stderr 4199s - executes a process with a pipe to write stdin 4200s 4200s OpenSSL::Cipher's CipherError 4200s - exists under OpenSSL::Cipher namespace 4200s 4200s OpenSSL::Digest#<< when given input as a single string 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#<< when given input as multiple smaller substrings 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#block_length when the digest object is created via a name argument 4200s - returns a SHA1 block length 4200s - returns a SHA256 block length 4200s - returns a SHA384 block length 4200s - returns a SHA512 block length 4200s 4200s OpenSSL::Digest#block_length when the digest object is created via a subclass 4200s - returns a SHA1 block length 4200s - returns a SHA256 block length 4200s - returns a SHA384 block length 4200s - returns a SHA512 block length 4200s 4200s OpenSSL::Digest#digest_length when the digest object is created via a name argument 4200s - returns a SHA1 digest length 4200s - returns a SHA256 digest length 4200s - returns a SHA384 digest length 4200s - returns a SHA512 digest length 4200s 4200s OpenSSL::Digest#digest_length when the digest object is created via a subclass 4200s - returns a SHA1 digest length 4200s - returns a SHA256 digest length 4200s - returns a SHA384 digest length 4200s - returns a SHA512 digest length 4200s 4200s OpenSSL::Digest class methods .digest 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest class methods .hexdigest 4200s - returns a SHA1 hexdigest 4200s - returns a SHA256 hexdigest 4200s - returns a SHA384 hexdigest 4200s - returns a SHA512 hexdigest 4200s 4200s OpenSSL::Digest class methods .base64digest 4200s - returns a SHA1 base64digest 4200s - returns a SHA256 base64digest 4200s - returns a SHA384 base64digest 4200s - returns a SHA512 base64digest 4200s 4200s OpenSSL::Digest#initialize when called without an initial String argument 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#initialize when called with an initial String argument 4200s - returns a SHA1 digest of that argument 4200s - returns a SHA256 digest of that argument 4200s - returns a SHA384 digest of that argument 4200s - returns a SHA512 digest of that argument 4200s 4200s OpenSSL::Digest#initialize can be called on subclasses can be called without an initial String argument on subclasses 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#initialize can be called on subclasses can be called with an initial String argument on subclasses 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#name 4200s - returns the name of digest 4200s - works on subclasses too 4200s 4200s OpenSSL::Digest#reset 4200s - works for a SHA1 digest 4200s - works for a SHA256 digest 4200s - works for a SHA384 digest 4200s - works for a SHA512 digest 4200s 4200s OpenSSL::Digest#update when given input as a single string 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL::Digest#update when given input as multiple smaller substrings 4200s - returns a SHA1 digest 4200s - returns a SHA256 digest 4200s - returns a SHA384 digest 4200s - returns a SHA512 digest 4200s 4200s OpenSSL.fixed_length_secure_compare 4200s - returns true for two strings with the same content 4200s - returns false for two strings of equal size with different content 4200s - converts both arguments to strings using #to_str 4200s - does not accept arguments that are not string and cannot be coerced into strings 4200s - raises an ArgumentError for two strings of different size 4200s 4200s OpenSSL::HMAC.digest 4200s - returns an SHA1 digest 4200s 4200s OpenSSL::HMAC.hexdigest 4200s - returns an SHA1 hex digest 4200s 4200s OpenSSL::KDF.pbkdf2_hmac 4201s - creates the same value with the same input 4201s - supports nullbytes embedded in the password 4201s - coerces the password into a String using #to_str 4202s - coerces the salt into a String using #to_str 4202s - coerces the iterations into an Integer using #to_int 4202s - coerces the length into an Integer using #to_int 4203s - accepts a OpenSSL::Digest object as hash 4203s - accepts an empty password 4203s - accepts an empty salt 4204s - accepts an empty length 4204s - accepts an arbitrary length 4206s - accepts any hash function known to OpenSSL 4206s - raises a TypeError when password is not a String and does not respond to #to_str 4206s - raises a TypeError when salt is not a String and does not respond to #to_str 4206s - raises a TypeError when iterations is not an Integer and does not respond to #to_int 4206s - raises a TypeError when length is not an Integer and does not respond to #to_int 4206s 4206s OpenSSL::Random.pseudo_bytes 4206s - generates a random binary string of specified length 4206s - generates different binary strings with subsequent invocations 4206s - raises ArgumentError on negative arguments 4206s 4206s OpenSSL::Random.random_bytes 4206s - generates a random binary string of specified length 4206s - generates different binary strings with subsequent invocations 4206s - raises ArgumentError on negative arguments 4206s 4206s OpenSSL.secure_compare 4206s - returns true for two strings with the same content 4206s - returns false for two strings with different content 4206s 4206s OpenSSL::X509::Name.parse 4206s - parses a /-delimited string of key-value pairs into a Name 4206s - parses a comma-delimited string of key-value pairs into a name 4207s - raises OpenSSL::X509::NameError if the given string contains invalid keys 4207s 4207s OpenSSL::X509::Store#verify 4207s - returns true for valid certificate 4207s - returns false for an expired certificate 4208s - returns false for an expired root certificate 4208s 4208s OpenStruct#delete_field 4208s - removes the named field from self's method/value table 4208s - does remove the accessor methods 4208s 4208s OpenStruct#[] 4208s - returns the associated value 4208s 4208s OpenStruct#[]= 4208s - sets the associated value 4208s 4208s OpenStruct#== 4208s - returns false when the passed argument is no OpenStruct 4208s - returns true when self and other are equal method/value wise 4208s 4208s OpenStruct.new when frozen 4208s - is still readable 4208s - is not writable 4208s - cannot create new fields 4208s - creates a frozen clone 4208s - creates an unfrozen dup 4208s 4208s OpenStruct#initialize 4208s - is private 4208s 4208s OpenStruct#inspect 4208s - returns a String representation of self 4208s - correctly handles self-referential OpenStructs 4208s - correctly handles OpenStruct subclasses 4208s 4208s OpenStruct#marshal_dump 4208s - returns the method/value table 4208s 4208s OpenStruct#marshal_load when passed [Hash] 4208s - defines methods based on the passed Hash 4208s 4208s OpenStruct#method_missing when called with a method name ending in '=' 4208s - raises an ArgumentError when not passed any additional arguments 4208s 4208s OpenStruct#method_missing when passed additional arguments 4208s - raises a NoMethodError when the key does not exist 4208s - raises an ArgumentError when the key exists 4208s 4208s OpenStruct.new when passed [Hash] 4208s - creates an attribute for each key of the passed Hash 4208s 4208s OpenStruct.new when passed no arguments 4208s - returns a new OpenStruct Object without any attributes 4208s 4208s OpenStruct#to_h 4208s - returns a Hash with members as keys 4208s - returns a Hash with keys as symbols 4208s - does not return the hash used as initializer 4208s - returns a Hash that is independent from the struct 4208s 4208s OpenStruct#to_h with block 4208s - converts [key, value] pairs returned by the block to a hash 4208s - raises ArgumentError if block returns longer or shorter array 4208s - raises TypeError if block returns something other than Array 4208s - coerces returned pair to Array with #to_ary 4208s - does not coerce returned pair to Array with #to_a 4208s 4208s OpenStruct#to_s 4208s - returns a String representation of self 4208s - correctly handles self-referential OpenStructs 4208s - correctly handles OpenStruct subclasses 4208s 4208s OptionParser#order 4208s - accepts `into` keyword argument and stores result in it 4208s 4208s OptionParser#order! 4208s - accepts `into` keyword argument and stores result in it 4208s 4208s OptionParser#parse 4208s - accepts `into` keyword argument and stores result in it 4208s 4208s OptionParser#parse! 4208s - accepts `into` keyword argument and stores result in it 4208s 4208s Pathname#absolute? 4208s - returns true for the root directory 4208s - returns true for a dir starting with a slash 4208s - returns false for a dir not starting with a slash 4208s - returns false for a dir not starting with a slash 4208s 4208s Pathname#/ 4208s - appends a pathname to self 4208s 4208s Pathname#empty? 4208s - returns true when file is not empty 4208s - returns false when the directory is not empty 4208s - return true when file is empty 4208s - returns true when directory is empty 4208s 4208s Pathname#== 4208s - returns true when identical paths are used 4208s - returns true when identical paths are used 4208s 4208s Pathname.glob 4208s - returns [] for no match 4208s - returns matching file paths 4208s - returns matching file paths when a flag is provided 4208s - returns matching file paths when supplied :base keyword argument 4208s - raises an ArgumentError when supplied a keyword argument other than :base 4208s - does not raise an ArgumentError when supplied a flag and :base keyword argument 4208s 4208s Pathname#glob 4208s - returns [] for no match 4208s - returns matching file paths 4208s - yields matching file paths to block 4208s - returns matching file paths when a flag is provided 4208s 4208s Pathname#hash 4208s - is equal to the hash of the pathname 4208s - is not equal the hash of a different pathname 4208s 4208s Pathname#inspect 4208s - returns a consistent String 4208s 4208s Pathname#join 4208s - without separators 4208s - with separators 4208s - with a string 4208s - with root 4208s - with a relative path 4208s - a relative path with current 4208s - an absolute path with current 4208s - a prefixed relative path with current 4208s - multiple paths 4208s 4208s Pathname.new 4208s - returns a new Pathname Object with 1 argument 4208s - raises an ArgumentError when called with - raises a TypeError if not passed a String type 4208s - initializes with an object with to_path 4208s 4208s Pathname#parent 4208s - has parent of root as root 4208s - has parent of /usr/ as root 4208s - has parent of /usr/local as root 4208s 4208s Kernel#Pathname 4208s - is a private instance method 4208s - is also a public method 4208s - returns same argument when called with a pathname argument 4208s 4208s Pathname#+ 4208s - appends a pathname to self 4208s 4208s Pathname#realdirpath 4208s - returns a Pathname 4208s 4208s Pathname#realpath 4208s - returns a Pathname 4208s 4208s Pathname#relative_path_from 4208s - raises an error when the two paths do not share a common prefix 4208s - raises an error when the base directory has .. 4208s - returns a path relative from root 4208s - returns 1 level up when both paths are relative 4208s - returns a relative path when both are absolute 4208s - returns a path relative to the current directory 4208s - returns a . when base and dest are the same 4208s - returns the same directory with a non clean base that matches the current dir 4208s - returns a relative path with a non clean base that matches a different dir 4208s - returns current and pattern when only those patterns are used 4208s - converts string argument to Pathname 4208s 4208s Pathname#relative? 4208s - returns false for the root directory 4208s - returns false for a dir starting with a slash 4208s - returns true for a dir not starting with a slash 4208s - returns true for a dir not starting with a slash 4208s 4208s Pathname#root? 4208s - returns true for root directories 4208s - returns false for empty string 4208s - returns false for a top level directory 4208s - returns false for a top level with .. appended directory 4208s - returns false for a directory below top level 4208s 4208s Pathname#sub 4208s - replaces the pattern with rest 4208s - returns a new object 4208s 4208s PP.pp 4208s - works with default arguments 4208s - allows specifying out explicitly 4208s - correctly prints a Hash 4208s 4208s RbConfig::CONFIG 4208s - values are all strings 4208s - ['rubylibdir'] returns the directory containing Ruby standard libraries 4208s - ['sitelibdir'] is set and is part of $LOAD_PATH 4211s - contains no frozen strings even with --enable-frozen-string-literal 4211s 4211s RbConfig::TOPDIR 4211s - either returns nil (if not installed) or the prefix 4211s 4211s RbConfig::LIMITS 4211s - is a Hash 4211s - has string keys and numeric values 4211s - contains FIXNUM_MIN and FIXNUM_MAX 4211s - contains INT_MIN and INT_MAX 4211s - contains LONG_MIN and LONG_MAX 4211s 4211s RbConfig::SIZEOF 4211s - is a Hash 4211s - has string keys and integer values 4211s - contains the sizeof(void*) 4211s - contains the sizeof(float) and sizeof(double) 4211s - contains the size of short, int and long 4211s 4211s RbConfig::CONFIG['UNICODE_EMOJI_VERSION'] 4211s - is 13.1 4211s 4211s RbConfig::CONFIG['UNICODE_VERSION'] 4211s - is 13.0.0 4211s 4211s Readline.basic_word_break_characters 4211s - returns not nil 4211s 4211s Readline.basic_word_break_characters= 4211s - returns the passed string 4211s 4211s Readline.completer_quote_characters 4211s - returns nil 4211s 4211s Readline.completer_word_break_characters 4211s - returns nil 4211s 4211s Readline.completion_append_character 4211s - returns not nil 4211s 4211s Readline.completion_case_fold 4211s - returns nil 4211s 4211s Readline.completion_case_fold= 4211s - returns the passed boolean 4211s 4211s Readline.completion_proc 4211s - returns nil 4211s 4211s Readline.completion_proc= 4211s - returns the passed Proc 4211s - returns an ArgumentError if not given an Proc or #call 4211s 4211s Readline::HISTORY 4211s - is defined 4211s 4211s Readline::VERSION 4211s - is defined and is a non-empty String 4211s 4211s Readline.emacs_editing_mode 4211s - returns nil 4211s 4211s Readline.filename_quote_characters 4211s - returns nil 4211s 4211s Readline::HISTORY.<< 4211s - appends the given Object to the history 4211s - tries to convert the passed Object to a String using #to_str 4211s - raises a TypeError when the passed Object can't be converted to a String 4211s 4211s Readline::HISTORY.delete_at 4211s - deletes and returns the history entry at the specified index 4211s - raises an IndexError when the given index is greater than the history size 4211s 4211s Readline::HISTORY.each 4211s - yields each item in the history 4211s 4211s Readline::HISTORY.[] 4211s - returns the history item at the passed index 4211s - raises an IndexError when there is no item at the passed index 4211s 4211s Readline::HISTORY.[]= 4211s - returns the new value for the passed index 4211s - raises an IndexError when there is no item at the passed positive index 4211s - sets the item at the given index 4211s - raises an IndexError when there is no item at the passed negative index 4211s 4211s Readline::HISTORY.empty? 4211s - returns true when the history is empty 4211s 4211s Readline::HISTORY 4211s - is extended with the Enumerable module 4211s 4211s Readline::HISTORY.length 4211s - returns the size of the history 4211s 4211s Readline::HISTORY.pop 4211s - returns nil when the history is empty 4211s - returns and removes the last item from the history 4211s 4211s Readline::HISTORY.push 4211s - pushes all passed Objects into the history 4211s - tries to convert the passed Object to a String using #to_str 4211s - raises a TypeError when the passed Object can't be converted to a String 4211s 4211s Readline::HISTORY.shift 4211s - returns nil when the history is empty 4211s - returns and removes the first item from the history 4211s 4211s Readline::HISTORY.size 4211s - returns the size of the history 4211s 4211s Readline::HISTORY.to_s 4211s - returns 'HISTORY' 4211s 4211s Readline.vi_editing_mode 4211s - returns nil 4211s 4211s Resolv#getaddress 4211s - resolves localhost 4211s - raises ResolvError if the name can not be looked up 4211s 4211s Resolv#getaddresses 4211s - resolves localhost 4211s 4211s Resolv#getname 4211s - resolves 127.0.0.1 4211s - raises ResolvError when there is no result 4211s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/library/readline/completion_case_fold_spec.rb:12: warning: already initialized constant Readline::COMPLETION_CASE_FOLD 4211s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/library/readline/completion_case_fold_spec.rb:14: warning: already initialized constant Readline::COMPLETION_CASE_FOLD 4211s 4211s Resolv#getnames 4211s - resolves 127.0.0.1 4211s 4211s Ripper.lex 4211s - lexes a simple method declaration 4211s 4211s Ripper.sexp 4211s - returns an s-expression for a method declaration 4211s 4211s Gem.bin_path 4211s - finds executables of default gems, which are the only files shipped for default gems 4211s 4211s Gem.load_path_insert_index 4211s - is set for an installed Ruby 4211s 4211s SecureRandom.base64 4211s - generates a random base64 string out of specified number of random bytes 4211s - returns an empty string when argument is 0 4211s - generates different base64 strings with subsequent invocations 4211s - generates a random base64 string out of 32 random bytes 4211s - treats nil argument as default one and generates a random base64 string 4211s - raises ArgumentError on negative arguments 4211s - tries to convert the passed argument to an Integer using #to_int 4211s 4211s SecureRandom.bytes 4211s - returns a String 4211s - returns a String of the length given as argument 4211s - returns a binary String 4211s - returns a random binary String 4211s 4211s SecureRandom.hex 4211s - generates a random hex string of length twice the specified argument 4211s - returns an empty string when argument is 0 4211s - generates different hex strings with subsequent invocations 4211s - generates a random hex string of length 32 if no argument is provided 4211s - treats nil argument as default one and generates a random hex string of length 32 4211s - raises ArgumentError on negative arguments 4211s - tries to convert the passed argument to an Integer using #to_int 4211s 4211s SecureRandom.random_bytes 4211s - returns a String 4211s - returns a String of the length given as argument 4211s - returns a binary String 4211s - returns a random binary String 4211s - generates a random binary string of length 16 if no argument is provided 4211s - generates a random binary string of length 16 if argument is nil 4211s - generates a random binary string of specified length 4211s - generates different binary strings with subsequent invocations 4211s - raises ArgumentError on negative arguments 4211s - tries to convert the passed argument to an Integer using #to_int 4211s 4211s SecureRandom.random_number 4211s - returns a Float if no max argument is passed 4211s - returns an Integer if an Integer argument is passed 4211s - returns a Float if no max argument is passed 4211s - returns an Integer if an Integer argument is passed 4211s - generates a random positive number smaller then the positive integer argument 4211s - generates a random (potentially bignum) integer value for bignum argument 4211s - generates a random float number between 0.0 and 1.0 if no argument provided 4211s - generates a random value in given (integer) range limits 4211s - generates a random value in given big (integer) range limits 4211s - generates a random value in given (float) range limits 4211s - generates a random float number between 0.0 and 1.0 if argument is negative 4211s - generates a random float number between 0.0 and 1.0 if argument is negative float 4211s - generates different float numbers with subsequent invocations 4211s - raises ArgumentError if the argument is non-numeric 4211s 4211s Set#add 4211s - adds the passed Object to self 4211s - returns self 4211s 4211s Set#add? 4211s - adds the passed Object to self 4211s - returns self when the Object has not yet been added to self 4211s - returns nil when the Object has already been added to self 4211s 4211s Set#<< 4211s - adds the passed Object to self 4211s - returns self 4211s 4211s Set#=== 4211s - returns true when self contains the passed Object 4211s - is an alias for include? 4211s 4211s Set#=== member equality 4211s - is checked using both #hash and #eql? 4211s - is not checked using #== 4211s 4211s Set#=== 4211s - returns true when self contains the passed Object 4211s 4211s Set#=== member equality 4211s - is checked using both #hash and #eql? 4211s - is not checked using #== 4211s 4211s Set#classify 4211s - yields each Object in self 4211s - returns an Enumerator when passed no block 4211s - classifies the Objects in self based on the block's return value 4211s 4211s Set#clear 4211s - removes all elements from self 4211s - returns self 4211s 4211s Set#collect! 4211s - yields each Object in self 4211s - returns self 4211s - replaces self with the return values of the block 4211s 4211s Set#compare_by_identity 4211s - compares its members by identity 4211s - causes future comparisons on the receiver to be made by identity 4211s - rehashes internally so that old members can be looked up 4211s - returns self 4211s - is idempotent and has no effect on an already compare_by_identity set 4211s - uses the semantics of BasicObject#equal? to determine members identity 4211s - uses #equal? semantics, but doesn't actually call #equal? to determine identity 4211s - does not call #hash on members 4211s - regards #dup'd objects as having different identities 4211s - regards #clone'd objects as having different identities 4211s - raises a FrozenError on frozen sets 4211s - persists over #dups 4211s - persists over #clones 4211s 4211s Set#compare_by_identity? 4211s - returns false by default 4211s - returns true once #compare_by_identity has been invoked on self 4211s - returns true when called multiple times on the same set 4211s 4211s Set#<=> 4211s - returns 0 if the sets are equal 4211s - returns -1 if the set is a proper subset of the other set 4211s - returns +1 if the set is a proper superset of other set 4211s - returns nil if the set has unique elements 4211s - returns nil when the argument is not set-like 4211s 4211s Set[] 4211s - returns a new Set populated with the passed Objects 4211s 4211s Set#delete_if 4211s - yields every element of self 4211s - deletes every element from self for which the passed block returns true 4211s - returns self 4211s - returns an Enumerator when passed no block 4211s 4211s Set#delete 4211s - deletes the passed Object from self 4211s - returns self 4211s 4211s Set#delete? 4211s - deletes the passed Object from self 4211s - returns self when the passed Object is in self 4211s - returns nil when the passed Object is not in self 4211s 4211s Set#difference 4211s - returns a new Set containing self's elements excluding the elements in the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#disjoint? 4211s - returns false when two Sets have at least one element in common 4211s - returns true when two Sets have no element in common 4211s 4211s Set#divide 4211s - divides self into a set of subsets based on the blocks return values 4211s - yields each Object to the block 4211s - returns an enumerator when not passed a block 4211s 4211s Set#divide when passed a block with an arity of 2 4211s - divides self into a set of subsets based on the blocks return values 4211s - yields each two Object to the block 4211s 4211s Set#divide when passed a block with an arity of > 2 4211s - only uses the first element if the arity > 2 4211s - only uses the first element if the arity = -1 4211s 4211s Set#each 4211s - yields each Object in self 4211s - returns self 4211s - returns an Enumerator when not passed a block 4211s 4211s Set#empty? 4211s - returns true if self is empty 4211s 4211s Enumerable#to_set 4211s - returns a new Set created from self 4211s - passes down passed blocks 4211s 4211s Set#eql? 4211s - returns true when the passed argument is a Set and contains the same elements 4211s 4211s Set#== 4211s - returns true when the passed Object is a Set and self and the Object contain the same elements 4211s - does not depend on the order of the elements 4211s - does not depend on the order of nested Sets 4211s 4211s Set#^ 4211s - returns a new Set containing elements that are not in both self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#filter! 4211s - yields every element of self 4211s - keeps every element from self for which the passed block returns true 4211s - returns self when self was modified 4211s - returns nil when self was not modified 4211s - returns an Enumerator when passed no block 4211s 4211s Set#flatten_merge 4211s - is protected 4211s - flattens the passed Set and merges it into self 4211s - raises an ArgumentError when trying to flatten a recursive Set 4211s 4211s Set#flatten 4211s - returns a copy of self with each included Set flattened 4211s - raises an ArgumentError when self is recursive 4211s 4211s Set#flatten! 4211s - flattens self 4211s - returns self when self was modified 4211s - returns nil when self was not modified 4211s - raises an ArgumentError when self is recursive 4211s 4211s Set#hash 4211s - is static 4211s 4211s Set#include? 4211s - returns true when self contains the passed Object 4211s 4211s Set#include? member equality 4211s - is checked using both #hash and #eql? 4211s - is not checked using #== 4211s 4211s Set#initialize_clone 4211s - does not freeze the new Set when called from clone(freeze: false) 4211s 4211s Set#initialize 4211s - is private 4211s - adds all elements of the passed Enumerable to self 4211s - uses #each_entry on the provided Enumerable 4211s - uses #each on the provided Enumerable if it does not respond to #each_entry 4211s - raises if the provided Enumerable does not respond to #each_entry or #each 4211s - should initialize with empty array and set 4211s - preprocesses all elements by a passed block before adding to self 4211s - should initialize with empty array and block 4211s - should initialize with empty set and block 4211s - should initialize with just block 4211s 4211s Set#inspect 4211s - returns a String representation of self 4211s - does include the elements of the set 4211s - puts spaces between the elements 4211s - correctly handles cyclic-references 4211s 4211s Set#intersect? 4211s - returns true when two Sets have at least one element in common 4211s - returns false when two Sets have no element in common 4211s 4211s Set#intersection 4211s - returns a new Set containing only elements shared by self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#& 4211s - returns a new Set containing only elements shared by self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#join 4211s - returns an empty string if the Set is empty 4211s - returns a new string formed by joining elements after conversion 4211s - does not separate elements when the passed separator is nil 4211s - returns a string formed by concatenating each element separated by the separator 4211s - calls #to_a to convert the Set in to an Array 4211s 4211s Set#keep_if 4211s - yields every element of self 4211s - keeps every element from self for which the passed block returns true 4211s - returns self 4211s - returns an Enumerator when passed no block 4211s 4211s Set#length 4211s - returns the number of elements in the set 4211s 4211s Set#map! 4211s - yields each Object in self 4211s - returns self 4211s - replaces self with the return values of the block 4211s 4211s Set#member? 4211s - returns true when self contains the passed Object 4211s 4211s Set#member? member equality 4211s - is checked using both #hash and #eql? 4211s - is not checked using #== 4211s 4211s Set#merge 4211s - adds the elements of the passed Enumerable to self 4211s - returns self 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#- 4211s - returns a new Set containing self's elements excluding the elements in the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#+ 4211s - returns a new Set containing all elements of self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#pretty_print_cycle 4211s - passes the 'pretty print' representation of a self-referencing Set to the pretty print writer 4211s 4211s Set#proper_subset? 4211s - returns true if passed a Set that self is a proper subset of 4211s - raises an ArgumentError when passed a non-Set 4211s 4211s Set#proper_superset? 4211s - returns true if passed a Set that self is a proper superset of 4211s - raises an ArgumentError when passed a non-Set 4211s 4211s Set#reject! 4211s - yields every element of self 4211s - deletes every element from self for which the passed block returns true 4211s - returns self when self was modified 4211s - returns nil when self was not modified 4211s - returns an Enumerator when passed no block 4211s 4211s Set#replace 4211s - replaces the contents with other and returns self 4211s - accepts any enumerable as other 4211s 4211s Set#select! 4211s - yields every element of self 4211s - keeps every element from self for which the passed block returns true 4211s - returns self when self was modified 4211s - returns nil when self was not modified 4211s - returns an Enumerator when passed no block 4211s 4211s Set#size 4211s - returns the number of elements in the set 4211s 4211s Set#subset? 4211s - returns true if passed a Set that is equal to self or self is a subset of 4211s - raises an ArgumentError when passed a non-Set 4211s 4211s Set#subtract 4211s - deletes any elements contained in other and returns self 4211s - accepts any enumerable as other 4211s 4211s Set#superset? 4211s - returns true if passed a Set that equals self or self is a proper superset of 4211s - raises an ArgumentError when passed a non-Set 4211s 4211s Set#to_a 4211s - returns an array containing elements of self 4211s 4211s Set#to_s 4211s - returns a String representation of self 4211s - does include the elements of the set 4211s - puts spaces between the elements 4211s - correctly handles cyclic-references 4211s - is an alias of inspect 4211s 4211s Set#union 4211s - returns a new Set containing all elements of self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Set#| 4211s - returns a new Set containing all elements of self and the passed Enumerable 4211s - raises an ArgumentError when passed a non-Enumerable 4211s 4211s Shellwords#shellwords 4211s - honors quoted strings 4211s - honors escaped double quotes 4211s - honors escaped single quotes 4211s - honors escaped spaces 4211s - raises ArgumentError when double quoted strings are misquoted 4211s - raises ArgumentError when single quoted strings are misquoted 4211s - matches POSIX sh behavior for backslashes within double quoted strings 4211s 4211s Singleton.allocate 4211s - is a private method 4211s 4211s Singleton#clone 4211s - is prevented 4211s 4211s Singleton#_dump 4211s - returns an empty string 4211s - returns an empty string from a singleton subclass 4211s 4211s Singleton#dup 4211s - is prevented 4211s 4211s Singleton.instance 4211s - returns an instance of the singleton class 4211s - returns the same instance for multiple calls to instance 4211s - returns an instance of the singleton's subclasses 4211s - returns the same instance for multiple class to instance on subclasses 4211s - returns an instance of the singleton's clone 4211s - returns the same instance for multiple class to instance on clones 4211s 4211s Singleton._load 4211s - returns the singleton instance for anything passed in 4211s - returns the singleton instance for anything passed in to subclass 4211s 4211s Singleton.new 4211s - is a private method 4211s 4211s Addrinfo#afamily for an ipv4 socket 4211s - returns Socket::AF_INET 4211s 4211s Addrinfo#afamily for an ipv6 socket 4211s - returns Socket::AF_INET6 4211s 4211s Addrinfo#afamily for a unix socket 4211s - returns Socket::AF_UNIX 4211s 4211s Addrinfo#bind 4211s - returns a bound socket when no block is given 4211s - yields the socket if a block is given 4211s 4211s Addrinfo#canonname 4211s - returns the canonical name for a host 4211s 4211s Addrinfo#canonname when the canonical name is not available 4211s - returns nil 4211s 4211s Addrinfo#connect_from using IPv4 using separate arguments 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#connect_from using IPv4 using an Addrinfo as the 1st argument 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#connect_from using IPv6 using separate arguments 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#connect_from using IPv6 using an Addrinfo as the 1st argument 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#connect using IPv4 4211s - returns a Socket when no block is given 4211s - yields a Socket when a block is given 4211s - accepts a Hash of options 4211s 4211s Addrinfo#connect using IPv6 4211s - returns a Socket when no block is given 4211s - yields a Socket when a block is given 4211s - accepts a Hash of options 4211s 4211s Addrinfo#connect_to using IPv4 using separate arguments 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the Addrinfo to the local address 4211s 4211s Addrinfo#connect_to using IPv4 using an Addrinfo as the 1st argument 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#connect_to using IPv6 using separate arguments 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the Addrinfo to the local address 4211s 4211s Addrinfo#connect_to using IPv6 using an Addrinfo as the 1st argument 4211s - returns a Socket when no block is given 4211s - yields the Socket when a block is given 4211s - treats the last argument as a set of options if it is a Hash 4211s - binds the socket to the local address 4211s 4211s Addrinfo#family_addrinfo 4211s - raises ArgumentError if no arguments are given 4211s 4211s Addrinfo#family_addrinfo using multiple arguments with an IP Addrinfo 4211s - raises ArgumentError if only 1 argument is given 4211s - raises ArgumentError if more than 2 arguments are given 4211s - returns an Addrinfo when a host and port are given 4211s 4211s Addrinfo#family_addrinfo using multiple arguments with an IP Addrinfo the returned Addrinfo 4211s - uses the same address family as the source Addrinfo 4211s - uses the same protocol family as the source Addrinfo 4211s - uses the same socket type as the source Addrinfo 4211s - uses the same protocol as the source Addrinfo 4211s 4211s Addrinfo#family_addrinfo using multiple arguments with a UNIX Addrinfo 4211s - raises ArgumentError if more than 1 argument is given 4211s - returns an Addrinfo when a UNIX socket path is given 4211s 4211s Addrinfo#family_addrinfo using multiple arguments with a UNIX Addrinfo the returned Addrinfo 4211s - uses AF_UNIX as the address family 4211s - uses PF_UNIX as the protocol family 4211s - uses the given socket path 4211s 4211s Addrinfo#family_addrinfo using an Addrinfo as the 1st argument 4211s - returns the input Addrinfo 4211s - raises ArgumentError if more than 1 argument is given 4211s - raises ArgumentError if the protocol families don't match 4211s - raises ArgumentError if the socket types don't match 4211s 4211s Addrinfo.foreach 4211s - yields Addrinfo instances to the supplied block 4211s 4211s Addrinfo.getaddrinfo 4211s - returns an Array of Addrinfo instances 4211s - sets a custom protocol family of the Addrinfo instances 4211s - sets a corresponding address family based on a custom protocol family 4211s - sets the default socket type of the Addrinfo instances 4211s - sets a custom socket type of the Addrinfo instances 4211s - sets the default socket protocol of the Addrinfo instances 4211s - sets the canonical name when AI_CANONNAME is given as a flag 4211s 4211s Addrinfo.getaddrinfo using IPv4 4211s - sets the IP address of the Addrinfo instances 4211s - sets the port of the Addrinfo instances 4211s - sets the address family of the Addrinfo instances 4211s - sets the protocol family of the Addrinfo instances 4211s 4211s Addrinfo.getaddrinfo using IPv6 4211s - sets the IP address of the Addrinfo instances 4211s - sets the port of the Addrinfo instances 4211s - sets the address family of the Addrinfo instances 4211s - sets the protocol family of the Addrinfo instances 4211s 4211s Addrinfo#getnameinfo using an IP Addrinfo using IPv4 4211s - returns the node and service names 4211s - accepts flags as an Integer as the first argument 4211s 4211s Addrinfo#getnameinfo using an IP Addrinfo using IPv6 4211s - returns the node and service names 4211s - accepts flags as an Integer as the first argument 4211s 4211s Addrinfo#getnameinfo using a UNIX Addrinfo 4211s - returns the hostname and UNIX socket path 4211s 4211s Addrinfo#initialize with a sockaddr string without a family 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns AF_INET as the default address family 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the 0 protocol 4211s 4211s Addrinfo#initialize with a sockaddr string with a family given 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the 0 protocol 4211s 4211s Addrinfo#initialize with a sockaddr string with a family and socket type 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the specified socket type 4211s - returns the 0 protocol 4211s 4211s Addrinfo#initialize with a sockaddr string with a family, socket type and protocol 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the specified socket type 4211s - returns the specified protocol 4211s 4211s Addrinfo#initialize with a sockaddr array without a family 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::PF_INET pfamily 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the 0 protocol 4211s 4211s Addrinfo#initialize with a sockaddr array with a valid IP address 4211s - returns an Addrinfo with the correct IP 4211s - returns an Addrinfo with the correct address family 4211s - returns an Addrinfo with the correct protocol family 4211s - returns an Addrinfo with the correct port 4211s 4211s Addrinfo#initialize with a sockaddr array with an invalid IP address 4211s - raises SocketError 4211s 4211s Addrinfo#initialize with a sockaddr array with a family given 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the 0 protocol 4211s 4211s Addrinfo#initialize with a sockaddr array with a family and socket type 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the 0 protocol 4211s - overwrites the socket type SOCK_STREAM 4211s - overwrites the socket type SOCK_DGRAM 4211s - overwrites the socket type SOCK_RAW 4211s - raises SocketError when using SOCK_RDM 4211s 4211s Addrinfo#initialize with a sockaddr array with a family, socket type and protocol 4211s - stores the ip address from the sockaddr 4211s - stores the port number from the sockaddr 4211s - returns the Socket::UNSPEC pfamily 4211s - returns the INET6 afamily 4211s - returns the 0 socket type 4211s - returns the specified protocol 4211s 4211s Addrinfo#initialize using an Array with extra arguments with the AF_INET6 address family and an explicit protocol family 4211s - raises SocketError when using any Socket constant except except AF_INET(6)/PF_INET(6) 4211s 4211s 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 4211s - overwrites the protocol when using IPPROTO_IP 4211s - overwrites the protocol when using IPPROTO_UDP 4211s - overwrites the protocol when using IPPROTO_HOPOPTS 4211s - raises SocketError when using IPPROTO_AH 4211s - raises SocketError when using IPPROTO_PUP 4211s - raises SocketError when using IPPROTO_ENCAP 4211s - raises SocketError when using IPPROTO_FRAGMENT 4211s - raises SocketError when using IPPROTO_TP 4211s - raises SocketError when using IPPROTO_ICMP 4211s - raises SocketError when using IPPROTO_DSTOPTS 4211s - raises SocketError when using IPPROTO_IPV6 4211s - raises SocketError when using IPPROTO_IDP 4211s - raises SocketError when using IPPROTO_GRE 4211s - raises SocketError when using IPPROTO_RSVP 4211s - raises SocketError when using IPPROTO_TCP 4211s - raises SocketError when using IPPROTO_ROUTING 4211s - raises SocketError when using IPPROTO_EGP 4211s - raises SocketError when using IPPROTO_IPIP 4211s - raises SocketError when using IPPROTO_RAW 4211s - raises SocketError when using IPPROTO_SCTP 4211s - raises SocketError when using IPPROTO_NONE 4211s - raises SocketError when using IPPROTO_IGMP 4211s - raises SocketError when using IPPROTO_PIM 4211s - raises SocketError when using IPPROTO_ESP 4211s - raises SocketError when using IPPROTO_COMP 4211s - raises SocketError when using IPPROTO_MTP 4211s - raises SocketError when using IPPROTO_ICMPV6 4211s 4211s 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 4211s - overwrites the protocol when using IPPROTO_IP 4211s - overwrites the protocol when using IPPROTO_UDP 4211s - overwrites the protocol when using IPPROTO_HOPOPTS 4211s - raises SocketError when using IPPROTO_AH 4211s - raises SocketError when using IPPROTO_PUP 4211s - raises SocketError when using IPPROTO_ENCAP 4211s - raises SocketError when using IPPROTO_FRAGMENT 4211s - raises SocketError when using IPPROTO_TP 4211s - raises SocketError when using IPPROTO_ICMP 4211s - raises SocketError when using IPPROTO_DSTOPTS 4211s - raises SocketError when using IPPROTO_IPV6 4211s - raises SocketError when using IPPROTO_IDP 4211s - raises SocketError when using IPPROTO_GRE 4211s - raises SocketError when using IPPROTO_RSVP 4211s - raises SocketError when using IPPROTO_TCP 4211s - raises SocketError when using IPPROTO_ROUTING 4211s - raises SocketError when using IPPROTO_EGP 4211s - raises SocketError when using IPPROTO_IPIP 4211s - raises SocketError when using IPPROTO_RAW 4211s - raises SocketError when using IPPROTO_SCTP 4211s - raises SocketError when using IPPROTO_NONE 4211s - raises SocketError when using IPPROTO_IGMP 4211s - raises SocketError when using IPPROTO_PIM 4211s - raises SocketError when using IPPROTO_ESP 4211s - raises SocketError when using IPPROTO_COMP 4211s - raises SocketError when using IPPROTO_MTP 4211s - raises SocketError when using IPPROTO_ICMPV6 4211s 4211s 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 4211s - overwrites the protocol when using IPPROTO_AH 4211s - overwrites the protocol when using IPPROTO_PUP 4211s - overwrites the protocol when using IPPROTO_ENCAP 4211s - overwrites the protocol when using IPPROTO_FRAGMENT 4211s - overwrites the protocol when using IPPROTO_TP 4211s - overwrites the protocol when using IPPROTO_ICMP 4211s - overwrites the protocol when using IPPROTO_DSTOPTS 4211s - overwrites the protocol when using IPPROTO_IPV6 4211s - overwrites the protocol when using IPPROTO_IDP 4211s - overwrites the protocol when using IPPROTO_GRE 4211s - overwrites the protocol when using IPPROTO_RSVP 4211s - overwrites the protocol when using IPPROTO_TCP 4211s - overwrites the protocol when using IPPROTO_ROUTING 4211s - overwrites the protocol when using IPPROTO_IP 4211s - overwrites the protocol when using IPPROTO_EGP 4211s - overwrites the protocol when using IPPROTO_IPIP 4211s - overwrites the protocol when using IPPROTO_RAW 4211s - overwrites the protocol when using IPPROTO_SCTP 4211s - overwrites the protocol when using IPPROTO_NONE 4211s - overwrites the protocol when using IPPROTO_IGMP 4211s - overwrites the protocol when using IPPROTO_PIM 4211s - overwrites the protocol when using IPPROTO_HOPOPTS 4211s - overwrites the protocol when using IPPROTO_ESP 4211s - overwrites the protocol when using IPPROTO_COMP 4211s - overwrites the protocol when using IPPROTO_UDP 4211s - overwrites the protocol when using IPPROTO_ICMPV6 4211s 4211s 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 4211s - raises SocketError when using IPPROTO_AH 4211s - raises SocketError when using IPPROTO_PUP 4211s - raises SocketError when using IPPROTO_ENCAP 4211s - raises SocketError when using IPPROTO_FRAGMENT 4211s - raises SocketError when using IPPROTO_TP 4211s - raises SocketError when using IPPROTO_ICMP 4211s - raises SocketError when using IPPROTO_DSTOPTS 4211s - raises SocketError when using IPPROTO_IPV6 4211s - raises SocketError when using IPPROTO_IDP 4211s - raises SocketError when using IPPROTO_GRE 4211s - raises SocketError when using IPPROTO_RSVP 4211s - raises SocketError when using IPPROTO_TCP 4211s - raises SocketError when using IPPROTO_ROUTING 4211s - raises SocketError when using IPPROTO_IP 4211s - raises SocketError when using IPPROTO_EGP 4211s - raises SocketError when using IPPROTO_IPIP 4211s - raises SocketError when using IPPROTO_RAW 4211s - raises SocketError when using IPPROTO_SCTP 4211s - raises SocketError when using IPPROTO_NONE 4211s - raises SocketError when using IPPROTO_IGMP 4211s - raises SocketError when using IPPROTO_PIM 4211s - raises SocketError when using IPPROTO_HOPOPTS 4211s - raises SocketError when using IPPROTO_ESP 4211s - raises SocketError when using IPPROTO_COMP 4211s - raises SocketError when using IPPROTO_MTP 4211s - raises SocketError when using IPPROTO_UDP 4211s - raises SocketError when using IPPROTO_ICMPV6 4211s 4211s 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 4211s - overwrites the protocol when using IPPROTO_IP 4211s - overwrites the protocol when using IPPROTO_HOPOPTS 4211s - raises SocketError when using IPPROTO_AH 4211s - raises SocketError when using IPPROTO_PUP 4211s - raises SocketError when using IPPROTO_ENCAP 4211s - raises SocketError when using IPPROTO_FRAGMENT 4211s - raises SocketError when using IPPROTO_TP 4211s - raises SocketError when using IPPROTO_ICMP 4211s - raises SocketError when using IPPROTO_DSTOPTS 4211s - raises SocketError when using IPPROTO_IPV6 4211s - raises SocketError when using IPPROTO_IDP 4211s - raises SocketError when using IPPROTO_GRE 4211s - raises SocketError when using IPPROTO_RSVP 4211s - raises SocketError when using IPPROTO_TCP 4211s - raises SocketError when using IPPROTO_ROUTING 4211s - raises SocketError when using IPPROTO_EGP 4211s - raises SocketError when using IPPROTO_IPIP 4211s - raises SocketError when using IPPROTO_RAW 4211s - raises SocketError when using IPPROTO_SCTP 4211s - raises SocketError when using IPPROTO_NONE 4211s - raises SocketError when using IPPROTO_IGMP 4211s - raises SocketError when using IPPROTO_PIM 4211s - raises SocketError when using IPPROTO_ESP 4211s - raises SocketError when using IPPROTO_COMP 4211s - raises SocketError when using IPPROTO_MTP 4211s - raises SocketError when using IPPROTO_UDP 4211s - raises SocketError when using IPPROTO_ICMPV6 4211s 4211s 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 4211s - overwrites the protocol when using IPPROTO_IP 4211s - overwrites the protocol when using IPPROTO_TCP 4211s - overwrites the protocol when using IPPROTO_HOPOPTS 4211s - raises SocketError when using IPPROTO_AH 4211s - raises SocketError when using IPPROTO_PUP 4211s - raises SocketError when using IPPROTO_ENCAP 4211s - raises SocketError when using IPPROTO_FRAGMENT 4211s - raises SocketError when using IPPROTO_TP 4211s - raises SocketError when using IPPROTO_ICMP 4211s - raises SocketError when using IPPROTO_DSTOPTS 4211s - raises SocketError when using IPPROTO_IPV6 4211s - raises SocketError when using IPPROTO_IDP 4211s - raises SocketError when using IPPROTO_GRE 4211s - raises SocketError when using IPPROTO_RSVP 4211s - raises SocketError when using IPPROTO_ROUTING 4211s - raises SocketError when using IPPROTO_EGP 4211s - raises SocketError when using IPPROTO_IPIP 4211s - raises SocketError when using IPPROTO_RAW 4211s - raises SocketError when using IPPROTO_SCTP 4211s - raises SocketError when using IPPROTO_NONE 4211s - raises SocketError when using IPPROTO_IGMP 4211s - raises SocketError when using IPPROTO_PIM 4211s - raises SocketError when using IPPROTO_ESP 4211s - raises SocketError when using IPPROTO_COMP 4211s - raises SocketError when using IPPROTO_MTP 4211s - raises SocketError when using IPPROTO_UDP 4211s - raises SocketError when using IPPROTO_ICMPV6 4211s 4211s Addrinfo#initialize with Symbols 4211s - returns an Addrinfo with :PF_INET family 4211s - returns an Addrinfo with :INET family 4211s - returns an Addrinfo with :SOCK_STREAM as the socket type 4211s - returns an Addrinfo with :STREAM as the socket type 4211s 4211s Addrinfo#initialize with Strings 4211s - returns an Addrinfo with "PF_INET" family 4211s - returns an Addrinfo with "INET" family 4211s - returns an Addrinfo with "SOCK_STREAM" as the socket type 4211s - returns an Addrinfo with "STREAM" as the socket type 4211s 4211s Addrinfo#initialize using separate arguments for a Unix socket 4211s - returns an Addrinfo with the correct unix path 4211s - returns an Addrinfo with the correct protocol family 4211s - returns an Addrinfo with the correct address family 4211s 4211s Addrinfo#inspect_sockaddr using an IPv4 address 4211s - returns a String containing the IP address and port number 4211s - returns a String containing just the IP address when no port is given 4211s 4211s Addrinfo#inspect_sockaddr using an IPv6 address 4211s - returns a String containing the IP address and port number 4211s - returns a String containing just the IP address when no port is given 4211s 4211s Addrinfo#inspect_sockaddr using a UNIX path 4211s - returns a String containing the UNIX path 4211s - returns a String containing the UNIX path when using a relative path 4211s 4211s Addrinfo#inspect using an IPv4 Addrinfo 4211s - returns a String when using a TCP Addrinfo 4211s - returns a String when using an UDP Addrinfo 4211s - returns a String when using an Addrinfo without a port 4211s 4211s Addrinfo#inspect using an IPv6 Addrinfo 4211s - returns a String when using a TCP Addrinfo 4211s - returns a String when using an UDP Addrinfo 4211s - returns a String when using an Addrinfo without a port 4211s 4211s Addrinfo#inspect using a UNIX Addrinfo 4211s - returns a String 4211s - returns a String when using a relative UNIX path 4211s - returns a String when using a DGRAM socket 4211s 4211s Addrinfo#ip_address for an ipv4 socket 4211s - returns the ip address 4211s 4211s Addrinfo#ip_address for an ipv6 socket 4211s - returns the ip address 4211s 4211s Addrinfo#ip_address for a unix socket 4211s - raises an exception 4211s 4211s Addrinfo#ip_address with an Array as the socket address 4211s - returns the IP as a String 4211s 4211s Addrinfo#ip_address without an IP address 4211s - returns the local IP address when using an empty String as the IP 4211s - returns the local IP address when using nil as the IP 4211s 4211s Addrinfo#ip_port for an ipv4 socket 4211s - returns the port 4211s 4211s Addrinfo#ip_port for an ipv6 socket 4211s - returns the port 4211s 4211s Addrinfo#ip_port for a unix socket 4211s - raises an exception 4211s 4211s Addrinfo#ip? for an ipv4 socket 4211s - returns true 4211s 4211s Addrinfo#ip? for an ipv6 socket 4211s - returns true 4211s 4211s Addrinfo#ip? for a unix socket 4211s - returns false 4211s 4211s Addrinfo.ip using IPv4 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port to 0 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type to 0 4211s 4211s Addrinfo.ip using IPv6 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port to 0 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type to 0 4211s 4211s Addrinfo#ip_unpack for an ipv4 socket 4211s - returns the ip address and port pair 4211s 4211s Addrinfo#ip_unpack for an ipv6 socket 4211s - returns the ip address and port pair 4211s 4211s Addrinfo#ip_unpack for a unix socket 4211s - raises an exception 4211s 4211s Addrinfo#ipv4_loopback? for an ipv4 socket 4211s - returns true for the loopback address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv4_loopback? for an ipv6 socket 4211s - returns false for the loopback address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv4_loopback? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv4_multicast? 4211s - returns true for a multicast address 4211s - returns false for a regular address 4211s - returns false for an IPv6 address 4211s 4211s Addrinfo#ipv4_multicast? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv4_private? for an ipv4 socket 4211s - returns true for a private address 4211s - returns false for a public address 4211s 4211s Addrinfo#ipv4_private? for an ipv6 socket 4211s - returns false 4211s 4211s Addrinfo#ipv4_private? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv4? for an ipv4 socket 4211s - returns true 4211s 4211s Addrinfo#ipv4? for an ipv6 socket 4211s - returns false 4211s 4211s Addrinfo#ipv4? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv6_linklocal? 4211s - returns true for a link-local address 4211s - returns false for a regular address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_loopback? for an ipv4 socket 4211s - returns false for the loopback address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv6_loopback? for an ipv6 socket 4211s - returns true for the loopback address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv6_loopback? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv6_mc_global? 4211s - returns true for a multi-cast address in the global scope 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_mc_linklocal? 4211s - returns true for a multi-cast link-local address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_mc_nodelocal? 4211s - returns true for a multi-cast node-local address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_mc_orglocal? 4211s - returns true for a multi-cast org-local address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_mc_sitelocal? 4211s - returns true for a multi-cast site-local address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_multicast? for an ipv4 socket 4211s - returns true for a multicast address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv6_multicast? for an ipv6 socket 4211s - returns true for a multicast address 4211s - returns false for another address 4211s 4211s Addrinfo#ipv6_multicast? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv6_sitelocal? 4211s - returns true for a site-local address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6? for an ipv4 socket 4211s - returns true 4211s 4211s Addrinfo#ipv6? for an ipv6 socket 4211s - returns false 4211s 4211s Addrinfo#ipv6? for a unix socket 4211s - returns false 4211s 4211s Addrinfo#ipv6_to_ipv4 4211s - returns an Addrinfo for ::192.168.1.1 4211s - returns an Addrinfo for ::0.0.1.1 4211s - returns an Addrinfo for ::0.0.1.0 4211s - returns an Addrinfo for ::0.1.0.0 4211s - returns an Addrinfo for ::ffff:192.168.1.1 4211s - returns nil for ::0.0.0.1 4211s - returns nil for a pure IPv6 Addrinfo 4211s - returns nil for an IPv4 Addrinfo 4211s - returns nil for a UNIX Addrinfo 4211s 4211s Addrinfo#ipv6_unique_local? 4211s - returns true for an unique local IPv6 address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_unspecified? 4211s - returns true for an unspecified IPv6 address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_v4compat? 4211s - returns true for an IPv4 compatible address 4211s - returns false for an IPv4 mapped address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#ipv6_v4mapped? 4211s - returns true for an IPv4 compatible address 4211s - returns false for an IPv4 compatible address 4211s - returns false for a regular IPv6 address 4211s - returns false for an IPv4 address 4211s 4211s Addrinfo#listen 4211s - closes the socket if a block is given 4211s 4211s Addrinfo#pfamily 4211s - returns PF_UNSPEC as the default socket family 4211s 4211s Addrinfo#pfamily for an ipv4 socket 4211s - returns Socket::PF_INET 4211s 4211s Addrinfo#pfamily for an ipv6 socket 4211s - returns Socket::PF_INET6 4211s 4211s Addrinfo#pfamily for a unix socket 4211s - returns Socket::PF_UNIX 4211s 4211s Addrinfo#protocol 4211s - returns 0 by default 4211s - returns a custom protocol when given 4211s 4211s Addrinfo#protocol for a unix socket 4211s - returns 0 4211s 4211s Addrinfo#socktype 4211s - returns 0 by default 4211s - returns the socket type when given 4211s 4211s Addrinfo#socktype for a unix socket 4211s - returns Socket::SOCK_STREAM 4211s 4211s Addrinfo.tcp using IPv4 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type 4211s - sets the socket protocol 4211s 4211s Addrinfo.tcp using IPv6 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type 4211s - sets the socket protocol 4211s 4211s Addrinfo#to_s for an ipv4 socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_s for an ipv6 socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_s for a unix socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_s using a Addrinfo with just an IP address 4211s - returns a String 4211s 4211s Addrinfo#to_sockaddr for an ipv4 socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_sockaddr for an ipv6 socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_sockaddr for a unix socket 4211s - returns a sockaddr packed structure 4211s 4211s Addrinfo#to_sockaddr using a Addrinfo with just an IP address 4211s - returns a String 4211s 4211s Addrinfo.udp using IPv4 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type 4211s - sets the socket protocol 4211s 4211s Addrinfo.udp using IPv6 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the port 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type 4211s - sets the socket protocol 4211s 4211s Addrinfo#unix_path for an ipv4 socket 4211s - raises an exception 4211s 4211s Addrinfo#unix_path for an ipv6 socket 4211s - raises an exception 4211s 4211s Addrinfo#unix_path for a unix socket 4211s - returns the socket path 4211s 4211s Addrinfo.unix 4211s - returns an Addrinfo instance 4211s - sets the IP address 4211s - sets the address family 4211s - sets the protocol family 4211s - sets the socket type 4211s - sets a custom socket type 4211s - sets the socket protocol to 0 4211s 4211s Addrinfo#unix? for an ipv4 socket 4211s - returns false 4211s 4211s Addrinfo#unix? for an ipv6 socket 4211s - returns false 4211s 4211s Addrinfo#unix? for a unix socket 4211s - returns true 4211s 4211s Socket::BasicSocket#close_read 4211s - closes the reading end of the socket 4211s - does not raise when called on a socket already closed for reading 4211s - does not fully close the socket 4211s - fully closes the socket if it was already closed for writing 4211s - raises IOError when called on a fully closed socket 4211s - returns nil 4211s 4211s Socket::BasicSocket#close_write 4211s - closes the writing end of the socket 4211s - does not raise when called on a socket already closed for writing 4211s - does not fully close the socket 4211s - does not prevent reading 4211s - fully closes the socket if it was already closed for reading 4211s - raises IOError when called on a fully closed socket 4211s - returns nil 4211s 4211s Socket#connect_address using a socket bound to 0.0.0.0 4211s - returns an Addrinfo 4211s - uses the correct port number 4211s - uses SOCK_STREAM as the socket type 4211s 4211s Socket#connect_address using a socket bound to :: 4211s - returns an Addrinfo 4211s - uses ::1 as the IP address 4211s - uses the correct port number 4211s - uses AF_INET6 as the address family 4211s - uses PF_INET6 as the address family 4211s - uses SOCK_STREAM as the socket type 4211s 4211s Socket#connect_address using an unbound UNIX socket 4211s - raises SocketError 4211s 4211s Socket#connect_address using a bound UNIX socket 4211s - returns an Addrinfo 4211s - uses the correct socket path 4211s - uses AF_UNIX as the address family 4211s - uses PF_UNIX as the protocol family 4211s - uses SOCK_STREAM as the socket type 4211s - uses 0 as the protocol 4211s 4211s BasicSocket.do_not_reverse_lookup 4211s - defaults to true 4211s - causes 'peeraddr' to avoid name lookups 4211s - looks for hostnames when set to false 4211s - looks for numeric addresses when set to true 4211s 4211s BasicSocket#do_not_reverse_lookup for an TCPSocket.new socket 4211s - inherits from BasicSocket.do_not_reverse_lookup when the socket is created 4211s - is true when BasicSocket.do_not_reverse_lookup is true 4211s - is false when BasicSocket.do_not_reverse_lookup is false 4211s - can be changed with #do_not_reverse_lookup= 4211s 4211s BasicSocket#do_not_reverse_lookup for an TCPServer#accept socket 4211s - inherits from BasicSocket.do_not_reverse_lookup when the socket is created 4211s - is true when BasicSocket.do_not_reverse_lookup is true 4211s - is false when BasicSocket.do_not_reverse_lookup is false 4211s - can be changed with #do_not_reverse_lookup= 4211s 4211s BasicSocket.for_fd 4211s - return a Socket instance wrapped around the descriptor 4211s - returns a new socket for a file descriptor 4211s - sets the socket into binary mode 4211s 4211s Socket::BasicSocket#getpeername 4211s - returns the sockaddr of the other end of the connection 4211s 4211s Socket::BasicSocket#getsockname 4211s - returns the sockaddr associated with the socket 4211s - works on sockets listening in ipaddr_any 4211s - returns a default socket address for a disconnected socket 4211s 4211s BasicSocket#getsockopt 4211s - gets a socket option Socket::SO_TYPE 4211s - gets a socket option Socket::SO_OOBINLINE 4211s - gets a socket option Socket::SO_LINGER 4211s - gets a socket option Socket::SO_SNDBUF 4211s - raises a SystemCallError with an invalid socket option 4211s - returns a Socket::Option using a constant 4211s - returns a Socket::Option for a boolean option 4211s - returns a Socket::Option for a struct option 4211s - raises Errno::ENOPROTOOPT when requesting an invalid option 4211s 4211s BasicSocket#getsockopt using Symbols as arguments 4211s - returns a Socket::Option for arguments :SOCKET and :TYPE 4211s - returns a Socket::Option for arguments :SOCKET and :REUSEADDR 4211s - returns a Socket::Option for arguments :SOCKET and :LINGER 4211s 4211s BasicSocket#getsockopt using Strings as arguments 4211s - returns a Socket::Option for arguments "SOCKET" and "TYPE" 4211s - returns a Socket::Option for arguments "SOCKET" and "REUSEADDR" 4211s - returns a Socket::Option for arguments "SOCKET" and "LINGER" 4211s 4211s BasicSocket#getsockopt using a String based option 4211s - allows unpacking of a boolean option 4211s - allows unpacking of a struct option 4211s 4211s BasicSocket#local_address using TCPSocket 4211s - uses AF_INET as the address family 4211s - uses PF_INET as the protocol family 4211s - uses SOCK_STREAM as the socket type 4211s - uses the correct IP address 4211s - uses the correct port 4211s - equals address of peer socket 4211s - returns an Addrinfo 4211s - can be used to connect to the server 4211s 4211s BasicSocket#local_address using IPv6 4211s - uses AF_INET6 as the address family 4211s - uses PF_INET6 as the protocol family 4211s - uses SOCK_STREAM as the socket type 4211s - uses the correct IP address 4211s - uses the correct port 4211s - equals address of peer socket 4211s - returns an Addrinfo 4211s - can be used to connect to the server 4211s 4211s BasicSocket#local_address using UNIXSocket 4211s - uses AF_UNIX as the address family 4211s - uses PF_UNIX as the protocol family 4211s - uses SOCK_STREAM as the socket type 4211s - uses the correct socket path 4211s - equals address of peer socket 4211s - returns an Addrinfo 4211s - uses 0 as the protocol 4211s - can be used to connect to the server 4211s 4211s BasicSocket#local_address using UDPSocket 4211s - uses the correct address family 4211s - uses the correct protocol family 4211s - uses SOCK_DGRAM as the socket type 4211s - uses the correct IP address 4211s - uses the correct port 4211s - returns an Addrinfo 4211s - can be used to connect to the peer 4211s 4211s BasicSocket#read_nonblock using IPv4 4211s - receives data after it's ready 4211s - does not set the IO in nonblock mode 4211s 4211s BasicSocket#read_nonblock using IPv6 4211s - receives data after it's ready 4211s - does not set the IO in nonblock mode 4211s 4211s Socket::BasicSocket#recv_nonblock using IPv4 4211s - raises an exception extending IO::WaitReadable if there's no data available 4211s - returns :wait_readable with exception: false 4211s - receives data after it's ready 4211s - allows an output buffer as third argument 4211s - does not block if there's no data available 4211s 4211s Socket::BasicSocket#recv_nonblock using IPv4 using an unbound socket 4211s - raises an exception extending IO::WaitReadable 4211s 4211s Socket::BasicSocket#recv_nonblock using IPv6 4211s - raises an exception extending IO::WaitReadable if there's no data available 4211s - returns :wait_readable with exception: false 4211s - receives data after it's ready 4211s - allows an output buffer as third argument 4211s - does not block if there's no data available 4211s 4211s Socket::BasicSocket#recv_nonblock using IPv6 using an unbound socket 4211s - raises an exception extending IO::WaitReadable 4211s 4211s BasicSocket#recv 4211s - receives a specified number of bytes of a message from another socket 4211s - gets lines delimited with a custom separator 4211s 4211s BasicSocket#recv using IPv4 using a bound socket with data available 4211s - reads the given amount of bytes 4211s - reads the given amount of bytes when it exceeds the data size 4211s 4211s BasicSocket#recv using IPv6 using a bound socket with data available 4211s - reads the given amount of bytes 4211s - reads the given amount of bytes when it exceeds the data size 4212s 4212s BasicSocket#remote_address using TCPSocket 4212s - uses AF_INET as the address family 4212s - uses PF_INET as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s - equals address of peer socket 4212s - returns an Addrinfo 4212s - can be used to connect to the server 4212s 4212s BasicSocket#remote_address using IPv6 4212s - uses AF_INET6 as the address family 4212s - uses PF_INET6 as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s - equals address of peer socket 4212s - returns an Addrinfo 4212s - can be used to connect to the server 4212s 4212s BasicSocket#remote_address using UNIXSocket 4212s - uses AF_UNIX as the address family 4212s - uses PF_UNIX as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct socket path 4212s - equals address of peer socket 4212s - returns an Addrinfo 4212s - uses 0 as the protocol 4212s - can be used to connect to the server 4212s 4212s BasicSocket#remote_address using UDPSocket 4212s - uses the correct address family 4212s - uses the correct protocol family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s - returns an Addrinfo 4212s - can be used to connect to the peer 4212s 4212s BasicSocket#send 4212s - sends a message to another socket and returns the number of bytes sent 4212s - accepts a sockaddr as recipient address 4212s 4212s BasicSocket#send using IPv4 using a disconnected socket with an object implementing #to_str 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv4 using a disconnected socket with a destination address as a String 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv4 using a disconnected socket with a destination address as an Addrinfo 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv4 using a connected UDP socket without a destination address argument 4212s - returns the amount of bytes written 4212s 4212s BasicSocket#send using IPv4 using a connected UDP socket with a destination address argument 4212s - does not persist the alternative connection after writing to the socket 4212s 4212s BasicSocket#send using IPv6 using a disconnected socket with an object implementing #to_str 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv6 using a disconnected socket with a destination address as a String 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv6 using a disconnected socket with a destination address as an Addrinfo 4212s - returns the amount of sent bytes 4212s 4212s BasicSocket#send using IPv6 using a connected UDP socket without a destination address argument 4212s - returns the amount of bytes written 4212s 4212s BasicSocket#send using IPv6 using a connected UDP socket with a destination address argument 4212s - does not persist the alternative connection after writing to the socket 4212s 4212s BasicSocket#setsockopt 4212s - sets the socket linger to 0 4212s - sets the socket linger to some positive value 4212s - raises EINVAL if passed wrong linger value 4212s - sets the socket option Socket::SO_OOBINLINE 4212s - sets the socket option Socket::SO_SNDBUF 4212s 4212s BasicSocket#setsockopt accepts Socket::Option as argument 4212s - boolean 4212s - int 4212s 4212s BasicSocket#setsockopt accepts Socket::Option as argument 4212s - linger 4212s 4212s BasicSocket#setsockopt using a STREAM socket using separate arguments with Symbols 4212s - raises TypeError when the first argument is nil 4212s - sets a boolean option 4212s - raises Errno::EINVAL when setting an invalid option value 4212s 4212s BasicSocket#setsockopt using a STREAM socket using separate arguments with Symbols 4212s - sets a boolean option 4212s 4212s BasicSocket#setsockopt using a STREAM socket using separate arguments with constants 4212s - sets a boolean option 4212s 4212s BasicSocket#setsockopt using a STREAM socket using separate arguments with custom objects 4212s - sets a boolean option 4212s 4212s BasicSocket#setsockopt using a STREAM socket using a Socket::Option as the first argument 4212s - sets a boolean option 4212s - raises TypeError when passing 3 arguments 4212s 4212s BasicSocket#write_nonblock using IPv4 4212s - sends data 4212s 4212s BasicSocket#write_nonblock using IPv6 4212s - sends data 4212s 4212s Socket::Constants 4212s - defines socket types 4212s - defines protocol families 4212s - defines PF_IPX protocol 4212s - defines address families 4212s - defines AF_IPX address 4212s - defines send/receive options 4212s - defines socket level options 4212s - defines socket options 4212s - defines multicast options 4212s - defines multicast options 4212s - defines TCP options 4212s 4212s Socket::IPSocket#addr 4212s - returns an array with the socket's information 4212s - returns an address in the array if do_not_reverse_lookup is true 4212s - returns an address in the array if passed false 4212s 4212s Socket::IPSocket#addr using IPv4 without reverse lookups 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#addr using IPv4 with reverse lookups using true as the argument 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#addr using IPv4 with reverse lookups using :hostname as the argument 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#addr using IPv4 with reverse lookups using :cats as the argument 4212s - raises ArgumentError 4212s 4212s Socket::IPSocket#addr using IPv4 with do_not_reverse_lookup disabled on socket level 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#addr using IPv6 with reverse lookups using :cats as the argument 4212s - raises ArgumentError 4212s 4212s Socket::IPSocket#getaddress 4212s - returns the IP address of hostname 4212s - raises an error on unknown hostnames 4212s 4212s Socket::IPSocket#peeraddr 4212s - returns an array of information on the peer 4212s - returns an IP instead of hostname if do_not_reverse_lookup is true 4212s - returns an IP instead of hostname if passed false 4212s 4212s Socket::IPSocket#peeraddr using IPv4 without reverse lookups 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using true as the argument 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using :hostname as the argument 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#peeraddr using IPv4 with reverse lookups using :cats as the argument 4212s - raises ArgumentError 4212s 4212s Socket::IPSocket#peeraddr using IPv4 with do_not_reverse_lookup disabled on socket level 4212s - returns an Array containing address information 4212s 4212s Socket::IPSocket#peeraddr using IPv6 with reverse lookups using :cats as the argument 4212s - raises ArgumentError 4212s 4212s Socket::IPSocket#recvfrom 4212s - reads data from the connection 4212s - reads up to len bytes 4212s - returns an array with the data and connection info 4212s 4212s Socket::IPSocket#recvfrom using IPv4 4212s - returns an Array containing up to N bytes and address information 4212s 4212s Socket::IPSocket#recvfrom using IPv4 using reverse lookups 4212s - includes the hostname in the address Array 4212s 4212s Socket::Option.bool 4212s - creates a new Socket::Option 4212s 4212s Socket::Option#bool 4212s - returns boolean value 4212s - raises TypeError when called on a non boolean option 4212s 4212s Socket::Option#initialize using Integers 4212s - returns a Socket::Option 4212s 4212s Socket::Option#initialize using Symbols 4212s - returns a Socket::Option 4212s - raises when using an invalid address family 4212s - raises when using an invalid level 4212s - raises when using an invalid option name 4212s 4212s Socket::Option#initialize using Strings 4212s - returns a Socket::Option 4212s - raises when using an invalid address family 4212s - raises when using an invalid level 4212s - raises when using an invalid option name 4212s 4212s Socket::Option#inspect 4212s - correctly returns SO_LINGER value 4212s 4212s Socket::Option.int 4212s - creates a new Socket::Option 4212s 4212s Socket::Option#int 4212s - raises TypeError when called on a non integer option 4212s 4212s Socket::Option.linger 4212s - creates a new Socket::Option for SO_LINGER 4212s - accepts boolean as onoff argument 4212s 4212s Socket::Option#linger 4212s - returns linger option 4212s - raises TypeError if not a SO_LINGER 4212s - raises TypeError if option has not good size 4212s - raises TypeError when called on a non linger option 4212s 4212s Socket::Option.new 4212s - should accept integers 4212s - should accept symbols 4212s - should raise error on unknown family 4212s - should raise error on unknown level 4212s - should raise error on unknown option name 4212s 4212s Socket#bind on SOCK_DGRAM socket 4212s - binds to a port 4212s - returns 0 if successful 4212s - raises Errno::EINVAL when already bound 4212s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine 4212s - raises Errno::EACCES when the current user does not have permission to bind 4212s 4212s Socket#bind on SOCK_STREAM socket 4212s - binds to a port 4212s - returns 0 if successful 4212s - raises Errno::EINVAL when already bound 4212s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine 4212s - raises Errno::EACCES when the current user does not have permission to bind 4212s 4212s Socket#bind using IPv4 using a packed socket address 4212s - returns 0 when successfully bound 4212s - raises Errno::EINVAL when binding to an already bound port 4212s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available 4212s - raises Errno::EACCES when the user is not allowed to bind to the port 4212s 4212s Socket#bind using IPv4 using an Addrinfo 4212s - binds to an Addrinfo 4212s - uses a new Addrinfo for the local address 4212s 4212s Socket#bind using IPv6 using a packed socket address 4212s - returns 0 when successfully bound 4212s - raises Errno::EINVAL when binding to an already bound port 4212s - raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available 4212s - raises Errno::EACCES when the user is not allowed to bind to the port 4212s 4212s Socket#bind using IPv6 using an Addrinfo 4212s - binds to an Addrinfo 4212s - uses a new Addrinfo for the local address 4212s 4212s Socket#connect_nonblock 4212s - connects the socket to the remote side 4212s - raises Errno::EINPROGRESS when the connect would block 4212s - raises Errno::EINPROGRESS with IO::WaitWritable mixed in when the connect would block 4212s - returns :wait_writable in exceptionless mode when the connect would block 4212s 4212s Socket#connect_nonblock using IPv4 using a DGRAM socket 4212s - returns 0 when successfully connected using a String 4212s - returns 0 when successfully connected using an Addrinfo 4212s - raises TypeError when passed an Integer 4212s 4212s Socket#connect_nonblock using IPv4 using a STREAM socket 4212s - raises IO:EINPROGRESSWaitWritable when the connection would block 4212s 4212s Socket#connect_nonblock using IPv6 using a DGRAM socket 4212s - returns 0 when successfully connected using a String 4212s - returns 0 when successfully connected using an Addrinfo 4212s - raises TypeError when passed an Integer 4212s 4212s Socket#connect_nonblock using IPv6 using a STREAM socket 4212s - raises IO:EINPROGRESSWaitWritable when the connection would block 4212s 4212s Socket#connect using IPv4 4212s - raises Errno::ECONNREFUSED or Errno::ETIMEDOUT when the connection failed 4212s 4212s Socket#connect using IPv6 4212s - raises Errno::ECONNREFUSED or Errno::ETIMEDOUT when the connection failed 4212s 4212s Socket.for_fd 4212s - creates a new Socket that aliases the existing Socket's file descriptor 4212s 4212s Socket.getaddrinfo 4212s - gets the address information 4212s - accepts empty addresses for IPv4 passive sockets 4212s - accepts empty addresses for IPv4 non-passive sockets 4212s - accepts empty addresses for IPv6 passive sockets 4212s - accepts empty addresses for IPv6 non-passive sockets 4212s 4212s Socket.getaddrinfo without global reverse lookups 4212s - returns an Array 4212s - accepts an Integer as the address family 4212s - accepts a Symbol as the address family 4212s - accepts a String as the address family 4212s - accepts an object responding to #to_str as the host 4212s - accepts an object responding to #to_str as the address family 4212s - accepts an Integer as the socket type 4212s - accepts a Symbol as the socket type 4212s - accepts a String as the socket type 4212s - accepts an object responding to #to_str as the socket type 4212s - accepts an Integer as the protocol family 4212s - accepts an Integer as the flags 4212s 4212s Socket.getaddrinfo with global reverse lookups 4212s - returns an address honoring the global lookup option 4212s 4212s Socket.gethostbyaddr using an IPv4 address without an explicit address family 4212s - returns an Array 4212s 4212s Socket.gethostbyaddr using an IPv4 address without an explicit address family the returned Array 4212s - includes the aliases as the 2nd value 4212s - includes the address type as the 3rd value 4212s - includes all address strings as the remaining values 4212s 4212s Socket.gethostbyaddr using an IPv4 address with an explicit address family 4212s - returns an Array when using an Integer as the address family 4212s - returns an Array when using a Symbol as the address family 4212s 4212s Socket.gethostbyaddr using an IPv6 address without an explicit address family 4212s - returns an Array 4212s 4212s Socket.gethostbyaddr using an IPv6 address without an explicit address family the returned Array 4212s - includes the aliases as the 2nd value 4212s - includes all address strings as the remaining values 4212s 4212s Socket.gethostbyaddr using an IPv6 address with an explicit address family 4212s - returns an Array when using an Integer as the address family 4212s - returns an Array when using a Symbol as the address family 4212s 4212s Socket.gethostbyname 4212s - returns broadcast address info for '' 4212s - returns broadcast address info for '' 4212s 4212s Socket.gethostbyname 4212s - returns an Array 4212s 4212s Socket.gethostbyname the returned Array 4212s - includes the aliases as the 2nd value 4212s - includes the address type as the 3rd value 4212s - includes the address strings as the remaining values 4212s 4212s Socket.gethostbyname using as the input address the returned Array 4212s - includes the broadcast address as the first value 4212s - includes the address type as the 3rd value 4212s - includes the address string as the 4th value 4212s 4212s Socket.gethostbyname using as the input address the returned Array 4212s - includes the wildcard address as the first value 4212s - includes the address type as the 3rd value 4212s - includes the address string as the 4th value 4212s 4212s Socket.gethostbyname using an IPv4 address the returned Array 4212s - includes the address type as the 3rd value 4212s - includes the address string as the 4th value 4212s 4212s Socket.gethostbyname using an IPv6 address the returned Array 4212s - includes the address string as the 4th value 4212s 4212s Socket.gethostname 4212s - returns the host name 4212s 4212s Socket.getifaddrs 4212s - returns an Array 4212s 4212s Socket.getifaddrs the returned Array 4212s - should not be empty 4212s - contains instances of Socket::Ifaddr 4212s 4212s Socket.getifaddrs each returned Socket::Ifaddr 4212s - has an interface index 4212s - has an interface name 4212s 4212s Socket.getifaddrs the Socket::Ifaddr address 4212s - is an Addrinfo 4212s 4212s Socket.getifaddrs the Socket::Ifaddr broadcast address 4212s - is an Addrinfo 4212s 4212s Socket.getifaddrs the Socket::Ifaddr netmask address 4212s - is an Addrinfo 4212s - has an address family 4212s - has an IP address 4212s 4212s Socket.getnameinfo 4212s - gets the name information and don't resolve it 4212s - gets the name information and resolve the host 4212s - gets the name information and resolves the service 4212s - gets a 3-element array and doesn't resolve hostname 4212s - gets a 3-element array and resolves the service 4212s - gets a 4-element array and doesn't resolve hostname 4212s - gets a 4-element array and resolves the service 4212s 4212s Socket.getnameinfo using a String as the first argument using NI_NUMERICHOST as the flag 4212s - returns an Array containing the numeric hostname and service name 4212s 4212s Socket.getnameinfo using IPv4 using a 3 element Array as the first argument 4212s - raises ArgumentError when using an invalid Array 4212s 4212s Socket.getnameinfo using IPv4 using a 3 element Array as the first argument using NI_NUMERICHOST as the flag 4212s - returns an Array containing the numeric hostname and service name 4212s 4212s Socket.getnameinfo using IPv4 using a 4 element Array as the first argument using NI_NUMERICHOST as the flag 4212s - returns an Array containing the numeric hostname and service name 4212s 4212s Socket.getnameinfo using IPv6 using a 3 element Array as the first argument 4212s - raises ArgumentError when using an invalid Array 4212s 4212s Socket#getservbyname 4212s - returns the port for service 'discard' 4212s - returns the port for service 'discard' with protocol 'tcp' 4212s - returns the port for service "ftp" 4212s - returns the port for service "ftp" with protocol "tcp" 4212s - returns the port for service 'domain' with protocol 'udp' 4212s - returns the port for service 'daytime' 4212s - raises a SocketError when the service or port is invalid 4212s 4212s Socket#initialize 4212s - sets the do_not_reverse_lookup option 4212s - sets basic IO accessors 4212s - sets the socket to binary mode 4212s 4212s Socket#initialize using an Integer as the 1st and 2nd arguments 4212s - returns a Socket 4212s 4212s Socket#initialize using Symbols as the 1st and 2nd arguments 4212s - returns a Socket 4212s 4212s Socket#initialize using Strings as the 1st and 2nd arguments 4212s - returns a Socket 4212s 4212s Socket#initialize using objects that respond to #to_str 4212s - returns a Socket 4212s - raises TypeError when the #to_str method does not return a String 4212s 4212s Socket#initialize using a custom protocol 4212s - returns a Socket when using an Integer 4212s 4212s Socket.ip_address_list 4212s - returns an Array 4212s 4212s Socket.ip_address_list the returned Array 4212s - is not empty 4212s - contains Addrinfo objects 4212s 4212s Socket.ip_address_list each returned Addrinfo 4212s - has a non-empty IP address 4212s - has an address family 4212s - uses 0 as the port number 4212s 4212s Socket.pack_sockaddr_in 4212s - resolves the service name to a port 4212s 4212s Socket.pack_sockaddr_in using an IPv4 address 4212s - returns a String of 16 bytes 4212s 4212s Socket.pack_sockaddr_in using an IPv6 address 4212s - returns a String of 28 bytes 4212s 4212s Socket#pack_sockaddr_un 4212s - should be idempotent 4212s - packs and unpacks 4212s - handles correctly paths with multibyte chars 4212s - returns a String of 110 bytes 4212s - raises ArgumentError for paths that are too long 4212s 4212s Socket.pair 4212s - ensures the returned sockets are connected 4212s - responses with array of two sockets 4212s - accepts a custom protocol as an Integer as the 3rd argument 4212s - connects the returned Socket objects 4212s 4212s Socket.pair using an Integer as the 1st and 2nd argument 4212s - returns two Socket objects 4212s 4212s Socket.pair using a Symbol as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket.pair using a String as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket.pair using an object that responds to #to_str as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises TypeError when #to_str does not return a String 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket#recvfrom_nonblock using IPv4 using an unbound socket 4212s - raises IO::WaitReadable 4212s 4212s Socket#recvfrom_nonblock using IPv4 using a bound socket without any data available 4212s - raises IO::WaitReadable 4212s - returns :wait_readable with exception: false 4212s 4212s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available 4212s - returns an Array containing the data and an Addrinfo 4212s 4212s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned data 4212s - is the same as the sent data 4212s 4212s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Addrinfo at index 1 4212s 4212s Socket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses PF_INET as the protocol family 4212s - uses the IP address of the client 4212s - uses the port of the client 4212s 4212s Socket#recvfrom_nonblock using IPv6 using an unbound socket 4212s - raises IO::WaitReadable 4212s 4212s Socket#recvfrom_nonblock using IPv6 using a bound socket without any data available 4212s - raises IO::WaitReadable 4212s - returns :wait_readable with exception: false 4212s 4212s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available 4212s - returns an Array containing the data and an Addrinfo 4212s 4212s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned data 4212s - is the same as the sent data 4212s 4212s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Addrinfo at index 1 4212s 4212s Socket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses PF_INET as the protocol family 4212s - uses the IP address of the client 4212s - uses the port of the client 4212s 4212s Socket#recvfrom using IPv4 using a bound socket with data available 4212s - returns an Array containing the data and an Addrinfo 4212s 4212s Socket#recvfrom using IPv4 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Addrinfo at index 1 4212s 4212s Socket#recvfrom using IPv4 using a bound socket with data available the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses PF_INET as the protocol family 4212s - uses the IP address of the client 4212s - uses the port of the client 4212s 4212s Socket#recvfrom using IPv6 using a bound socket with data available 4212s - returns an Array containing the data and an Addrinfo 4212s 4212s Socket#recvfrom using IPv6 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Addrinfo at index 1 4212s 4212s Socket#recvfrom using IPv6 using a bound socket with data available the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses PF_INET as the protocol family 4212s - uses the IP address of the client 4212s - uses the port of the client 4212s 4212s Socket#sockaddr_in 4212s - resolves the service name to a port 4212s 4212s Socket#sockaddr_in using an IPv4 address 4212s - returns a String of 16 bytes 4212s 4212s Socket#sockaddr_in using an IPv6 address 4212s - returns a String of 28 bytes 4212s 4212s Socket#sockaddr_un 4212s - should be idempotent 4212s - packs and unpacks 4212s - handles correctly paths with multibyte chars 4212s - returns a String of 110 bytes 4212s - raises ArgumentError for paths that are too long 4212s 4212s Socket 4212s - inherits from BasicSocket and IO 4212s 4212s The socket class hierarchy 4212s - has an IPSocket in parallel to Socket 4212s - has TCPSocket and UDPSocket subclasses of IPSocket 4212s - has a UNIXSocket in parallel to Socket 4212s 4212s Server class hierarchy 4212s - contains UNIXServer 4212s 4212s Socket.socketpair 4212s - ensures the returned sockets are connected 4212s - responses with array of two sockets 4212s - accepts a custom protocol as an Integer as the 3rd argument 4212s - connects the returned Socket objects 4212s 4212s Socket.socketpair using an Integer as the 1st and 2nd argument 4212s - returns two Socket objects 4212s 4212s Socket.socketpair using a Symbol as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket.socketpair using a String as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket.socketpair using an object that responds to #to_str as the 1st and 2nd argument 4212s - returns two Socket objects 4212s - raises TypeError when #to_str does not return a String 4212s - raises SocketError for an unknown address family 4212s - raises SocketError for an unknown socket type 4212s 4212s Socket.tcp_server_loop when no connections are available 4212s - blocks the caller 4212s 4212s Socket.tcp_server_loop when a connection is available 4212s - yields a Socket and an Addrinfo 4212s 4212s Socket.tcp_server_sockets with a block 4212s - closes all sockets after the block returns 4212s 4212s Socket.udp_server_loop_on when no connections are available 4212s - blocks the caller 4212s 4212s Socket.unix when no block is given 4212s - returns a Socket 4212s 4212s Socket.unix when a block is given 4212s - yields a Socket 4212s - closes the Socket when the block returns 4212s 4212s Socket.unpack_sockaddr_in 4212s - decodes the host name and port number of a packed sockaddr_in 4212s - gets the hostname and port number from a passed Addrinfo 4212s - raises an ArgumentError when the sin_family is not AF_INET 4212s - raises an ArgumentError when passed addrinfo is not AF_INET/AF_INET6 4212s 4212s Socket.unpack_sockaddr_in using an IPv4 address 4212s - returns an Array containing the port and IP address 4212s 4212s Socket.unpack_sockaddr_in using an IPv6 address 4212s - returns an Array containing the port and IP address 4212s 4212s Socket.unpack_sockaddr_un 4212s - decodes sockaddr to unix path 4212s - returns unix path from a passed Addrinfo 4212s - raises an ArgumentError when the sa_family is not AF_UNIX 4212s - raises an ArgumentError when passed addrinfo is not AF_UNIX 4212s 4212s Socket::TCPServer.accept_nonblock 4212s - accepts non blocking connections 4212s - raises an IOError if the socket is closed 4212s 4212s Socket::TCPServer.accept_nonblock without a connected client 4212s - raises error 4212s - returns :wait_readable in exceptionless mode 4212s 4212s TCPServer#accept_nonblock using IPv4 without a connected client 4212s - raises IO::WaitReadable 4212s 4212s TCPServer#accept_nonblock using IPv4 with a connected client 4212s - returns a TCPSocket 4212s 4212s TCPServer#accept_nonblock using IPv6 without a connected client 4212s - raises IO::WaitReadable 4212s 4212s TCPServer#accept_nonblock using IPv6 with a connected client 4212s - returns a TCPSocket 4212s 4212s TCPServer#accept 4212s - accepts a connection and returns a TCPSocket 4212s - can be interrupted by Thread#kill 4212s - can be interrupted by Thread#raise 4212s - raises an IOError if the socket is closed 4212s 4212s TCPServer#accept using IPv4 without a connected client 4212s - blocks the caller 4212s 4212s TCPServer#accept using IPv4 with a connected client 4212s - returns a TCPSocket 4212s - returns a TCPSocket which is set to close on exec 4212s 4212s TCPServer#accept using IPv6 without a connected client 4212s - blocks the caller 4212s 4212s TCPServer#accept using IPv6 with a connected client 4212s - returns a TCPSocket 4212s - returns a TCPSocket which is set to close on exec 4212s 4212s TCPServer#gets 4212s - raises Errno::ENOTCONN on gets 4212s 4212s TCPServer#initialize with a single Integer argument 4212s - sets the port to the given argument 4212s - sets the hostname to 0.0.0.0 or :: 4212s - sets the socket to binmode 4212s 4212s TCPServer#initialize with a single String argument containing a numeric value 4212s - sets the port to the given argument 4212s - sets the hostname to 0.0.0.0 or :: 4212s 4212s TCPServer#initialize with a single String argument containing a non numeric value 4212s - raises SocketError 4212s 4212s TCPServer#initialize with a String and an Integer using IPv4 4212s - sets the port to the given port argument 4212s - sets the hostname to the given host argument 4212s 4212s TCPServer#initialize with a String and an Integer using IPv6 4212s - sets the port to the given port argument 4212s - sets the hostname to the given host argument 4212s 4212s TCPServer#initialize with a String and a custom object 4212s - sets the port to the given port argument 4212s - sets the hostname to the given host argument 4212s 4212s TCPServer#listen using IPv4 4212s - returns 0 4212s 4212s TCPServer#listen using IPv6 4212s - returns 0 4212s 4212s TCPServer.new 4212s - binds to a host and a port 4212s - binds to localhost and a port with either IPv4 or IPv6 4212s - coerces port to string, then determines port from that number or service name 4212s - has a single argument form and treats it as a port number 4212s - coerces port to a string when it is the only argument 4212s - does not use the given block and warns to use TCPServer::open 4212s - raises Errno::EADDRNOTAVAIL when the address is unknown 4212s - raises Errno::EADDRINUSE when address is already in use 4212s - sets SO_REUSEADDR on the resulting server 4212s 4212s TCPServer#sysaccept 4212s - blocks if no connections 4212s - returns file descriptor of an accepted connection 4212s 4212s TCPServer#sysaccept using IPv4 without a connected client 4212s - blocks the caller 4212s 4212s TCPServer#sysaccept using IPv6 without a connected client 4212s - blocks the caller 4212s 4212s TCPSocket#gethostbyname 4212s - returns an array elements of information on the hostname 4212s - returns the canonical name as first value 4212s - returns the address type as the third value 4212s - returns the IP address as the fourth value 4212s - returns any aliases to the address as second value 4212s 4212s TCPSocket#gethostbyname 4212s - returns an Array 4212s 4212s TCPSocket#gethostbyname using a hostname the returned Array 4212s - includes the canonical name as the 1st value 4212s - includes an array of alternative hostnames as the 2nd value 4212s - includes the address family as the 3rd value 4212s - includes the IP addresses as all the remaining values 4212s 4212s TCPSocket#gethostbyname using IPv4 the returned Array 4212s - includes the IP address as the 1st value 4212s - includes an empty list of aliases as the 2nd value 4212s - includes the address family as the 3rd value 4212s - includes the IP address as the 4th value 4212s 4212s TCPSocket#gethostbyname using IPv6 the returned Array 4212s - includes an empty list of aliases as the 2nd value 4212s - includes the address family as the 3rd value 4212s 4212s TCPSocket#initialize 4212s - requires a hostname and a port as arguments 4212s - refuses the connection when there is no server to connect to 4212s - raises Errno::ETIMEDOUT with :connect_timeout when no server is listening on the given address 4212s 4212s TCPSocket#initialize with a running server 4212s - silently ignores 'nil' as the third parameter 4212s - connects to a listening server with host and port 4212s - connects to a server when passed local_host argument 4212s - connects to a server when passed local_host and local_port arguments 4212s - has an address once it has connected to a listening server 4212s - connects to a server when passed connect_timeout argument 4212s 4212s TCPSocket#initialize with a running server 4212s - does not use the given block and warns to use TCPSocket::open 4212s 4212s TCPSocket#initialize using IPv4 when no server is listening on the given address 4212s - raises Errno::ECONNREFUSED 4212s 4212s TCPSocket#initialize using IPv4 when a server is listening on the given address 4212s - returns a TCPSocket when using an Integer as the port 4212s - returns a TCPSocket when using a String as the port 4212s - raises SocketError when the port number is a non numeric String 4212s - set the socket to binmode 4212s - connects to the right address 4212s - creates a socket which is set to close on exec 4212s 4212s TCPSocket#initialize using IPv4 when a server is listening on the given address using a local address and service 4212s - binds the client socket to the local address and service 4212s 4212s TCPSocket#initialize using IPv6 when no server is listening on the given address 4212s - raises Errno::ECONNREFUSED 4212s 4212s TCPSocket#initialize using IPv6 when a server is listening on the given address 4212s - returns a TCPSocket when using an Integer as the port 4212s - returns a TCPSocket when using a String as the port 4212s - raises SocketError when the port number is a non numeric String 4212s - set the socket to binmode 4212s - connects to the right address 4212s - creates a socket which is set to close on exec 4212s 4212s TCPSocket#initialize using IPv6 when a server is listening on the given address using a local address and service 4212s - binds the client socket to the local address and service 4212s 4212s TCPSocket#local_address using IPv4 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s TCPSocket#local_address using IPv4 using an explicit hostname the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses PF_INET as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses a randomly assigned local port 4212s 4212s TCPSocket#local_address using IPv4 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s TCPSocket#local_address using IPv6 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s TCPSocket#local_address using IPv6 using an explicit hostname the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses PF_INET as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses a randomly assigned local port 4212s 4212s TCPSocket#local_address using IPv6 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s TCPSocket.open 4212s - requires a hostname and a port as arguments 4212s - refuses the connection when there is no server to connect to 4212s - raises Errno::ETIMEDOUT with :connect_timeout when no server is listening on the given address 4212s 4212s TCPSocket.open with a running server 4212s - silently ignores 'nil' as the third parameter 4212s - connects to a listening server with host and port 4212s - connects to a server when passed local_host argument 4212s - connects to a server when passed local_host and local_port arguments 4212s - has an address once it has connected to a listening server 4212s - connects to a server when passed connect_timeout argument 4212s 4212s TCPSocket partial closability 4212s - if the write end is closed then the other side can read past EOF without blocking 4212s - closing the write end ensures that the other side can read until EOF 4212s 4212s TCPSocket#recv_nonblock 4212s - returns a String read from the socket 4212s - writes the read to a buffer from the socket 4212s - returns :wait_readable in exceptionless mode 4212s 4212s TCPSocket#recv using IPv4 4212s - returns the message data 4212s 4212s TCPSocket#recv using IPv6 4212s - returns the message data 4212s 4212s TCPSocket#remote_address using IPv4 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s TCPSocket#remote_address using IPv4 using an explicit hostname the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses PF_INET as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s 4212s TCPSocket#remote_address using IPv4 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s TCPSocket#remote_address using IPv6 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s TCPSocket#remote_address using IPv6 using an explicit hostname the returned Addrinfo 4212s - uses AF_INET as the address family 4212s - uses PF_INET as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s 4212s TCPSocket#remote_address using IPv6 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s TCPSocket#setsockopt using constants 4212s - sets the TCP nodelay to 1 4212s 4212s UDPSocket#bind 4212s - binds the socket to a port 4212s - raises Errno::EINVAL when already bound 4212s - receives a hostname and a port 4212s - binds to INADDR_ANY if the hostname is empty 4212s 4212s UDPSocket#bind using IPv4 4212s - binds to an address and port 4212s - binds to an address and port using String arguments 4212s - can receive data after being bound to an address 4212s 4212s UDPSocket#bind using IPv6 4212s - binds to an address and port 4212s - binds to an address and port using String arguments 4212s - can receive data after being bound to an address 4212s 4212s UDPSocket#connect using IPv4 4212s - connects to an address even when it is not used 4212s - can send data after connecting 4212s 4212s UDPSocket#connect using IPv6 4212s - connects to an address even when it is not used 4212s - can send data after connecting 4212s 4212s UDPSocket#initialize 4212s - initializes a new UDPSocket 4212s - initializes a new UDPSocket using an Integer 4212s - initializes a new UDPSocket using a Symbol 4212s - initializes a new UDPSocket using a String 4212s - sets the socket to binmode 4212s - sets the socket to close on exec 4212s - raises Errno::EAFNOSUPPORT or Errno::EPROTONOSUPPORT when given an invalid address family 4212s 4212s UDPSocket#inspect 4212s - returns a String with the fd, family, address and port 4212s 4212s UDPSocket#local_address using IPv4 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s UDPSocket#local_address using IPv4 using an explicit hostname the returned Addrinfo 4212s - uses the correct address family 4212s - uses the correct protocol family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses the correct IP address 4212s - uses a randomly assigned local port 4212s 4212s UDPSocket#local_address using IPv4 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s UDPSocket#local_address using IPv6 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s UDPSocket#local_address using IPv6 using an explicit hostname the returned Addrinfo 4212s - uses the correct address family 4212s - uses the correct protocol family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses the correct IP address 4212s - uses a randomly assigned local port 4212s 4212s UDPSocket#local_address using IPv6 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s UDPSocket.new 4212s - without arguments 4212s - using Integer argument 4212s - using Symbol argument 4212s - using String argument 4212s - does not use the given block and warns to use UDPSocket::open 4212s - raises Errno::EAFNOSUPPORT or Errno::EPROTONOSUPPORT if unsupported family passed 4212s 4212s UDPSocket.open 4212s - allows calls to open without arguments 4212s 4212s UDPSocket#recvfrom_nonblock using IPv4 using an unbound socket 4212s - raises IO::WaitReadable 4212s 4212s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket without any data available 4212s - raises IO::WaitReadable 4212s - returns :wait_readable with exception: false 4212s 4212s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available 4212s - returns an Array containing the data and an Array 4212s - writes the data to the buffer when one is present 4212s 4212s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Array at index 1 4212s 4212s UDPSocket#recvfrom_nonblock using IPv4 using a bound socket with data available the returned address Array 4212s - uses the correct address family 4212s - uses the port of the client 4212s - uses the hostname of the client 4212s - uses the IP address of the client 4212s 4212s UDPSocket#recvfrom_nonblock using IPv6 using an unbound socket 4212s - raises IO::WaitReadable 4212s 4212s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket without any data available 4212s - raises IO::WaitReadable 4212s - returns :wait_readable with exception: false 4212s 4212s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available 4212s - returns an Array containing the data and an Array 4212s - writes the data to the buffer when one is present 4212s 4212s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned Array 4212s - contains the data at index 0 4212s - contains an Array at index 1 4212s 4212s UDPSocket#recvfrom_nonblock using IPv6 using a bound socket with data available the returned address Array 4212s - uses the correct address family 4212s - uses the port of the client 4212s 4212s UDPSocket#remote_address using IPv4 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s UDPSocket#remote_address using IPv4 using an explicit hostname the returned Addrinfo 4212s - uses the correct address family 4212s - uses the correct protocol family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s 4212s UDPSocket#remote_address using IPv4 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s UDPSocket#remote_address using IPv6 using an explicit hostname 4212s - returns an Addrinfo 4212s 4212s UDPSocket#remote_address using IPv6 using an explicit hostname the returned Addrinfo 4212s - uses the correct address family 4212s - uses the correct protocol family 4212s - uses SOCK_DGRAM as the socket type 4212s - uses the correct IP address 4212s - uses the correct port 4212s 4212s UDPSocket#remote_address using IPv6 using an implicit hostname the returned Addrinfo 4212s - uses the correct IP address 4212s 4212s UDPSocket#send 4212s - sends data in ad hoc mode 4212s - sends data in connection mode 4212s - raises EMSGSIZE if data is too too big 4212s 4212s UDPSocket#send using IPv4 using a disconnected socket without a destination address 4212s - raises Errno::EDESTADDRREQ 4212s 4212s UDPSocket#send using IPv4 using a disconnected socket with a destination address as separate arguments 4212s - returns the amount of sent bytes 4212s - does not persist the connection after sending data 4212s 4212s UDPSocket#send using IPv4 using a disconnected socket with a destination address as a single String argument 4212s - returns the amount of sent bytes 4212s 4212s UDPSocket#send using IPv4 using a connected socket without an explicit destination address 4212s - returns the amount of bytes written 4212s 4212s UDPSocket#send using IPv6 using a disconnected socket without a destination address 4212s - raises Errno::EDESTADDRREQ 4212s 4212s UDPSocket#send using IPv6 using a disconnected socket with a destination address as separate arguments 4212s - returns the amount of sent bytes 4212s - does not persist the connection after sending data 4212s 4212s UDPSocket#send using IPv6 using a disconnected socket with a destination address as a single String argument 4212s - returns the amount of sent bytes 4212s 4212s UDPSocket#send using IPv6 using a connected socket without an explicit destination address 4212s - returns the amount of bytes written 4212s 4212s UDPSocket#write 4212s - raises EMSGSIZE if msg is too long 4212s 4212s UNIXServer#accept_nonblock 4212s - accepts a connection in a non-blocking way 4212s - returns a UNIXSocket 4212s - returns :wait_readable in exceptionless mode 4212s 4212s UNIXServer#accept_nonblock without a client 4212s - raises IO::WaitReadable 4212s 4212s UNIXServer#accept_nonblock with a client without any data 4212s - returns a UNIXSocket 4212s 4212s UNIXServer#accept_nonblock with a client with data available 4212s - returns a UNIXSocket 4212s 4212s UNIXServer#accept_nonblock with a client with data available the returned UNIXSocket 4212s - can read the data written 4212s 4212s UNIXServer#accept 4212s - accepts what is written by the client 4212s - can be interrupted by Thread#kill 4212s - can be interrupted by Thread#raise 4212s 4212s UNIXServer#accept without a client 4212s - blocks the calling thread 4212s 4212s UNIXServer#accept with a client without any data 4212s - returns a UNIXSocket 4212s 4212s UNIXServer#accept with a client with data available 4212s - returns a UNIXSocket 4212s 4212s UNIXServer#accept with a client with data available the returned UNIXSocket 4212s - can read the data written 4212s - is set to close on exec 4212s 4212s UNIXServer#initialize 4212s - returns a new UNIXServer 4212s - raises Errno::EADDRINUSE when the socket is already in use 4212s 4212s UNIXServer#listen 4212s - returns 0 4212s 4212s UNIXServer.new 4212s - creates a new UNIXServer 4212s - does not use the given block and warns to use UNIXServer::open 4212s 4212s UNIXServer.open 4212s - creates a new UNIXServer 4212s - yields the new UNIXServer object to the block, if given 4212s 4212s UNIXServer#sysaccept without a client 4212s - blocks the calling thread 4212s 4212s UNIXServer#sysaccept with a client without any data 4212s - returns an Integer 4212s 4212s UNIXServer#sysaccept with a client with data available 4212s - returns an Integer 4212s 4212s UNIXSocket#addr 4212s - returns an array 4212s - returns the address family of this socket in an array 4212s - returns the path of the socket in an array if it's a server 4212s - returns an empty string for path if it's a client 4212s 4212s UNIXSocket#initialize using a non existing path 4212s - raises Errno::ENOENT 4212s 4212s UNIXSocket#initialize using an existing socket path 4212s - returns a new UNIXSocket 4212s - sets the socket path to an empty String 4212s - sets the socket to close on exec 4212s 4212s UNIXSocket#inspect 4212s - returns sockets fd for unnamed sockets 4212s 4212s UNIXSocket#local_address 4212s - returns an Addrinfo 4212s 4212s UNIXSocket#local_address the returned Addrinfo 4212s - uses AF_UNIX as the address family 4212s - uses PF_UNIX as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses an empty socket path 4212s - uses 0 as the protocol 4212s 4212s UNIXSocket#local_address with a UNIX socket pair 4212s - returns an Addrinfo 4212s 4212s UNIXSocket#local_address with a UNIX socket pair the returned Addrinfo 4212s - uses AF_UNIX as the address family 4212s - uses PF_UNIX as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - raises SocketError for #ip_address 4212s - raises SocketError for #ip_port 4212s - uses 0 as the protocol 4212s 4212s UNIXSocket.new 4212s - opens a unix socket on the specified file 4212s - does not use the given block and warns to use UNIXSocket::open 4212s 4212s UNIXSocket.open 4212s - opens a unix socket on the specified file 4212s 4212s UNIXSocket.open 4212s - opens a unix socket on the specified file and yields it to the block 4212s 4212s UNIXSocket.pair 4212s - if the write end is closed then the other side can read past EOF without blocking 4212s - closing the write end ensures that the other side can read until EOF 4212s - returns a pair of connected sockets 4212s - returns sockets with no name 4212s - returns sockets with no address 4212s - returns sockets with no peeraddr 4212s 4212s UNIXSocket partial closability 4212s - if the write end is closed then the other side can read past EOF without blocking 4212s - closing the write end ensures that the other side can read until EOF 4212s 4212s UNIXSocket#path 4212s - returns the path of the socket if it's a server 4212s - returns an empty string for path if it's a client 4212s 4212s UNIXSocket#peeraddr 4212s - returns the address family and path of the server end of the connection 4212s - raises an error in server sockets 4212s 4212s UNIXSocket#recv_io 4212s - reads an IO object across the socket 4212s - takes an optional class to use 4212s 4212s UNIXSocket#recv_io without a custom class 4212s - returns an IO 4212s 4212s UNIXSocket#recv_io with a custom class 4212s - returns an instance of the custom class 4212s 4212s UNIXSocket#recv_io with a custom mode 4212s - opens the IO using the given mode 4212s 4212s UNIXSocket#recvfrom 4212s - receives len bytes from sock 4212s - returns an array with data and information on the sender 4212s 4212s UNIXSocket#recvfrom using a socket pair 4212s - returns an Array containing the data and address information 4212s 4212s UNIXSocket#remote_address 4212s - returns an Addrinfo 4212s 4212s UNIXSocket#remote_address the returned Addrinfo 4212s - uses AF_UNIX as the address family 4212s - uses PF_UNIX as the protocol family 4212s - uses SOCK_STREAM as the socket type 4212s - uses the correct socket path 4212s - uses 0 as the protocol 4212s 4212s UNIXSocket#send_io 4212s - sends the fd for an IO object across the socket 4212s 4212s UNIXSocket#send_io 4212s - sends an IO object 4212s 4212s UNIXSocket.socketpair 4212s - returns two UNIXSockets 4212s - connects the sockets to each other 4212s - sets the socket paths to empty Strings 4212s - sets the socket addresses to empty Strings 4212s - sets the socket peer addresses to empty Strings 4212s 4212s StringIO#<< when passed [Object] 4212s - returns self 4212s - writes the passed argument onto self 4212s - writes the passed argument at the current position 4212s - pads self with \000 when the current position is after the end 4212s - updates self's position 4212s - tries to convert the passed argument to a String using #to_s 4212s 4212s StringIO#<< when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#<< when in append mode 4212s - appends the passed argument to the end of self, ignoring current position 4212s - correctly updates self's position 4212s 4212s StringIO#binmode 4212s - returns self 4212s - changes external encoding to BINARY 4212s - does not set internal encoding 4212s 4212s StringIO#close_read 4212s - returns nil 4212s - prevents further reading 4212s - allows further writing 4212s - raises an IOError when in write-only mode 4212s 4212s StringIO#close 4212s - returns nil 4212s - prevents further reading and/or writing 4212s - does not raise anything when self was already closed 4212s 4212s StringIO#close_write 4212s - returns nil 4212s - prevents further writing 4212s - allows further reading 4212s - raises an IOError when in read-only mode 4212s 4212s StringIO#closed_read? 4212s - returns true if self is not readable 4212s 4212s StringIO#closed? 4212s - returns true if self is completely closed 4212s 4212s StringIO#closed_write? 4212s - returns true if self is not writable 4212s 4212s StringIO#each_byte 4212s - yields each character code in turn 4212s - updates the position before each yield 4212s - does not yield if the current position is out of bounds 4212s - returns self 4212s - returns an Enumerator when passed no block 4212s 4212s StringIO#each_byte when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#each_char 4212s - yields each character code in turn 4212s - returns self 4212s - returns an Enumerator when passed no block 4212s 4212s StringIO#each_char when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#each_codepoint 4212s - returns an Enumerator 4212s - yields each codepoint code in turn 4212s - yields each codepoint starting from the current position 4212s - raises an error if reading invalid sequence 4212s - raises an IOError if not readable 4212s - calls the given block 4212s - returns self 4212s 4212s StringIO#each_line when passed a separator 4212s - uses the passed argument as the line separator 4212s - does not change $_ 4212s - returns self 4212s - tries to convert the passed separator to a String using #to_str 4212s - yields self's content starting from the current position when the passed separator is nil 4212s 4212s StringIO#each_line when passed no arguments 4212s - yields each line to the passed block 4212s - yields each line starting from the current position 4212s - does not change $_ 4212s - uses $/ as the default line separator 4212s - returns self 4212s - returns an Enumerator when passed no block 4212s 4212s StringIO#each_line when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#each_line when passed chomp 4212s - yields each line with removed newline characters to the passed block 4212s - returns each line with removed newline characters when called without block 4212s 4212s StringIO#each_line when passed limit 4212s - returns the data read until the limit is met 4212s 4212s StringIO#each when passed a separator 4212s - uses the passed argument as the line separator 4212s - does not change $_ 4212s - returns self 4212s - tries to convert the passed separator to a String using #to_str 4212s - yields self's content starting from the current position when the passed separator is nil 4212s 4212s StringIO#each when passed no arguments 4212s - yields each line to the passed block 4212s - yields each line starting from the current position 4212s - does not change $_ 4212s - uses $/ as the default line separator 4212s - returns self 4212s - returns an Enumerator when passed no block 4212s 4212s StringIO#each when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#each when passed chomp 4212s - yields each line with removed newline characters to the passed block 4212s - returns each line with removed newline characters when called without block 4212s 4212s StringIO#each when passed chomp 4212s - yields each line with removed separator to the passed block 4212s - returns each line with removed separator when called without block 4212s 4212s StringIO#each when passed limit 4212s - returns the data read until the limit is met 4212s 4212s StringIO#eof? 4212s - returns true when self's position is greater than or equal to self's size 4212s - returns false when self's position is less than self's size 4212s 4212s StringIO#eof 4212s - returns true when self's position is greater than or equal to self's size 4212s - returns false when self's position is less than self's size 4212s 4212s StringIO#external_encoding 4212s - gets the encoding of the underlying String 4212s - changes to match string if string's encoding is changed 4212s - does not set the encoding of its buffer string if the string is frozen 4212s 4212s StringIO#fcntl 4212s - raises a NotImplementedError 4212s 4212s StringIO#fileno 4212s - returns nil 4212s 4212s StringIO#flush 4212s - returns self 4212s 4212s StringIO#fsync 4212s - returns zero 4212s 4212s StringIO#getbyte 4212s - increases self's position by one 4212s - returns nil when called at the end of self 4212s - does not increase self's position when called at the end of file 4212s - returns the 8-bit byte at the current position 4212s 4212s StringIO#getbyte when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#getc 4212s - increases self's position by one 4212s - returns nil when called at the end of self 4212s - does not increase self's position when called at the end of file 4212s - returns the character at the current position 4212s 4212s StringIO#getc when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#getch 4212s - increases self's position by one 4212s - returns nil when called at the end of self 4212s - does not increase self's position when called at the end of file 4212s - returns the character at the current position 4212s - increments #pos by the byte size of the character in multibyte strings 4212s - returns nil at the end of the string 4212s 4212s StringIO#getch StringIO#getch when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#getpass 4212s - is defined by io/console 4212s 4212s StringIO#gets when passed [separator] 4212s - returns the data read till the next occurrence of the passed separator 4212s - sets $_ to the read content 4212s - accepts string as separator 4212s - updates self's lineno by one 4212s - returns the next paragraph when the passed separator is an empty String 4212s - returns the remaining content starting at the current position when passed nil 4212s - tries to convert the passed separator to a String using #to_str 4212s 4212s StringIO#gets when passed no argument 4212s - returns the data read till the next occurrence of $/ or till eof 4212s - sets $_ to the read content 4212s - updates self's position 4212s - updates self's lineno 4212s - returns nil if self is at the end 4212s 4212s StringIO#gets when passed [limit] 4212s - returns the data read until the limit is met 4212s - sets $_ to the read content 4212s - updates self's lineno by one 4212s - tries to convert the passed limit to an Integer using #to_int 4212s - returns a blank string when passed a limit of 0 4212s - ignores it when passed a negative limit 4212s 4212s StringIO#gets when passed [separator] and [limit] 4212s - returns the data read until the limit is consumed or the separator is met 4212s - sets $_ to the read content 4212s - updates self's lineno by one 4212s - tries to convert the passed separator to a String using #to_str 4212s - does not raise TypeError if passed separator is nil 4212s - tries to convert the passed limit to an Integer using #to_int 4212s 4212s StringIO#gets when in write-only mode 4212s - raises an IOError 4212s 4212s StringIO#gets when passed [chomp] 4212s - returns the data read without a trailing newline character 4212s 4212s StringIO#initialize when passed [Object, mode] 4212s - uses the passed Object as the StringIO backend 4212s - sets the mode based on the passed mode 4212s - allows passing the mode as an Integer 4212s - raises a FrozenError when passed a frozen String in truncate mode as StringIO backend 4212s - tries to convert the passed mode to a String using #to_str 4212s - raises an Errno::EACCES error when passed a frozen string with a write-mode 4212s 4212s StringIO#initialize when passed [Object] 4212s - uses the passed Object as the StringIO backend 4212s - sets the mode to read-write 4212s - tries to convert the passed Object to a String using #to_str 4212s - automatically sets the mode to read-only when passed a frozen string 4212s 4212s StringIO#initialize when passed keyword arguments 4212s - sets the mode based on the passed :mode option 4212s 4212s StringIO#initialize when passed keyword arguments and error happens 4212s - raises an error if passed encodings two ways 4212s - raises an error if passed matching binary/text mode two ways 4212s - raises an error if passed conflicting binary/text mode two ways 4212s - raises an error when trying to set both binmode and textmode 4212s 4212s StringIO#initialize when passed no arguments 4212s - is private 4212s - sets the mode to read-write 4212s - uses an empty String as the StringIO backend 4212s 4212s StringIO#initialize sets 4212s - the encoding to Encoding.default_external when passed no arguments 4212s - the encoding to the encoding of the String when passed a String 4212s - the #external_encoding to the encoding of the String when passed a String 4212s 4212s StringIO#inspect 4212s - returns the same as #to_s 4212s - does not include the contents 4212s - uses the regular Object#inspect without any instance variable 4212s 4212s StringIO#internal_encoding 4212s - returns nil 4212s 4212s StringIO#isatty 4212s - returns false 4212s 4212s StringIO#length 4212s - returns the length of the wrapped string 4212s 4212s StringIO#lineno 4212s - returns the number of lines read 4212s 4212s StringIO#lineno= 4212s - sets the current line number, but has no impact on the position 4212s 4212s StringIO.new 4212s - does not use the given block and warns to use StringIO::open 4212s 4212s StringIO.open when passed [Object, mode] 4212s - uses the passed Object as the StringIO backend 4212s - returns the blocks return value when yielding 4212s - yields self to the passed block 4212s - closes self after yielding 4212s - even closes self when an exception is raised while yielding 4212s - sets self's string to nil after yielding 4212s - even sets self's string to nil when an exception is raised while yielding 4212s - sets the mode based on the passed mode 4212s - allows passing the mode as an Integer 4212s - raises a FrozenError when passed a frozen String in truncate mode as StringIO backend 4212s - tries to convert the passed mode to a String using #to_str 4212s - raises an Errno::EACCES error when passed a frozen string with a write-mode 4212s 4212s StringIO.open when passed [Object] 4212s - uses the passed Object as the StringIO backend 4212s - yields self to the passed block 4212s - sets the mode to read-write (r+) 4212s - tries to convert the passed Object to a String using #to_str 4212s - automatically sets the mode to read-only when passed a frozen string 4212s 4212s StringIO.open when passed no arguments 4212s - yields self to the passed block 4212s - sets the mode to read-write (r+) 4212s - uses an empty String as the StringIO backend 4212s 4212s StringIO#path 4212s - is not defined 4212s 4212s StringIO#pid 4212s - returns nil 4212s 4212s StringIO#pos 4212s - returns the current byte offset 4212s 4212s StringIO#pos= 4212s - updates the current byte offset 4212s - raises an EINVAL if given a negative argument 4212s - updates the current byte offset after reaching EOF 4212s 4212s StringIO#print 4212s - prints $_ when passed no arguments 4212s - prints the passed arguments to self 4212s - tries to convert the passed Object to a String using #to_s 4212s - returns nil 4212s - pads self with \000 when the current position is after the end 4212s - honors the output record separator global 4212s - updates the current position 4212s - correctly updates the current position when honoring the output record separator global 4212s 4212s StringIO#print when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringIO#print when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#printf 4212s - returns nil 4212s - pads self with \000 when the current position is after the end 4212s - performs format conversion 4212s - updates the current position 4212s 4212s StringIO#printf formatting 4212s - does not raise error when passed more arguments than needed 4212s 4212s StringIO#printf formatting integer formats 4212s - converts argument into Integer with to_int 4212s - converts argument into Integer with to_i if to_int isn't available 4212s - converts String argument with Kernel#Integer 4212s - raises TypeError exception if cannot convert to Integer 4212s 4212s StringIO#printf formatting integer formats b 4212s - converts argument as a binary number 4212s - displays negative number as a two's complement prefixed with '..1' 4212s - collapse negative number representation if it equals 1 4212s 4212s StringIO#printf formatting integer formats B 4212s - converts argument as a binary number 4212s - displays negative number as a two's complement prefixed with '..1' 4212s - collapse negative number representation if it equals 1 4212s 4212s StringIO#printf formatting integer formats d 4212s - converts argument as a decimal number 4212s - works well with large numbers 4212s 4212s StringIO#printf formatting integer formats i 4212s - converts argument as a decimal number 4212s - works well with large numbers 4212s 4212s StringIO#printf formatting integer formats u 4212s - converts argument as a decimal number 4212s - works well with large numbers 4212s 4212s StringIO#printf formatting integer formats o 4212s - converts argument as an octal number 4212s - displays negative number as a two's complement prefixed with '..7' 4212s - collapse negative number representation if it equals 7 4212s 4212s StringIO#printf formatting integer formats x 4212s - converts argument as a hexadecimal number 4212s - displays negative number as a two's complement prefixed with '..f' 4212s - collapse negative number representation if it equals f 4212s 4212s StringIO#printf formatting integer formats X 4212s - converts argument as a hexadecimal number with uppercase letters 4212s - displays negative number as a two's complement prefixed with '..f' 4212s - collapse negative number representation if it equals F 4212s 4212s StringIO#printf formatting float formats 4212s - converts argument into Float 4212s - raises TypeError exception if cannot convert to Float 4212s 4212s StringIO#printf formatting float formats e 4212s - converts argument into exponential notation [-]d.dddddde[+-]dd 4212s - cuts excessive digits and keeps only 6 ones 4212s - rounds the last significant digit to the closest one 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats E 4212s - converts argument into exponential notation [-]d.dddddde[+-]dd 4212s - cuts excessive digits and keeps only 6 ones 4212s - rounds the last significant digit to the closest one 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats f 4212s - converts floating point argument as [-]ddd.dddddd 4212s - cuts excessive digits and keeps only 6 ones 4212s - rounds the last significant digit to the closest one 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats g 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats g the exponent is less than -4 4212s - converts a floating point number using exponential form 4212s 4212s StringIO#printf formatting float formats g the exponent is greater than or equal to the precision (6 by default) 4212s - converts a floating point number using exponential form 4212s 4212s StringIO#printf formatting float formats g otherwise 4212s - converts a floating point number in dd.dddd form 4212s - cuts excessive digits in fractional part and keeps only 4 ones 4212s - rounds the last significant digit to the closest one in fractional part 4212s - cuts fraction part to have only 6 digits at all 4212s 4212s StringIO#printf formatting float formats G 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats G the exponent is less than -4 4212s - converts a floating point number using exponential form 4212s 4212s StringIO#printf formatting float formats G the exponent is greater than or equal to the precision (6 by default) 4212s - converts a floating point number using exponential form 4212s 4212s StringIO#printf formatting float formats G otherwise 4212s - converts a floating point number in dd.dddd form 4212s - cuts excessive digits in fractional part and keeps only 4 ones 4212s - rounds the last significant digit to the closest one in fractional part 4212s - cuts fraction part to have only 6 digits at all 4212s 4212s StringIO#printf formatting float formats a 4212s - converts floating point argument as [-]0xh.hhhhp[+-]dd 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting float formats A 4212s - converts floating point argument as [-]0xh.hhhhp[+-]dd and use uppercase X and P 4212s - displays Float::INFINITY as Inf 4212s - displays Float::NAN as NaN 4212s 4212s StringIO#printf formatting other formats c 4212s - displays character if argument is a numeric code of character 4212s - displays character if argument is a single character string 4212s - raises ArgumentError if argument is a string of several characters 4212s - raises ArgumentError if argument is an empty string 4212s - raises TypeError if argument is not String or Integer and cannot be converted to them 4212s - raises TypeError if argument is nil 4212s - tries to convert argument to String with to_str 4212s - tries to convert argument to Integer with to_int 4212s - raises TypeError if converting to String with to_str returns non-String 4212s - raises TypeError if converting to Integer with to_int returns non-Integer 4212s 4212s StringIO#printf formatting other formats p 4212s - displays argument.inspect value 4212s 4212s StringIO#printf formatting other formats s 4212s - substitute argument passes as a string 4212s - substitutes '' for nil 4212s - converts argument to string with to_s 4212s - does not try to convert with to_str 4212s - formats a partial substring without including omitted characters 4212s - formats string with precision 4212s - formats string with width 4212s - formats string with width and precision 4212s - formats nil with width 4212s - formats nil with precision 4212s - formats nil with width and precision 4212s - formats multibyte string with precision 4212s - preserves encoding of the format string 4212s 4212s StringIO#printf formatting other formats % 4212s - alone raises an ArgumentError 4212s - is escaped by % 4212s 4212s StringIO#printf formatting flags space applies to numeric formats bBdiouxXeEfgGaA 4212s - leaves a space at the start of non-negative numbers 4212s - does not leave a space at the start of negative numbers 4212s - prevents converting negative argument to two's complement form 4212s - treats several white spaces as one 4212s 4212s StringIO#printf formatting flags (digit)$ 4212s - specifies the absolute argument number for this field 4212s - raises exception if argument number is bigger than actual arguments list 4212s - ignores '-' sign 4212s - raises ArgumentError exception when absolute and relative argument numbers are mixed 4212s 4212s StringIO#printf formatting flags # applies to format o 4212s - increases the precision until the first digit will be `0' if it is not formatted as complements 4212s - does nothing for negative argument 4212s 4212s StringIO#printf formatting flags # applies to formats bBxX 4212s - prefixes the result with 0x, 0X, 0b and 0B respectively for non-zero argument 4212s - does nothing for zero argument 4212s 4212s StringIO#printf formatting flags # applies to formats aAeEfgG 4212s - forces a decimal point to be added, even if no digits follow 4212s - changes format from dd.dddd to exponential form for gG 4212s 4212s StringIO#printf formatting flags # applies to gG 4212s - does not remove trailing zeros 4212s 4212s StringIO#printf formatting flags + applies to numeric formats bBdiouxXaAeEfgG 4212s - adds a leading plus sign to non-negative numbers 4212s - does not use two's complement form for negative numbers for formats bBoxX 4212s 4212s StringIO#printf formatting flags - 4212s - left-justifies the result of conversion if width is specified 4212s 4212s StringIO#printf formatting flags 0 (zero) applies to numeric formats bBdiouxXaAeEfgG and width is specified 4212s - pads with zeros, not spaces 4212s - uses radix-1 when displays negative argument as a two's complement 4212s 4212s StringIO#printf formatting flags * 4212s - uses the previous argument as the field width 4212s - left-justifies the result if width is negative 4212s - uses the specified argument as the width if * is followed by a number and $ 4212s - left-justifies the result if specified with $ argument is negative 4212s - raises ArgumentError when is mixed with width 4212s 4212s StringIO#printf formatting width 4212s - specifies the minimum number of characters that will be written to the result 4212s - is ignored if argument's actual length is greater 4212s 4212s StringIO#printf formatting precision integer types 4212s - controls the number of decimal places displayed 4212s 4212s StringIO#printf formatting precision float types 4212s - controls the number of decimal places displayed in fraction part 4212s - does not affect G format 4212s 4212s StringIO#printf formatting precision string formats 4212s - determines the maximum number of characters to be copied from the string 4212s 4212s StringIO#printf formatting reference by name %s style 4212s - uses value passed in a hash argument 4212s - supports flags, width, precision and type 4212s - allows to place name in any position 4212s - cannot be mixed with unnamed style 4212s 4212s StringIO#printf formatting reference by name %{name} style 4212s - uses value passed in a hash argument 4212s - does not support type style 4212s - supports flags, width and precision 4212s - cannot be mixed with unnamed style 4212s - raises KeyError when there is no matching key 4212s - converts value to String with to_s 4212s 4212s StringIO#printf formatting faulty key 4212s - raises a KeyError 4212s - sets the Hash as the receiver of KeyError 4212s - sets the unmatched key as the key of KeyError 4212s 4212s StringIO#printf when in read-write mode 4212s - starts from the beginning 4212s - does not truncate existing string 4212s - correctly updates self's position 4212s 4212s StringIO#printf when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringIO#printf when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#putc when passed [String] 4212s - overwrites the character at the current position 4212s - only writes the first character from the passed String 4212s - returns the passed String 4212s - correctly updates the current position 4212s - handles concurrent writes correctly 4212s 4212s StringIO#putc when passed [Object] 4212s - it writes the passed Integer % 256 to self 4212s - pads self with \000 when the current position is after the end 4212s - tries to convert the passed argument to an Integer using #to_int 4212s - raises a TypeError when the passed argument can't be coerced to Integer 4212s 4212s StringIO#putc when in append mode 4212s - appends to the end of self 4212s 4212s StringIO#putc when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#puts when passed an Array 4212s - writes each element of the passed Array to self, separated by a newline 4212s - flattens nested Arrays 4212s - handles self-recursive arrays correctly 4212s - does not honor the global output record separator $\ 4212s - first tries to convert each Array element to an Array using #to_ary 4212s - then tries to convert each Array element to a String using #to_s 4212s - returns general object info if :to_s does not return a string 4212s 4212s StringIO#puts when passed 1 or more objects 4212s - does not honor the global output record separator $\ 4212s - does not put a \n after each Objects that end in a newline 4212s - first tries to convert each Object to an Array using #to_ary 4212s - then tries to convert each Object to a String using #to_s 4212s - prints a newline when passed an empty string 4212s - handles concurrent writes correctly 4212s 4212s StringIO#puts when passed no arguments 4212s - returns nil 4212s - prints a newline 4212s - does not honor the global output record separator $\ 4212s 4212s StringIO#puts when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringIO#puts when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#puts when passed an encoded string 4212s - stores the bytes unmodified 4212s 4212s StringIO#read_nonblock when passed length, buffer 4212s - returns the passed buffer String 4212s - reads length bytes and writes them to the buffer String 4212s - tries to convert the passed buffer Object to a String using #to_str 4212s - raises a TypeError when the passed buffer Object can't be converted to a String 4212s - raises a FrozenError error when passed a frozen String as buffer 4212s - accepts :exception option 4212s 4212s StringIO#read_nonblock when passed length 4212s - reads length bytes from the current position and returns them 4212s - reads at most the whole content 4212s - correctly updates the position 4212s - tries to convert the passed length to an Integer using #to_int 4212s - raises a TypeError when the passed length can't be converted to an Integer 4212s - raises a TypeError when the passed length is negative 4212s - returns a binary String 4212s - accepts :exception option 4212s 4212s StringIO#read_nonblock when passed nil 4212s - returns the remaining content from the current position 4212s - updates the current position 4212s 4212s StringIO#read_nonblock when passed length 4212s - returns an empty String when passed 0 and no data remains 4212s - raises an EOFError when passed length > 0 and no data remains 4212s 4212s StringIO#read_nonblock 4212s - accepts an exception option 4212s 4212s StringIO#read_nonblock when exception option is set to false when the end is reached 4212s - returns nil 4212s 4212s StringIO#read when passed length, buffer 4212s - returns the passed buffer String 4212s - reads length bytes and writes them to the buffer String 4212s - tries to convert the passed buffer Object to a String using #to_str 4212s - raises a TypeError when the passed buffer Object can't be converted to a String 4212s - raises a FrozenError error when passed a frozen String as buffer 4212s 4212s StringIO#read when passed [length] 4212s - reads length bytes from the current position and returns them 4212s - reads at most the whole content 4212s - correctly updates the position 4212s - tries to convert the passed length to an Integer using #to_int 4212s - raises a TypeError when the passed length can't be converted to an Integer 4212s - raises a TypeError when the passed length is negative 4212s - returns a binary String 4212s 4212s StringIO#read when passed no arguments 4212s - reads the whole content starting from the current position 4212s - correctly updates the current position 4212s - correctly update the current position in bytes when multi-byte characters are used 4212s - returns an empty string if at EOF 4212s 4212s StringIO#read when passed nil 4212s - returns the remaining content from the current position 4212s - updates the current position 4212s - returns an empty string if at EOF 4212s 4212s StringIO#read when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#read when passed [length] 4212s - returns nil when self's position is at the end 4212s - returns an empty String when length is 0 4212s 4212s StringIO#read when passed length and a buffer 4212s - reads [length] characters into the buffer 4212s 4212s StringIO#readbyte 4212s - correctly updates the current position 4212s - raises an EOFError when self is at the end 4212s - reads the next 8-bit byte from self's current position 4212s 4212s StringIO#readbyte when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#readchar 4212s - correctly updates the current position 4212s - raises an EOFError when self is at the end 4212s - reads the next 8-bit byte from self's current position 4212s 4212s StringIO#readchar when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#readline when passed [separator] 4212s - returns the data read till the next occurrence of the passed separator 4212s - sets $_ to the read content 4212s - updates self's lineno by one 4212s - returns the next paragraph when the passed separator is an empty String 4212s - returns the remaining content starting at the current position when passed nil 4212s - tries to convert the passed separator to a String using #to_str 4212s 4212s StringIO#readline when passed no argument 4212s - returns the data read till the next occurrence of $/ or till eof 4212s - sets $_ to the read content 4212s - updates self's position 4212s - updates self's lineno 4212s - raises an IOError if self is at the end 4212s 4212s StringIO#readline when in write-only mode 4212s - raises an IOError 4212s 4212s StringIO#readline when passed [chomp] 4212s - returns the data read without a trailing newline character 4212s 4212s StringIO#readline when passed [limit] 4212s - returns the data read until the limit is met 4212s - returns a blank string when passed a limit of 0 4212s - ignores it when the limit is negative 4212s 4212s StringIO#readlines when passed [separator] 4212s - returns an Array containing lines based on the passed separator 4212s - updates self's position based on the number of read bytes 4212s - updates self's lineno based on the number of read lines 4212s - does not change $_ 4212s - returns an Array containing all paragraphs when the passed separator is an empty String 4212s - returns the remaining content as one line starting at the current position when passed nil 4212s - tries to convert the passed separator to a String using #to_str 4212s 4212s StringIO#readlines when passed no argument 4212s - returns an Array containing lines based on $/ 4212s - updates self's position based on the number of read bytes 4212s - updates self's lineno based on the number of read lines 4212s - does not change $_ 4212s - returns an empty Array when self is at the end 4212s 4212s StringIO#readlines when in write-only mode 4212s - raises an IOError 4212s 4212s StringIO#readlines when passed [chomp] 4212s - returns the data read without a trailing newline character 4212s 4212s StringIO#readlines when passed [limit] 4212s - returns the data read until the limit is met 4212s - raises ArgumentError when limit is 0 4212s - ignores it when the limit is negative 4212s 4212s StringIO#readpartial 4212s - raises IOError on closed stream 4212s - reads at most the specified number of bytes 4212s - reads after ungetc with data in the buffer 4212s - reads after ungetc without data in the buffer 4212s - discards the existing buffer content upon successful read 4212s - raises EOFError on EOF 4212s - discards the existing buffer content upon error 4212s - raises IOError if the stream is closed 4212s - raises ArgumentError if the negative argument is provided 4212s - immediately returns an empty string if the length argument is 0 4212s 4212s StringIO#reopen when passed [Object, Integer] 4212s - reopens self with the passed Object in the passed mode 4212s - tries to convert the passed Object to a String using #to_str 4212s - raises a TypeError when the passed Object can't be converted to a String 4212s - raises an Errno::EACCES when trying to reopen self with a frozen String in write-mode 4212s - raises a FrozenError when trying to reopen self with a frozen String in truncate-mode 4212s - does not raise IOError when passed a frozen String in read-mode 4212s 4212s StringIO#reopen when passed [Object, Object] 4212s - reopens self with the passed Object in the passed mode 4212s - truncates the passed String when opened in truncate mode 4212s - tries to convert the passed Object to a String using #to_str 4212s - raises a TypeError when the passed Object can't be converted to a String using #to_str 4212s - resets self's position to 0 4212s - resets self's line number to 0 4212s - tries to convert the passed mode Object to an Integer using #to_str 4212s - raises an Errno::EACCES error when trying to reopen self with a frozen String in write-mode 4212s - does not raise IOError if a frozen string is passed in read mode 4212s 4212s StringIO#reopen when passed [String] 4212s - reopens self with the passed String in read-write mode 4212s - resets self's position to 0 4212s - resets self's line number to 0 4212s 4212s StringIO#reopen when passed [Object] 4212s - raises a TypeError when passed an Object that can't be converted to a StringIO 4212s - does not try to convert the passed Object to a String using #to_str 4212s - tries to convert the passed Object to a StringIO using #to_strio 4212s 4212s StringIO#reopen when passed no arguments 4212s - resets self's mode to read-write 4212s - resets self's position to 0 4212s - resets self's line number to 0 4212s 4212s StringIO#reopen 4212s - reopens a stream when given a String argument 4212s - reopens a stream in append mode when flagged as such 4212s - reopens and truncate when reopened in write mode 4212s - truncates the given string, not a copy 4212s - does not truncate the content even when the StringIO argument is in the truncate mode 4212s 4212s StringIO#rewind 4212s - returns 0 4212s - resets the position 4212s - resets the line number 4212s 4212s StringIO#seek 4212s - seeks from the current position when whence is IO::SEEK_CUR 4212s - seeks from the end of self when whence is IO::SEEK_END 4212s - seeks to an absolute position when whence is IO::SEEK_SET 4212s - raises an Errno::EINVAL error on negative amounts when whence is IO::SEEK_SET 4212s - raises an Errno::EINVAL error on incorrect whence argument 4212s - tries to convert the passed Object to a String using #to_int 4212s - raises a TypeError when the passed Object can't be converted to an Integer 4212s 4212s StringIO#seek when self is closed 4212s - raises an IOError 4212s 4212s StringIO#set_encoding 4212s - sets the encoding of the underlying String if the String is not frozen 4212s - does not set the encoding of the underlying String if the String is frozen 4212s - accepts a String 4212s 4212s StringIO#size 4212s - returns the length of the wrapped string 4212s 4212s StringIO#string 4212s - returns the underlying string 4212s 4212s StringIO#string= 4212s - returns the passed String 4212s - changes the underlying string 4212s - resets the position 4212s - resets the line number 4212s - tries to convert the passed Object to a String using #to_str 4212s - raises a TypeError when the passed Object can't be converted to an Integer 4212s 4212s StringIO 4212s - includes the Enumerable module 4212s 4212s StringIO#sync 4212s - returns true 4212s 4212s StringIO#sync= 4212s - does not change 'sync' status 4212s 4212s StringIO#sysread when passed length, buffer 4212s - returns the passed buffer String 4212s - reads length bytes and writes them to the buffer String 4212s - tries to convert the passed buffer Object to a String using #to_str 4212s - raises a TypeError when the passed buffer Object can't be converted to a String 4212s - raises a FrozenError error when passed a frozen String as buffer 4212s 4212s StringIO#sysread when passed [length] 4212s - reads length bytes from the current position and returns them 4212s - reads at most the whole content 4212s - correctly updates the position 4212s - tries to convert the passed length to an Integer using #to_int 4212s - raises a TypeError when the passed length can't be converted to an Integer 4212s - raises a TypeError when the passed length is negative 4212s - returns a binary String 4212s 4212s StringIO#sysread when passed no arguments 4212s - reads the whole content starting from the current position 4212s - correctly updates the current position 4212s - correctly update the current position in bytes when multi-byte characters are used 4212s - returns an empty String if at EOF 4212s 4212s StringIO#sysread when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#sysread when passed nil 4212s - returns the remaining content from the current position 4212s - updates the current position 4212s - returns an empty String if at EOF 4212s 4212s StringIO#sysread when passed [length] 4212s - raises an EOFError when self's position is at the end 4212s - returns an empty String when length is 0 4212s 4212s StringIO#syswrite when passed [Object] 4212s - tries to convert the passed Object to a String using #to_s 4212s 4212s StringIO#syswrite when passed [String] 4212s - writes the passed String at the current buffer position 4212s - pads self with \000 when the current position is after the end 4212s - returns the number of bytes written 4212s - updates self's position 4212s - handles concurrent writes correctly 4212s - handles writing non-ASCII UTF-8 after seek 4212s - handles writing with position < buffer size 4212s - transcodes the given string when the external encoding is set and neither is BINARY 4212s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 4212s 4212s StringIO#syswrite when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#syswrite when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringIO#tell 4212s - returns the current byte offset 4212s 4212s StringIO#truncate when passed [length] 4212s - returns an Integer 4212s - truncated the underlying string down to the passed length 4212s - does not create a copy of the underlying string 4212s - does not change the position 4212s - can grow a string to a larger size, padding it with \000 4212s - raises an Errno::EINVAL when the passed length is negative 4212s - tries to convert the passed length to an Integer using #to_int 4212s - raises a TypeError when the passed length can't be converted to an Integer 4212s 4212s StringIO#truncate when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#tty? 4212s - returns false 4212s 4212s StringIO#ungetbyte 4212s - ungets a single byte from a string starting with a single byte character 4212s - ungets a single byte from a string in the middle of a multibyte character 4212s - constrains the value of a numeric argument to a single byte 4212s - ungets the bytes of a string if given a string as an argument 4212s 4212s StringIO#ungetc when passed [char] 4212s - writes the passed char before the current position 4212s - returns nil 4212s - decreases the current position by one 4212s - pads with \000 when the current position is after the end 4212s - tries to convert the passed argument to an String using #to_str 4212s - raises a TypeError when the passed length can't be converted to an Integer or String 4212s 4212s StringIO#ungetc when self is not readable 4212s - raises an IOError 4212s 4212s StringIO#write_nonblock when passed [Object] 4212s - tries to convert the passed Object to a String using #to_s 4212s 4212s StringIO#write_nonblock when passed [String] 4212s - writes the passed String at the current buffer position 4212s - pads self with \000 when the current position is after the end 4212s - returns the number of bytes written 4212s - updates self's position 4212s - handles concurrent writes correctly 4212s - handles writing non-ASCII UTF-8 after seek 4212s - handles writing with position < buffer size 4212s - transcodes the given string when the external encoding is set and neither is BINARY 4212s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 4212s - accepts :exception option 4212s 4212s StringIO#write_nonblock when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#write_nonblock when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringIO#write when passed [Object] 4212s - tries to convert the passed Object to a String using #to_s 4212s 4212s StringIO#write when passed [String] 4212s - writes the passed String at the current buffer position 4212s - pads self with \000 when the current position is after the end 4212s - returns the number of bytes written 4212s - updates self's position 4212s - handles concurrent writes correctly 4212s - handles writing non-ASCII UTF-8 after seek 4212s - handles writing with position < buffer size 4212s - transcodes the given string when the external encoding is set and neither is BINARY 4212s - does not transcode the given string when the external encoding is set and the string encoding is BINARY 4212s 4212s StringIO#write when self is not writable 4212s - raises an IOError 4212s 4212s StringIO#write when in append mode 4212s - appends the passed argument to the end of self 4212s - correctly updates self's position 4212s 4212s StringScanner#<< 4212s - concatenates the given argument to self and returns self 4212s - raises a TypeError if the given argument can't be converted to a String 4212s 4212s StringScanner#<< when passed an Integer 4212s - raises a TypeError 4212s - doesn't call to_int on the argument 4212s 4212s StringScanner#beginning_of_line? 4212s - returns true if the scan pointer is at the beginning of the line, false otherwise 4212s - returns true if the scan pointer is at the end of the line of an empty string. 4212s 4212s StringScanner#bol? 4212s - returns true if the scan pointer is at the beginning of the line, false otherwise 4212s - returns true if the scan pointer is at the end of the line of an empty string. 4212s 4212s StringScanner#check 4212s - returns the value that scan would return, without advancing the scan pointer 4212s - treats String as the pattern itself 4212s 4212s StringScanner#check_until 4212s - returns the same value of scan_until, but don't advances the scan pointer 4212s - raises TypeError if given a String 4212s 4212s StringScanner#clear 4212s - set the scan pointer to the end of the string and clear matching data. 4212s - warns in verbose mode that the method is obsolete 4212s 4212s StringScanner#concat 4212s - concatenates the given argument to self and returns self 4212s - raises a TypeError if the given argument can't be converted to a String 4212s 4212s StringScanner#concat when passed an Integer 4212s - raises a TypeError 4212s - doesn't call to_int on the argument 4212s 4212s StringScanner#dup 4212s - copies the passed StringScanner's content to self 4212s - copies the passed StringScanner's position to self 4212s - copies previous match state 4212s - copies the passed StringScanner scan pointer to self 4212s 4212s StringScanner#[] 4212s - returns nil if there is no current match 4212s - returns the n-th subgroup in the most recent match 4212s - returns nil if index is outside of self 4212s - calls to_int on the given index 4212s - raises a TypeError if the given index is nil 4212s - raises a TypeError when a Range is as argument 4212s - raises a IndexError when there's no named capture 4212s - returns named capture 4212s 4212s StringScanner#empty? 4212s - returns true if the scan pointer is at the end of the string 4212s - returns false if the scan pointer is not at the end of the string 4212s - warns in verbose mode that the method is obsolete 4212s 4212s StringScanner#eos? 4212s - returns true if the scan pointer is at the end of the string 4212s - returns false if the scan pointer is not at the end of the string 4212s 4212s StringScanner#exist? 4212s - returns the index of the first occurrence of the given pattern 4212s - returns 0 if the pattern is empty 4212s - returns nil if the pattern isn't found in the string 4212s - raises TypeError if given a String 4212s 4212s StringScanner#get_byte 4212s - scans one byte and returns it 4212s - is not multi-byte character sensitive 4212s - returns nil at the end of the string 4212s 4212s StringScanner#getbyte 4212s - scans one byte and returns it 4212s - is not multi-byte character sensitive 4212s - returns nil at the end of the string 4212s - warns in verbose mode that the method is obsolete 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#getch 4212s - scans one character and returns it 4212s - is multi-byte character sensitive 4212s - returns nil at the end of the string 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#initialize 4212s - is a private method 4212s - returns an instance of StringScanner 4212s - converts the argument into a string using #to_str 4212s 4212s StringScanner#inspect 4212s - returns a String object 4212s - returns a string that represents the StringScanner object 4212s 4212s StringScanner#match? 4212s - returns the length of the match and the scan pointer is not advanced 4212s - returns nil if there's no match 4212s - effects pre_match 4212s 4212s StringScanner#matched_size 4212s - returns the size of the most recent match 4212s - returns nil if there was no recent match 4212s 4212s StringScanner#matched 4212s - returns the last matched string 4212s - returns nil if there's no match 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#matched? 4212s - returns true if the last match was successful 4212s - returns false if there's no match 4212s 4212s StringScanner.must_C_version 4212s - returns self 4212s 4212s StringScanner#peek 4212s - returns at most the specified number of bytes from the current position 4212s - returns an empty string when the passed argument is zero 4212s - raises a ArgumentError when the passed argument is negative 4212s - raises a RangeError when the passed argument is a Bignum 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#peep 4212s - returns at most the specified number of bytes from the current position 4212s - returns an empty string when the passed argument is zero 4212s - raises a ArgumentError when the passed argument is negative 4212s - raises a RangeError when the passed argument is a Bignum 4212s - returns an instance of String when passed a String subclass 4212s - warns in verbose mode that the method is obsolete 4212s 4212s StringScanner#pointer 4212s - returns the position of the scan pointer 4212s - returns 0 in the reset position 4212s - returns the length of the string in the terminate position 4212s 4212s StringScanner#pointer= 4212s - modify the scan pointer 4212s - positions from the end if the argument is negative 4212s - raises a RangeError if position too far backward 4212s - raises a RangeError when the passed argument is out of range 4212s 4212s StringScanner#pos 4212s - returns the position of the scan pointer 4212s - returns 0 in the reset position 4212s - returns the length of the string in the terminate position 4212s 4212s StringScanner#pos= 4212s - modify the scan pointer 4212s - positions from the end if the argument is negative 4212s - raises a RangeError if position too far backward 4212s - raises a RangeError when the passed argument is out of range 4212s 4212s StringScanner#post_match 4212s - returns the post-match (in the regular expression sense) of the last scan 4212s - returns nil if there's no match 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#pre_match 4212s - returns the pre-match (in the regular expression sense) of the last scan 4212s - returns nil if there's no match 4212s - is more than just the data from the last match 4212s - is not changed when the scanner's position changes 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#reset 4212s - reset the scan pointer and clear matching data 4212s 4212s StringScanner#rest_size 4212s - returns the length of the rest of the string 4212s - is equivalent to rest.size 4212s 4212s StringScanner#rest 4212s - returns the rest of the string 4212s - returns self in the reset position 4212s - returns an empty string in the terminate position 4212s - returns an instance of String when passed a String subclass 4212s 4212s StringScanner#rest? 4212s - returns true if there is more data in the string 4212s - returns false if there is no more data in the string 4212s - is the opposite of eos? 4212s 4212s StringScanner#restsize 4212s - returns the length of the rest of the string 4212s - is equivalent to rest.size 4212s - warns in verbose mode that the method is obsolete 4212s 4212s StringScanner#scan_full 4212s - returns the number of bytes advanced 4212s - returns the number of bytes advanced and advances the scan pointer if the second argument is true 4212s - returns the matched string if the third argument is true 4212s - returns the matched string if the third argument is true and advances the scan pointer if the second argument is true 4212s 4212s StringScanner#scan 4212s - returns the matched string 4212s - treats ^ as matching from the beginning of the current position 4212s - treats ^ as matching from the beginning of the current position when it's not the first character in the regexp 4212s - treats \A as matching from the beginning of the current position 4212s - treats \A as matching from the beginning of the current position when it's not the first character in the regexp 4212s - returns nil if there's no match 4212s - returns nil when there is no more to scan 4212s - returns an empty string when the pattern matches empty 4212s - treats String as the pattern itself 4212s - raises a TypeError if pattern isn't a Regexp nor String 4212s 4212s StringScanner#scan with fixed_anchor: true 4212s - returns the matched string 4212s - treats ^ as matching from the beginning of line 4212s - treats \A as matching from the beginning of string 4212s 4212s StringScanner#scan_until 4212s - returns the substring up to and including the end of the match 4212s - returns nil if there's no match 4212s - can match anchors properly 4212s - raises TypeError if given a String 4212s 4212s StringScanner#search_full 4212s - returns the number of bytes advanced 4212s - returns the number of bytes advanced and advances the scan pointer if the second argument is true 4212s - returns the matched string if the third argument is true 4212s - returns the matched string if the third argument is true and advances the scan pointer if the second argument is true 4212s - raises TypeError if given a String 4212s 4212s StringScanner#size 4212s - returns the number of captures groups of the last match 4212s - returns nil if there is no last match 4212s 4212s StringScanner#skip 4212s - returns length of the match 4212s - returns nil if there's no match 4212s 4212s StringScanner#skip_until 4212s - returns the number of bytes advanced and advances the scan pointer until pattern is matched and consumed 4212s - returns nil if no match was found 4212s - raises TypeError if given a String 4212s 4212s StringScanner#string 4212s - returns the string being scanned 4212s - returns the identical object passed in 4212s 4212s StringScanner#string= 4212s - changes the string being scanned to the argument and resets the scanner 4212s - converts the argument into a string using #to_str 4212s 4212s StringScanner#terminate 4212s - set the scan pointer to the end of the string and clear matching data. 4212s 4212s StringScanner#unscan 4212s - set the scan pointer to the previous position 4212s - remember only one previous position 4212s - raises a ScanError when the previous match had failed 4212s 4212s Syslog.alert 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.close 4212s - closes the log 4212s - raises a RuntimeError if the log's already closed 4212s - it does not work inside blocks 4212s - sets the identity to nil 4212s - sets the options to nil 4212s - sets the facility to nil 4212s 4212s Syslog::Constants 4212s - includes the Syslog constants 4212s 4212s Syslog.crit 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.debug 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.err 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.facility 4212s - returns the logging facility 4212s - returns nil if the log is closed 4212s - defaults to LOG_USER 4212s - resets after each open call 4212s 4212s Syslog.ident 4212s - returns the logging identity 4212s - returns nil if the log is closed 4212s - defaults to $0 4212s 4212s Syslog.info 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.inspect 4212s - returns a string a closed log 4212s - returns a string for an opened log 4212s - includes the ident, options, facility and mask 4212s 4212s Syslog.instance 4212s - returns the module 4212s 4212s Syslog.log 4212s - receives a priority as first argument 4212s - accepts undefined priorities 4212s - fails if the log is closed 4212s - accepts printf parameters 4212s 4212s Syslog.mask 4212s - returns the log priority mask 4212s - defaults to 255 4212s - returns nil if the log is closed 4212s 4212s Syslog.mask= 4212s - sets the log priority mask 4212s 4212s Syslog.notice 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Syslog.open 4212s - returns the module 4212s - receives an identity as first argument 4212s - defaults the identity to $0 4212s - receives the logging options as second argument 4212s - defaults the logging options to LOG_PID | LOG_CONS 4212s - receives a facility as third argument 4212s - defaults the facility to LOG_USER 4212s - receives a block and calls it with the module 4212s - closes the log if after it receives a block 4212s 4212s Syslog.opened? 4212s - returns true if the log is opened 4212s - returns false otherwise 4212s - works inside a block 4212s 4212s Syslog.options 4212s - returns the logging options 4212s - returns nil when the log is closed 4212s - defaults to LOG_PID | LOG_CONS 4212s - resets after each open call 4212s 4212s Syslog.reopen 4212s - reopens the log 4212s - fails with RuntimeError if the log is closed 4212s - receives the same parameters as Syslog.open 4212s - returns the module 4212s 4212s Syslog.warning 4212s - logs a message 4212s - accepts sprintf arguments 4212s - works as an alias for Syslog.log 4212s 4212s Tempfile#_close 4213s - is protected 4213s - closes self 4213s 4213s Tempfile.callback 4213s - needs to be reviewed for spec completeness 4213s 4213s Tempfile#close when passed no argument or [false] 4213s - closes self 4213s - does not unlink self 4213s 4213s Tempfile#close when passed [true] 4213s - closes self 4213s - unlinks self 4213s 4213s Tempfile#close! 4213s - closes self 4213s - unlinks self 4213s 4213s Tempfile#delete 4213s - unlinks self 4213s 4213s Tempfile#initialize 4213s - opens a new tempfile with the passed name in the passed directory 4213s - sets the permissions on the tempfile to 0600 4213s - accepts encoding options 4213s - does not try to modify the arguments 4213s 4213s Tempfile#length 4213s - returns the size of self 4213s - returns the size of self even if self is closed 4213s 4213s Tempfile#open 4213s - reopens self 4213s - reopens self in read and write mode and does not truncate 4213s 4213s Tempfile.open 4213s - returns a new, open Tempfile instance 4213s - is passed an array [base, suffix] as first argument 4213s - passes the third argument (options) to open 4213s - uses a blank string for basename when passed no arguments 4213s 4213s Tempfile.open when passed a block 4213s - yields a new, open Tempfile instance to the block 4213s - returns the value of the block 4213s - closes the yielded Tempfile after the block 4213s 4213s Tempfile#path 4213s - returns the path to the tempfile 4213s 4213s Tempfile#size 4213s - returns the size of self 4213s - returns the size of self even if self is closed 4213s 4213s Tempfile#unlink 4213s - unlinks self 4213s 4213s Thread::Queue 4213s - is the same class as ::Queue 4213s 4213s Thread::SizedQueue 4213s - is the same class as ::SizedQueue 4213s 4213s Time.httpdate 4213s - parses RFC-2616 strings 4213s 4213s Time.xmlschema 4213s - parses ISO-8601 strings 4213s 4213s Time.rfc2822 4213s - parses RFC-822 strings 4213s - parses RFC-2822 strings 4213s 4213s Time.rfc822 4213s - parses RFC-822 strings 4213s - parses RFC-2822 strings 4213s 4213s Time#to_date 4213s - yields accurate julian date for ambiguous pre-Gregorian reform value 4213s - yields accurate julian date for Julian-Gregorian gap value 4213s - yields accurate julian date for post-Gregorian reform value 4213s - yields same julian day regardless of UTC time value 4213s - yields same julian day regardless of local time or zone 4213s - yields date with default Calendar reform day 4213s 4213s Time#to_datetime 4213s - returns a DateTime representing the same instant 4213s - roundtrips 4213s - yields a DateTime with the default Calendar reform day 4213s 4213s Time#to_time 4213s - returns itself in the same timezone 4213s 4213s Time.xmlschema 4213s - parses ISO-8601 strings 4213s 4213s Timeout::Error 4213s - is a subclass of RuntimeError 4213s 4213s Timeout.timeout 4214s - raises Timeout::Error when it times out with no specified error type 4215s - raises specified error type when it times out 4216s - raises specified error type with specified message when it times out 4217s - raises specified error type with a default message when it times out if message is nil 4217s - returns back the last value in the block 4217s 4217s Dir.mktmpdir when passed no arguments 4217s - returns the path to the created tmp-dir 4217s - creates a new writable directory in the path provided by Dir.tmpdir 4217s 4217s Dir.mktmpdir when passed a block 4217s - yields the path to the passed block 4217s - creates the tmp-dir before yielding 4217s - removes the tmp-dir after executing the block 4217s - returns the blocks return value 4217s 4217s Dir.mktmpdir when passed [String] 4217s - uses the passed String as a prefix to the tmp-directory 4217s 4217s Dir.mktmpdir when passed [Array] 4217s - uses the first element of the passed Array as a prefix and the second element as a suffix to the tmp-directory 4217s 4217s Dir.mktmpdir when passed [Object] 4217s - raises an ArgumentError 4217s 4217s Dir.tmpdir 4217s - returns the path to a writable and readable directory 4217s 4217s URI.decode_www_form_component 4217s - needs to be reviewed for spec completeness 4217s 4217s URI.decode_www_form 4217s - needs to be reviewed for spec completeness 4217s 4217s URI.encode_www_form_component 4217s - needs to be reviewed for spec completeness 4217s 4217s URI.encode_www_form 4217s - needs to be reviewed for spec completeness 4217s 4217s URI#eql? 4217s - returns false if the normalized forms are different 4217s - returns false for when compared to non-uri objects 4217s 4217s URI#== 4217s - ignores capitalization of host names 4217s - ignores capitalization of scheme 4217s - treats a blank path and a path of '/' as the same 4217s - is case sensitive in all components of the URI but the host and scheme 4217s - differentiates based on port number 4217s - returns false if the normalized forms are different 4217s - returns false for when compared to non-uri objects 4217s 4217s URI::Escape#decode 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Escape#encode 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Escape#escape 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Escape#unescape 4217s - needs to be reviewed for spec completeness 4217s 4217s URI.extract 4217s - behaves according to its documentation 4217s - treats contiguous URIs as a single URI 4217s - treats pretty much anything with a colon as a URI 4217s - wraps a URI string in an array 4217s - pulls a variety of protocol URIs from a string 4217s - pulls all URIs within a string in order into an array when a block is not given 4217s - yields each URI in the given string in order to a block, if given, and returns nil 4217s - allows the user to specify a list of acceptable protocols of URIs to scan for 4217s 4217s URI::FTP.build 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::FTP#merge 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::FTP.new2 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::FTP#path= 4217s - does not require a leading / 4217s - does not strip the leading / 4217s 4217s URI::FTP#path 4217s - unescapes the leading / 4217s 4217s URI::FTP#set_typecode 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::FTP#to_s 4217s - escapes the leading / 4217s 4217s URI::FTP#typecode 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::FTP#typecode= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#absolute 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#absolute? 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic.build2 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic.build 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#coerce 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#component_ary 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#component 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic.component 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#default_port 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic.default_port 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#eql? 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#== 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#fragment 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#fragment= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#hash 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#hierarchical? 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#host 4217s - returns empty string when host is empty 4217s 4217s URI::Generic#host= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#inspect 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#merge 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#merge! 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#- 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#normalize 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#normalize! 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#opaque 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#opaque= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#password 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#password= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#path 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#path= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#+ 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#port 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#port= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#query 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#query= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#registry 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#registry= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#relative? 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#route_from 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#route_to 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#scheme 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#scheme= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#select 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_fragment 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_host 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_opaque 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_password 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_path 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_port 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_query 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_registry 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_scheme 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_user 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#set_userinfo 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#to_s 4217s - preserves / characters when host is empty 4217s 4217s URI::Generic.use_registry 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#user 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#user= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#userinfo 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Generic#userinfo= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::HTTP.build 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::HTTP.request_uri 4217s - returns a string of the path + query 4217s - returns '/' if the path of the URI is blank 4217s 4217s URI::HTTP#request_uri 4217s - needs to be reviewed for spec completeness 4217s 4217s URI.join 4217s - returns a URI object of the concatenation of a protocol and domain, and a path 4217s - accepts URI objects 4217s - accepts string-like arguments with to_str 4217s - raises an error if given no argument 4217s - doesn't create redundant '/'s 4217s - discards arguments given before an absolute uri 4217s - resolves .. in paths 4217s 4217s URI::LDAP#attributes 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#attributes= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP.build 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#dn 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#dn= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#extensions 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#extensions= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#filter 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#filter= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#hierarchical? 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#scope 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#scope= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#set_attributes 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#set_dn 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#set_extensions 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#set_filter 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::LDAP#set_scope 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Mailto.build 4217s - conforms to the MatzRuby tests 4217s 4217s URI::MailTo#headers 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#headers= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#set_headers 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#set_to 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#to_mailtext 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#to_rfc822text 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#to_s 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#to 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::MailTo#to= 4217s - needs to be reviewed for spec completeness 4217s 4217s URI#merge 4217s - returns the receiver and the argument, joined as per URI.join 4217s - accepts URI objects as argument 4217s - accepts a string-like argument 4217s 4217s URI#normalize 4217s - adds a / onto the end of the URI if the path is blank 4217s - downcases the host of the URI 4217s 4217s URI.parse 4217s - returns a URI::HTTP object when parsing an HTTP URI 4217s - populates the components of a parsed URI::HTTP, setting the port to 80 by default 4217s - parses out the port number of a URI, when given 4217s - returns a URI::HTTPS object when parsing an HTTPS URI 4217s - sets the port of a parsed https URI to 443 by default 4217s - populates the components of a parsed URI::FTP object 4217s - returns a URI::LDAP object when parsing an LDAP URI 4217s - populates the components of a parsed URI::LDAP object 4217s - returns a URI::MailTo object when passed a mailto URI 4217s - populates the components of a parsed URI::MailTo object 4217s - does its best to extract components from URI::Generic objects 4217s - doesn't raise errors on URIs which has underscore in reg_name 4217s 4217s URI::Parser#escape 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Parser#extract 4217s - behaves according to its documentation 4217s - treats contiguous URIs as a single URI 4217s - treats pretty much anything with a colon as a URI 4217s - wraps a URI string in an array 4217s - pulls a variety of protocol URIs from a string 4217s - pulls all URIs within a string in order into an array when a block is not given 4217s - yields each URI in the given string in order to a block, if given, and returns nil 4217s - allows the user to specify a list of acceptable protocols of URIs to scan for 4217s 4217s URI::Parser#split 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Parser#join 4217s - returns a URI object of the concatenation of a protocol and domain, and a path 4217s - accepts URI objects 4217s - accepts string-like arguments with to_str 4217s - raises an error if given no argument 4217s - doesn't create redundant '/'s 4217s - discards arguments given before an absolute uri 4217s - resolves .. in paths 4217s 4217s URI::Parser#make_regexp 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Parser#parse 4217s - returns a URI::HTTP object when parsing an HTTP URI 4217s - populates the components of a parsed URI::HTTP, setting the port to 80 by default 4217s - parses out the port number of a URI, when given 4217s - returns a URI::HTTPS object when parsing an HTTPS URI 4217s - sets the port of a parsed https URI to 443 by default 4217s - populates the components of a parsed URI::FTP object 4217s - returns a URI::LDAP object when parsing an LDAP URI 4217s - populates the components of a parsed URI::LDAP object 4217s - returns a URI::MailTo object when passed a mailto URI 4217s - populates the components of a parsed URI::MailTo object 4217s - does its best to extract components from URI::Generic objects 4217s - raises errors on malformed URIs 4217s 4217s URI::Parser#split 4217s - needs to be reviewed for spec completeness 4217s 4217s URI::Parser#unescape 4217s - needs to be reviewed for spec completeness 4217s 4217s URI#+ 4217s - replaces the end of the path of the URI when added to a string that looks like a relative path 4217s - replaces the entire path of the URI when added to a string that begins with a / 4217s - replaces the entire url when added to a string that looks like a full url 4217s - canonicalizes the URI's path, removing ../'s 4217s - doesn't canonicalize the path when adding to the empty string 4217s - raises a URI::BadURIError when adding two relative URIs 4217s - conforms to the merge specifications from rfc 2396 4217s 4217s URI.regexp 4217s - behaves according to the MatzRuby tests 4217s 4217s URI#route_from 4217s - gives the minimal difference between the current URI and the target 4217s - accepts a string-like argument 4217s 4217s URI#route_to 4217s - gives the minimal difference between the current URI and the target 4217s - accepts a string-like argument 4217s 4217s URI#select 4217s - takes any number of component names as symbols, and returns an array of those components 4217s - returns nil for any valid component that isn't set and doesn't have a default 4217s - raises an ArgumentError if a component is requested that isn't valid under the given scheme 4217s - raises an ArgumentError if given strings rather than symbols 4217s 4217s URI#select 4217s - conforms to the MatzRuby tests 4217s 4217s URI.split 4217s - needs to be reviewed for spec completeness 4217s 4217s the URI method 4217s - parses a given URI, returning a URI object 4217s - converts its argument with to_str 4217s - returns the argument if it is a URI object 4217s - does not add a URI method to Object instances 4217s 4217s URI::Util.make_components_hash 4217s - needs to be reviewed for spec completeness 4217s 4217s WeakRef#__getobj__ 4217s - returns the object if it is reachable 4218s - raises WeakRef::RefError if the object is no longer reachable 4218s 4218s WeakRef#allocate 4218s - assigns nil as the reference 4218s 4218s WeakRef#new 4218s - creates a subclass correctly 4218s 4218s WeakRef#__send__ 4218s - delegates to public methods of the weakly-referenced object 4218s - delegates to protected methods of the weakly-referenced object 4218s - does not delegate to private methods of the weakly-referenced object 4218s 4218s WeakRef#weakref_alive? 4218s - returns true if the object is reachable 4221s - returns a falsy value if the object is no longer reachable 4221s 4221s YAML.dump 4221s - converts an object to YAML and write result to io when io provided 4221s - returns a string containing dumped YAML when no io provided 4221s - returns the same string that #to_yaml on objects 4221s - dumps strings into YAML strings 4221s - dumps hashes into YAML key-values 4221s - dumps Arrays into YAML collection 4221s - dumps an OpenStruct 4221s - dumps a File without any state 4221s 4221s YAML.dump_stream 4221s - returns a YAML stream containing the objects passed 4221s 4221s YAML.load_file 4221s - returns a hash 4221s 4221s YAML.load 4221s - returns a document from current io stream when io provided 4221s - loads strings 4221s - loads strings with chars from non-base Unicode plane 4221s - fails on invalid keys 4221s - accepts symbols 4221s - accepts numbers 4221s - accepts collections 4221s - parses start markers 4221s - works with block sequence shortcuts 4221s - loads a symbol key that contains spaces 4221s 4221s YAML.load_stream 4221s - calls the block on each successive document 4221s - works on files 4221s 4221s YAML.parse_file 4221s - returns a YAML::Syck::Map object after parsing a YAML file 4221s 4221s YAML.parse with an empty string 4221s - returns false 4221s 4221s YAML.parse 4221s - returns the value from the object 4221s 4221s Object#to_yaml 4221s - returns the YAML representation of an Array object 4221s - returns the YAML representation of a Hash object 4221s - returns the YAML representation of an object 4221s - returns the YAML representation of a Class object 4221s - returns the YAML representation of a Module object 4221s - returns the YAML representation of a Date object 4221s - returns the YAML representation of a FalseClass 4221s - returns the YAML representation of a Float object 4221s - returns the YAML representation of an Integer object 4221s - returns the YAML representation of a NilClass object 4221s - returns the YAML representation of a String object 4221s - returns the YAML representation of a Struct object 4221s - returns the YAML representation of an unnamed Struct object 4221s - returns the YAML representation of a Symbol object 4221s - returns the YAML representation of a Time object 4221s - returns the YAML representation of a TrueClass 4221s - returns the YAML representation of a Error object 4221s - returns the YAML representation for Range objects 4221s - returns the YAML representation of numeric constants 4221s - returns the YAML representation of an array of hashes 4221s 4221s YAML.unsafe_load 4221s - returns a document from current io stream when io provided 4221s - loads strings 4221s - loads strings with chars from non-base Unicode plane 4221s - fails on invalid keys 4221s - accepts symbols 4221s - accepts numbers 4221s - accepts collections 4221s - parses start markers 4221s - works with block sequence shortcuts 4221s - loads a symbol key that contains spaces 4221s - works on complex keys 4221s - loads an OpenStruct 4221s - loads a File but raise an error when used as it is uninitialized 4221s 4221s YAML.unsafe_load with iso8601 timestamp 4221s - computes the microseconds 4221s - rounds values smaller than 1 usec to 0 4221s 4221s Zlib.adler32 4221s - calculates Adler checksum for string 4221s - calculates Adler checksum for string and initial Adler value 4221s - calculates the Adler checksum for string and initial Adler value for Integers 4221s - assumes that the initial value is given to adler, if adler is omitted 4221s - it returns the CRC initial value, if string is omitted 4221s 4221s Zlib.crc32 4221s - calculates CRC checksum for string 4221s - calculates CRC checksum for string and initial CRC value 4221s - calculates the CRC checksum for string and initial CRC value for Integers 4221s - assumes that the initial value is given to crc, if crc is omitted 4221s - it returns the CRC initial value, if string is omitted 4221s 4221s Zlib.crc_table 4221s - returns the same value as zlib's get_crc_table() 4221s 4221s Zlib::Deflate.deflate 4221s - deflates some data 4221s - deflates lots of data 4221s 4221s Zlib::Deflate#deflate 4221s - deflates some data 4221s - deflates lots of data 4221s - has a binary encoding 4221s 4221s Zlib::Deflate#deflate without break 4221s - deflates chunked data without errors 4221s 4221s Zlib::Deflate#deflate with break 4221s - deflates chunked data without errors 4221s 4221s Zlib::Deflate#params 4221s - changes the deflate parameters 4221s 4221s Zlib::Deflate#set_dictionary 4221s - sets the dictionary 4221s 4221s Zlib.deflate 4221s - deflates some data 4221s 4221s Zlib.gunzip 4221s - decodes the given gzipped string 4221s 4221s Zlib.gzip 4221s - gzips the given string 4221s 4221s Zlib::GzipFile#close 4221s - finishes the stream and closes the io 4221s 4221s Zlib::GzipFile#closed? 4221s - returns the closed status 4221s 4221s Zlib::GzipFile#comment 4221s - returns the name 4221s - raises an error on a closed stream 4221s 4221s Zlib::GzipFile#orig_name 4221s - returns the name 4221s - raises an error on a closed stream 4221s 4221s Zlib::GzipReader#each_byte 4221s - calls the given block for each byte in the stream, passing the byte as an argument 4221s - returns an enumerator, which yields each byte in the stream, when no block is passed 4221s - increments position before calling the block 4221s 4221s Zlib::GzipReader#each_line 4221s - calls the given block for each line in the stream, passing the line as an argument 4221s - returns an enumerator, which yields each byte in the stream, when no block is passed 4221s - increments position before calling the block 4221s 4221s Zlib::GzipReader#each 4221s - calls the given block for each line in the stream, passing the line as an argument 4221s - returns an enumerator, which yields each byte in the stream, when no block is passed 4221s - increments position before calling the block 4221s 4221s Zlib::GzipReader#eof? 4221s - returns true when at EOF 4221s - returns true when at EOF with the exact length of uncompressed data 4221s - returns true when at EOF with a length greater than the size of uncompressed data 4221s - returns false when at EOF when there's data left in the buffer to read 4221s - does not affect the reading data 4221s 4221s Zlib::GzipReader#getc 4221s - returns the next character from the stream 4221s - increments position 4221s - returns nil at the end of the stream 4221s 4221s Zlib::GzipReader#gets with "" separator 4221s - reads paragraphs skipping newlines 4221s 4221s Zlib::GzipReader#mtime 4221s - returns the timestamp from the Gzip header 4221s 4221s Zlib::GzipReader#pos 4221s - returns the position 4221s 4221s Zlib::GzipReader#read 4221s - with no arguments reads the entire content of a gzip file 4221s - with nil length argument reads the entire content of a gzip file 4221s - reads the contents up to a certain size 4221s - does not accept a negative length to read 4221s - returns an empty string if a 0 length is given 4221s - respects :external_encoding option 4221s 4221s Zlib::GzipReader#read at the end of data 4221s - returns empty string if length parameter is not specified or 0 4221s - returns nil if length parameter is positive 4221s 4221s Zlib::GzipReader#readpartial 4221s - accepts nil buffer 4221s 4221s Zlib::GzipReader#rewind 4221s - resets the position of the stream pointer 4221s - resets the position of the stream pointer to data previously read 4221s - invokes seek method on the associated IO object 4221s 4221s Zlib::GzipReader#ungetbyte at the start of the stream with an integer 4221s - prepends the byte to the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetbyte in the middle of the stream with an integer 4221s - inserts the corresponding character into the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetbyte at the end of the stream with an integer 4221s - appends the corresponding character to the stream 4221s - decrements pos 4221s - makes eof? false 4221s 4221s Zlib::GzipReader#ungetc at the start of the stream with a single-byte character 4221s - prepends the character to the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc at the start of the stream with a multi-byte character 4221s - prepends the character to the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc at the start of the stream with a multi-character string 4221s - prepends the characters to the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc at the start of the stream with an integer 4221s - prepends the corresponding character to the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc at the start of the stream with an empty string 4221s - does not prepend anything to the stream 4221s - does not decrement pos 4221s 4221s Zlib::GzipReader#ungetc in the middle of the stream with a single-byte character 4221s - inserts the character into the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc in the middle of the stream with a multi-byte character 4221s - inserts the character into the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc in the middle of the stream with a multi-character string 4221s - inserts the characters into the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc in the middle of the stream with an integer 4221s - inserts the corresponding character into the stream 4221s - decrements pos 4221s 4221s Zlib::GzipReader#ungetc in the middle of the stream with an empty string 4221s - does not insert anything into the stream 4221s - does not decrement pos 4221s 4221s Zlib::GzipReader#ungetc at the end of the stream with a single-byte character 4221s - appends the character to the stream 4221s - decrements pos 4221s - makes eof? false 4221s 4221s Zlib::GzipReader#ungetc at the end of the stream with a multi-byte character 4221s - appends the character to the stream 4221s - decrements pos 4221s - makes eof? false 4221s 4221s Zlib::GzipReader#ungetc at the end of the stream with a multi-character string 4221s - appends the characters to the stream 4221s - decrements pos 4221s - makes eof? false 4221s 4221s Zlib::GzipReader#ungetc at the end of the stream with an integer 4221s - appends the corresponding character to the stream 4221s - decrements pos 4221s - makes eof? false 4221s 4221s Zlib::GzipReader#ungetc at the end of the stream with an empty string 4221s - does not append anything to the stream 4221s - does not decrement pos 4221s - does not make eof? false 4221s 4221s Zlib::GzipWriter#<< 4221s - returns self 4221s 4221s Zlib::GzipWriter#mtime= 4221s - sets mtime using Integer 4221s - sets mtime using Time 4221s 4221s Zlib::GzipWriter#write 4221s - writes some compressed data 4221s - returns the number of bytes in the input 4221s - handles inputs of 2^23 bytes 4221s 4221s Zlib::Inflate#<< 4221s - appends data to the input stream 4221s - treats nil argument as the end of compressed data 4221s - just passes through the data after nil argument 4221s - properly handles data in chunks 4221s - properly handles incomplete data 4221s - properly handles excessive data, byte-by-byte 4221s - properly handles excessive data, in one go 4221s 4221s Zlib::Inflate#finish 4221s - each chunk should have the same prefix 4221s 4221s Zlib::Inflate#inflate 4221s - inflates some data 4221s - inflates lots of data 4221s - works in pass-through mode, once finished 4221s - has a binary encoding 4221s 4221s Zlib::Inflate.inflate 4221s - inflates some data 4221s - inflates lots of data 4221s - properly handles data in chunks 4221s - properly handles incomplete data 4221s - properly handles excessive data, byte-by-byte 4221s - properly handles excessive data, in one go 4221s 4221s Zlib::Inflate#inflate without break 4221s - properly handles chunked data 4221s 4221s Zlib::Inflate#inflate with break 4221s - inflates chunked break 4221s 4221s Zlib::Inflate#set_dictionary 4221s - sets the inflate dictionary 4221s 4221s Zlib.inflate 4221s - inflates some data 4221s 4221s Zlib.zlib_version 4221s - returns the version of the libz library 4221s 4221s Zlib::ZStream#adler 4221s - generates hash 4221s 4221s Zlib::ZStream#avail_in 4221s - returns bytes in the input buffer 4221s 4221s Zlib::ZStream#avail_out 4221s - returns bytes in the output buffer 4221s 4221s Zlib::ZStream#data_type 4221s - returns the type of the data in the stream 4221s 4221s Zlib::ZStream#flush_next_out 4221s - flushes the stream and flushes the output buffer 4221s 4221s 4221s 1) 4221s Thread#kill kills other fibers of that thread without running their ensure clauses FAILED 4221s Expected nil == :fiber_resumed 4221s to be truthy but was false 4221s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/thread/shared/exit.rb:132:in `block in
' 4221s org/jruby/RubyBasicObject.java:2620:in `instance_exec' 4221s org/jruby/RubyArray.java:4912:in `all?' 4221s org/jruby/RubyArray.java:1983:in `each' 4221s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/thread/kill_spec.rb:8:in `block in
' 4221s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/spec/ruby/core/thread/kill_spec.rb:7:in `
' 4221s org/jruby/RubyKernel.java:1211:in `load' 4221s org/jruby/RubyBasicObject.java:2620:in `instance_exec' 4221s org/jruby/RubyArray.java:1983:in `each' 4221s 4221s Finished in 631.028586 seconds 4221s 4221s 3394 files, 29743 examples, 147385 expectations, 1 failure, 0 errors, 1112 tagged 4221s rake aborted! 4221s Java::OrgApacheToolsAnt::ExitStatusException: Java returned: 1 4221s org.apache.tools.ant.taskdefs.Java.execute(org/apache/tools/ant/taskdefs/Java.java:114) 4221s org.apache.tools.ant.UnknownElement.execute(org/apache/tools/ant/UnknownElement.java:299) 4221s jdk.internal.reflect.DirectMethodHandleAccessor.invoke(jdk/internal/reflect/DirectMethodHandleAccessor.java:103) 4221s java.lang.reflect.Method.invoke(java/lang/reflect/Method.java:580) 4221s org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(org/jruby/javasupport/JavaMethod.java:300) 4221s org.jruby.javasupport.JavaMethod.invokeDirect(org/jruby/javasupport/JavaMethod.java:164) 4221s RUBY.call(/usr/share/jruby/lib/ruby/stdlib/rake/ant/element.rb:53) 4221s usr.share.jruby.lib.ruby.stdlib.rake.ant.ant.invokeOther1:call(usr/share/jruby/lib/ruby/stdlib/rake/ant//usr/share/jruby/lib/ruby/stdlib/rake/ant/ant.rb:150) 4221s usr.share.jruby.lib.ruby.stdlib.rake.ant.ant.generate_methods(/usr/share/jruby/lib/ruby/stdlib/rake/ant/ant.rb:150) 4221s org.jruby.RubyProc.call(org/jruby/RubyProc.java:373) 4221s RUBY.jruby(/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/rakelib/commands.rake:38) 4221s RUBY.mspec(/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/rakelib/commands.rake:75) 4221s RUBY.
(/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/rakelib/rubyspec.rake:25) 4221s org.jruby.RubyProc.call(org/jruby/RubyProc.java:333) 4221s org.jruby.RubyProc$INVOKER$i$call.call(org/jruby/RubyProc$INVOKER$i$call.gen) 4221s RUBY.execute(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:281) 4221s org.jruby.RubyArray.each(org/jruby/RubyArray.java:1983) 4221s org.jruby.RubyArray$INVOKER$i$0$0$each.call(org/jruby/RubyArray$INVOKER$i$0$0$each.gen) 4221s RUBY.execute(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:281) 4221s RUBY.invoke_with_call_chain(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:219) 4221s org.jruby.ext.monitor.Monitor.synchronize(org/jruby/ext/monitor/Monitor.java:82) 4221s org.jruby.ext.monitor.Monitor$INVOKER$i$0$0$synchronize.call(org/jruby/ext/monitor/Monitor$INVOKER$i$0$0$synchronize.gen) 4221s RUBY.invoke_with_call_chain(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:199) 4221s RUBY.invoke(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/task.rb:188) 4221s RUBY.invoke_task(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:160) 4221s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:116) 4221s org.jruby.RubyArray.each(org/jruby/RubyArray.java:1983) 4221s org.jruby.RubyArray$INVOKER$i$0$0$each.call(org/jruby/RubyArray$INVOKER$i$0$0$each.gen) 4221s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:116) 4221s RUBY.run_with_threads(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:125) 4221s RUBY.top_level(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:110) 4221s RUBY.run(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:83) 4221s RUBY.standard_exception_handling(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:186) 4221s RUBY.run(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:80) 4221s RUBY.
(/usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/exe/rake:27) 4221s org.jruby.Ruby.runInterpreter(org/jruby/Ruby.java:1258) 4221s org.jruby.Ruby.loadFile(org/jruby/Ruby.java:2977) 4221s org.jruby.RubyKernel.loadCommon(org/jruby/RubyKernel.java:1241) 4221s org.jruby.RubyKernel.load(org/jruby/RubyKernel.java:1211) 4221s org.jruby.RubyKernel$INVOKER$s$load.call(org/jruby/RubyKernel$INVOKER$s$load.gen) 4221s usr.bin.rake.run(usr/bin//usr/bin/rake) 4221s java.lang.invoke.MethodHandle.invokeWithArguments(java/lang/invoke/MethodHandle.java:733) 4221s org.jruby.Ruby.runScript(org/jruby/Ruby.java:1245) 4221s org.jruby.Ruby.runNormally(org/jruby/Ruby.java:1157) 4221s org.jruby.Ruby.runFromMain(org/jruby/Ruby.java:983) 4221s org.jruby.Main.doRunFromMain(org/jruby/Main.java:398) 4221s org.jruby.Main.internalRun(org/jruby/Main.java:282) 4221s org.jruby.Main.run(org/jruby/Main.java:227) 4221s org.jruby.Main.main(org/jruby/Main.java:199) 4221s Tasks: TOP => spec:ruby:fast 4221s (See full trace by running task with --trace) 4222s autopkgtest [08:49:11]: test spec-ruby: -----------------------] 4222s autopkgtest [08:49:11]: test spec-ruby: - - - - - - - - - - results - - - - - - - - - - 4222s spec-ruby FLAKY non-zero exit status 1 4222s autopkgtest [08:49:11]: test mri-core: preparing testbed 4225s Reading package lists... 4225s Building dependency tree... 4225s Reading state information... 4225s Starting pkgProblemResolver with broken count: 0 4226s Starting 2 pkgProblemResolver with broken count: 0 4226s Done 4226s The following NEW packages will be installed: 4226s autopkgtest-satdep 4226s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 4226s Need to get 0 B/756 B of archives. 4226s After this operation, 0 B of additional disk space will be used. 4226s Get:1 /tmp/autopkgtest.mg4W0U/10-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [756 B] 4226s Selecting previously unselected package autopkgtest-satdep. 4226s (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 ... 81125 files and directories currently installed.) 4226s Preparing to unpack .../10-autopkgtest-satdep.deb ... 4226s Unpacking autopkgtest-satdep (0) ... 4226s Setting up autopkgtest-satdep (0) ... 4228s (Reading database ... 81125 files and directories currently installed.) 4228s Removing autopkgtest-satdep (0) ... 4229s autopkgtest [08:49:18]: test mri-core: [----------------------- 4229s installing system gems into jruby: 4229s * diff-lcs-1.5.1 4229s * minitest-5.15.0 4229s * power_assert-2.0.1 4229s * rake-13.0.6 4229s * rexml-3.2.5 4229s * rspec-3.13.0 4229s * rspec-core-3.13.0 4229s * rspec-expectations-3.13.0 4229s * rspec-mocks-3.13.0 4229s * rspec-support-3.13.1 4229s * test-unit-3.5.3 4229s ** debugging mode enabled ** 4229s excluded test: test/mri/excludes/TestBasicInstructions.rb::test_regexp 4229s excluded test: test/mri/excludes/TestThread.rb::test_thread_join_in_trap 4229s excluded test: test/mri/excludes/TestThread.rb::test_thread_value_in_trap 4229s excluded test: test/mri/excludes/TestAutoload.rb::test_autoload_same_file_with_raise 4235s /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 4242s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/ruby/test_memory_view.rb: no such file to load -- -test-/memory_view 4243s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/ruby/test_refinement.rb:2621: warning: TestRefinement::TestImport::B has ancestors, but Refinement#import_methods doesn't import their methods 4243s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/ruby/test_time_tz.rb: no such file to load -- -test-/time 4244s Run options: 4244s --seed=47556 4244s --color=never 4244s -v 4244s --excludes=test/mri/excludes:test/mri/excludes_wip 4244s -q 4244s -- 4244s 4244s # Running tests: 4244s 4244s [ 1/5474] TestMarshal#test_object_subclass = 0.10 s 4244s [ 2/5474] TestMarshal#test_undumpable_message = 0.06 s 4244s [ 3/5474] TestMarshal#test_range_cyclic = 0.01 s 4244s [ 4/5474] TestMarshal#test_symbol2 = 0.00 s 4244s [ 5/5474] TestMarshal#test_anonymous = 0.01 s 4244s [ 6/5474] TestMarshal#test_string_subclass = 0.01 s 4244s [ 7/5474] TestMarshal#test_invalid_byte_sequence_symbol = 0.00 s 4244s [ 8/5474] TestMarshal#test_marshal = 0.01 s 4244s [ 9/5474] TestMarshal#test_change_class_name = 0.00 s 4244s [ 10/5474] TestMarshal#test_symlink = 0.00 s 4244s [ 11/5474] TestMarshal#test_marshal_dump_excess_encoding = 0.00 s 4244s [ 12/5474] TestMarshal#test_marshal_dump_struct_ivar = 0.00 s 4244s [ 13/5474] TestMarshal#test_time = 0.12 s 4244s [ 14/5474] TestMarshal#test_struct_subclass_extend = 0.01 s 4244s [ 15/5474] TestMarshal#test_too_long_string = 0.02 s 4244s [ 16/5474] TestMarshal#test_share = 0.00 s 4244s [ 17/5474] TestMarshal#test_time_ivar = 0.01 s 4244s [ 18/5474] TestMarshal#test_gc = 0.04 s 4244s [ 19/5474] TestMarshal#test_nil = 0.00 s 4244s [ 20/5474] TestMarshal#test_false = 0.00 s 4244s [ 21/5474] TestMarshal#test_exception = 0.08 s 4244s [ 22/5474] TestMarshal#test_float = 0.01 s 4244s [ 23/5474] TestMarshal#test_bignum = 0.00 s 4244s [ 24/5474] TestMarshal#test_symbol = 0.03 s 4244s [ 25/5474] TestMarshal#test_marshal_dump_extra_iv = 0.00 s 4244s [ 26/5474] TestMarshal#test_regexp = 0.01 s 4244s [ 27/5474] TestMarshal#test_marshal_regexp_encoding = 0.00 s 4244s [ 28/5474] TestMarshal#test_fixnum = 0.00 s 4244s [ 29/5474] TestMarshal#test_object = 0.00 s 4244s [ 30/5474] TestMarshal#test_hash = 0.00 s 4244s [ 31/5474] TestMarshal#test_dump_buffer = 0.00 s 4244s [ 32/5474] TestMarshal#test_string = 0.01 s 4244s [ 33/5474] TestMarshal#test_extend = 0.01 s 4244s [ 34/5474] TestMarshal#test_array_subclass = 0.00 s 4244s [ 35/5474] TestMarshal#test_struct = 0.00 s 4244s [ 36/5474] TestMarshal#test_exception_subclass = 0.00 s 4244s [ 37/5474] TestMarshal#test_hash_extend = 0.00 s 4244s [ 38/5474] TestMarshal#test_class = 0.00 s 4244s [ 39/5474] TestMarshal#test_marshal_proc_freeze = 0.00 s 4244s [ 40/5474] TestMarshal#test_array = 0.00 s 4244s [ 41/5474] TestMarshal#test_true = 0.00 s 4244s [ 42/5474] TestMarshal#test_object_subclass_extend = 0.00 s 4244s [ 43/5474] TestMarshal#test_struct_subclass = 0.00 s 4244s [ 44/5474] TestMarshal#test_string_crlf = 0.00 s 4244s [ 45/5474] TestMarshal#test_struct_ivar = 0.00 s 4244s [ 46/5474] TestMarshal#test_marshal_honor_post_proc_value_for_link = 0.00 s 4244s [ 47/5474] TestMarshal#test_float_inf_nan = 0.01 s 4244s [ 48/5474] TestMarshal#test_method_missing_without_respond_to = 0.00 s 4244s [ 49/5474] TestMarshal#test_hash_subclass = 0.00 s 4244s [ 50/5474] TestMarshal#test_marshal_cloned_class = 0.00 s 4244s [ 51/5474] TestMarshal#test_string_subclass_cycle = 0.01 s 4244s [ 52/5474] TestMarshal#test_undumpable_data = 0.01 s 4244s [ 53/5474] TestMarshal#test_struct_toplevel = 0.00 s 4244s [ 54/5474] TestMarshal#test_array_ivar = 0.00 s 4244s [ 55/5474] TestMarshal#test_marshal_symbol_ascii8bit = 0.00 s 4244s [ 56/5474] TestMarshal#test_marshal_respond_to_arity = 0.00 s 4244s [ 57/5474] TestMarshal#test_packed_string = 0.00 s 4244s [ 58/5474] TestMarshal#test_string_subclass_extend = 0.01 s 4244s [ 59/5474] TestMarshal#test_marshal_encoding_encoding = 0.00 s 4244s [ 60/5474] TestMarshal#test_marshal_exception = 0.00 s 4244s [ 61/5474] TestMarshal#test_range_subclass = 0.00 s 4244s [ 62/5474] TestMarshal#test_string_escape = 0.00 s 4244s [ 63/5474] TestMarshal#test_string_ivar = 0.00 s 4244s [ 64/5474] TestMarshal#test_range = 0.00 s 4244s [ 65/5474] TestMarshal#test_marshal_proc_string_encoding = 0.00 s 4244s [ 66/5474] TestMarshal#test_hash_default = 0.00 s 4244s [ 67/5474] TestMarshal#test_limit = 0.00 s 4244s [ 68/5474] TestMarshal#test_marshal_keyword_init_struct = 0.01 s 4245s [ 69/5474] TestMarshal#test_userdef_invalid = 0.01 s 4245s [ 70/5474] TestMarshal#test_marshal_dump_recursion = 0.00 s 4245s [ 71/5474] TestMarshal#test_pipe = 0.02 s 4245s [ 72/5474] TestMarshal#test_context_switch = 0.04 s 4245s [ 73/5474] TestMarshal#test_time_in_array = 0.00 s 4245s [ 74/5474] TestMarshal#test_marshal_private_class = 0.00 s 4245s [ 75/5474] TestMarshal#test_hash_ivar = 0.01 s 4245s [ 76/5474] TestMarshal#test_regexp2 = 0.02 s 4245s [ 77/5474] TestMarshal#test_marshal_string_encoding = 0.00 s 4245s [ 78/5474] TestMarshal#test_marshal_flonum_reference = 0.00 s 4245s [ 79/5474] TestMarshal#test_marshal_dump = 0.00 s 4245s [ 80/5474] TestMarshal#test_object_extend = 0.00 s 4245s [ 81/5474] TestMarshal#test_extend_string = 0.01 s 4245s [ 82/5474] TestMarshal#test_string_empty = 0.00 s 4245s [ 83/5474] TestMarshal#test_regexp_subclass = 0.00 s 4245s [ 84/5474] TestMarshal#test_hash_default_proc = 0.00 s 4245s [ 85/5474] TestArray#test_shared_array_reject! = 0.01 s 4245s [ 86/5474] TestArray#test_aset_error = 0.02 s 4245s [ 87/5474] TestArray#test_cycle = 0.01 s 4245s [ 88/5474] TestArray#test_at = 0.00 s 4245s [ 89/5474] TestArray#test_reverse = 0.00 s 4245s [ 90/5474] TestArray#test_VERY_EQUAL = 0.00 s 4245s [ 91/5474] TestArray#test_times = 0.00 s 4245s [ 92/5474] TestArray#test_sort_bang_with_freeze = 0.00 s 4245s [ 93/5474] TestArray#test_prepend = 0.00 s 4245s [ 94/5474] TestArray#test_first2 = 0.00 s 4245s [ 95/5474] TestArray#test_eql? = 0.01 s 4245s [ 96/5474] TestArray#test_join_recheck_array_length = 0.01 s 4245s [ 97/5474] TestArray#test_pop = 0.00 s 4245s [ 98/5474] TestArray#test_values_at2 = 0.00 s 4245s [ 99/5474] TestArray#test_zip = 0.01 s 4245s [ 100/5474] TestArray#test_unshift_error = 0.00 s 4245s [ 101/5474] TestArray#test_bsearch_index_typechecks_return_values = 0.00 s 4245s [ 102/5474] TestArray#test_zip_bug = 0.00 s 4245s [ 103/5474] TestArray#test_fill2 = 0.00 s 4245s [ 104/5474] TestArray#test_flatten! = 0.00 s 4245s [ 105/5474] TestArray#test_slice_out_of_range = 0.00 s 4245s [ 106/5474] TestArray#test_slice! = 0.01 s 4245s [ 107/5474] TestArray#test_flatten_respond_to_missing = 0.00 s 4245s [ 108/5474] TestArray#test_PLUS = 0.00 s 4245s [ 109/5474] TestArray#test_drop_while = 0.00 s 4245s [ 110/5474] TestArray#test_ary_new = 0.00 s 4245s [ 111/5474] TestArray#test_unshift_frozen = 0.00 s 4245s [ 112/5474] TestArray#test_intersect_big_array = 0.01 s 4245s [ 113/5474] TestArray#test_bsearch_index_in_find_any_mode = 0.02 s 4245s [ 114/5474] TestArray#test_sort_by! = 0.00 s 4245s [ 115/5474] TestArray#test_find_all_0 = 0.01 s 4245s [ 116/5474] TestArray#test_uniq_bang_with_block = 0.01 s 4245s [ 117/5474] TestArray#test_take_while = 0.00 s 4245s [ 118/5474] TestArray#test_flatten_error = 0.00 s 4245s [ 119/5474] TestArray#test_MUL = 0.00 s 4245s [ 120/5474] TestArray#test_repeated_permutation = 0.04 s 4245s [ 121/5474] TestArray#test_uniq = 0.02 s 4245s [ 122/5474] TestArray#test_empty? = 0.01 s 4249s [ 123/5474] TestArray#test_repeated_combination_stack_error = 3.60 s 4249s [ 124/5474] TestArray#test_dig = 0.00 s 4249s [ 125/5474] TestArray#test_each_index = 0.01 s 4249s [ 126/5474] TestArray#test_hash = 0.00 s 4249s [ 127/5474] TestArray#test_select! = 0.01 s 4249s [ 128/5474] TestArray#test_flattern_singleton_class! = 0.00 s 4249s [ 129/5474] TestArray#test_append = 0.00 s 4249s [ 130/5474] TestArray#test_iseq_shared_array_reject! = 0.01 s 4249s [ 131/5474] TestArray#test_intersection_big_array = 0.00 s 4249s [ 132/5474] TestArray#test_delete_if = 0.01 s 4249s [ 133/5474] TestArray#test_to_h_block = 0.01 s 4249s [ 134/5474] TestArray#test_uniq_0 = 0.00 s 4249s [ 135/5474] TestArray#test_OR_in_order = 0.00 s 4249s [ 136/5474] TestArray#test_shift_shared_ary = 0.00 s 4249s [ 137/5474] TestArray#test_rotate = 0.00 s 4249s [ 138/5474] TestArray#test_shift2 = 0.00 s 4249s [ 139/5474] TestArray#test_assoc = 0.00 s 4249s [ 140/5474] TestArray#test_01_square_brackets = 0.00 s 4249s [ 141/5474] TestArray#test_ASET = 0.00 s 4249s [ 142/5474] TestArray#test_00_new = 0.00 s 4249s [ 143/5474] TestArray#test_drop = 0.00 s 4249s [ 144/5474] TestArray#test_sort_0 = 0.00 s 4249s [ 145/5474] TestArray#test_clear = 0.00 s 4249s [ 146/5474] TestArray#test_shuffle_random = 0.04 s 4249s [ 147/5474] TestArray#test_uniq! = 0.01 s 4249s [ 148/5474] TestArray#test_replace_shared_ary = 0.00 s 4249s [ 149/5474] TestArray#test_first = 0.00 s 4249s [ 150/5474] TestArray#test_minmax = 0.01 s 4249s [ 151/5474] TestArray#test_join2 = 0.01 s 4249s [ 152/5474] TestArray#test_product2 = 0.00 s 4249s [ 153/5474] TestArray#test_product = 0.01 s 4249s [ 154/5474] TestArray#test_dup = 0.00 s 4249s [ 155/5474] TestArray#test_min = 0.01 s 4249s [ 156/5474] TestArray#test_values_at = 0.00 s 4254s [ 157/5474] TestArray#test_permutation_stack_error = 5.32 s 4254s [ 158/5474] TestArray#test_intersection = 0.00 s 4254s [ 159/5474] TestArray#test_big_array_literal_with_kwsplat = 0.04 s 4254s [ 160/5474] TestArray#test_intersect? = 0.00 s 4254s [ 161/5474] TestArray#test_reverse_each2 = 0.00 s 4254s [ 162/5474] TestArray#test_bsearch_typechecks_return_values = 0.01 s 4254s [ 163/5474] TestArray#test_flatten_splat = 0.00 s 4254s [ 164/5474] TestArray#test_sort! = 0.01 s 4260s [ 165/5474] TestArray#test_count = 5.57 s 4260s [ 166/5474] TestArray#test_clear2 = 0.00 s 4260s [ 167/5474] TestArray#test_array_andor_0 = 0.00 s 4260s [ 168/5474] TestArray#test_repeated_combination = 0.01 s 4260s [ 169/5474] TestArray#test_delete = 0.00 s 4260s [ 170/5474] TestArray#test_flatten_splat! = 0.00 s 4260s [ 171/5474] TestArray#test_insert = 0.00 s 4260s [ 172/5474] TestArray#test_compact_0 = 0.00 s 4260s [ 173/5474] TestArray#test_reject! = 0.01 s 4260s [ 174/5474] TestArray#test_rindex = 0.02 s 4260s [ 175/5474] TestArray#test_combination2 = 0.00 s 4264s [ 176/5474] TestArray#test_shared_marking = 3.74 s 4264s [ 177/5474] TestArray#test_rotate! = 0.00 s 4264s [ 178/5474] TestArray#test_to_h = 0.00 s 4264s [ 179/5474] TestArray#test_equal = 0.00 s 4264s [ 180/5474] TestArray#test_flatten = 0.00 s 4264s [ 181/5474] TestArray#test_union_big_array = 0.00 s 4267s [ 182/5474] TestArray#test_repeated_permutation_stack_error = 3.64 s 4267s [ 183/5474] TestArray#test_bsearch_index_with_no_block = 0.00 s 4267s [ 184/5474] TestArray#test_bsearch_with_no_block = 0.00 s 4267s [ 185/5474] TestArray#test_sort = 0.00 s 4267s [ 186/5474] TestArray#test_fill_0 = 0.01 s 4267s [ 187/5474] TestArray#test_unshift = 0.00 s 4267s [ 188/5474] TestArray#test_fill_negative_length = 0.00 s 4267s [ 189/5474] TestArray#test_initialize2 = 0.00 s 4267s [ 190/5474] TestArray#test_zip_with_enumerator = 0.01 s 4267s [ 191/5474] TestArray#test_flatten_recursive = 0.00 s 4267s [ 192/5474] TestArray#test_filter! = 0.00 s 4267s [ 193/5474] TestArray#test_transpose = 0.00 s 4267s [ 194/5474] TestArray#test_to_a = 0.00 s 4267s [ 195/5474] TestArray#test_compact! = 0.00 s 4267s [ 196/5474] TestArray#test_pack = 0.00 s 4267s [ 197/5474] TestArray#test_try_convert = 0.00 s 4267s [ 198/5474] TestArray#test_to_a2 = 0.00 s 4267s [ 199/5474] TestArray#test_combination = 0.00 s 4267s [ 200/5474] TestArray#test_difference = 0.00 s 4267s [ 201/5474] TestArray#test_flattern_singleton_class = 0.00 s 4267s [ 202/5474] TestArray#test_bsearch_in_find_any_mode = 0.01 s 4267s [ 203/5474] TestArray#test_aref = 0.00 s 4267s [ 204/5474] TestArray#test_to_ary = 0.02 s 4267s [ 205/5474] TestArray#test_initialize = 0.01 s 4267s [ 206/5474] TestArray#test_OR = 0.00 s 4267s [ 207/5474] TestArray#test_keep_if = 0.01 s 4267s [ 208/5474] TestArray#test_flatten_empty! = 0.00 s 4267s [ 209/5474] TestArray#test_flatten_level0! = 0.00 s 4267s [ 210/5474] TestArray#test_bsearch_in_find_minimum_mode = 0.00 s 4267s [ 211/5474] TestArray#test_replace = 0.00 s 4267s [ 212/5474] TestArray#test_delete_at = 0.00 s 4267s [ 213/5474] TestArray#test_collect! = 0.00 s 4272s [ 214/5474] TestArray#test_sort_with_replace = 5.10 s 4272s [ 215/5474] TestArray#test_shuffle = 0.02 s 4272s [ 216/5474] TestArray#test_to_s = 0.01 s 4272s [ 217/5474] TestArray#test_difference_big_array = 0.00 s 4272s [ 218/5474] TestArray#test_equal_resize = 0.00 s 4272s [ 219/5474] TestArray#test_MINUS = 0.00 s 4272s [ 220/5474] TestArray#test_slice = 0.00 s 4272s [ 221/5474] TestArray#test_slice_out_of_range! = 0.00 s 4272s [ 222/5474] TestArray#test_concat = 0.00 s 4272s [ 223/5474] TestArray#test_fetch = 0.00 s 4272s [ 224/5474] TestArray#test_ary_to_ary = 0.00 s 4272s [ 225/5474] TestArray#test_percent_i = 0.00 s 4272s [ 226/5474] TestArray#test_sort_uncomparable = 0.01 s 4272s [ 227/5474] TestArray#test_compact = 0.00 s 4272s [ 228/5474] TestArray#test_AND = 0.00 s 4272s [ 229/5474] TestArray#test_misc_0 = 0.01 s 4272s [ 230/5474] TestArray#test_split_0 = 0.00 s 4272s [ 231/5474] TestArray#test_rindex2 = 0.01 s 4272s [ 232/5474] TestArray#test_flatten_level0 = 0.00 s 4272s [ 233/5474] TestArray#test_index = 0.00 s 4272s [ 234/5474] TestArray#test_last = 0.00 s 4272s [ 235/5474] TestArray#test_0_literal = 0.00 s 4272s [ 236/5474] TestArray#test_max = 0.01 s 4272s [ 237/5474] TestArray#test_shift = 0.00 s 4272s [ 238/5474] TestArray#test_beg_end_0 = 0.01 s 4272s [ 239/5474] TestArray#test_slice_frozen_array = 0.00 s 4272s [ 240/5474] TestArray#test_length = 0.00 s 4272s [ 241/5474] TestArray#test_each = 0.00 s 4273s [ 242/5474] TestArray#test_flatten_wrong_argument = 0.00 s 4273s [ 243/5474] TestArray#test_splice = 0.00 s 4273s [ 244/5474] TestArray#test_filter = 0.00 s 4273s [ 245/5474] TestArray#test_max_uncomparable = 0.00 s 4273s [ 246/5474] TestArray#test_push = 0.00 s 4273s [ 247/5474] TestArray#test_permutation = 0.01 s 4273s [ 248/5474] TestArray#test_EQUAL = 0.00 s 4273s [ 249/5474] TestArray#test_union = 0.00 s 4273s [ 250/5474] TestArray#test_AND_big_array = 0.00 s 4273s [ 251/5474] TestArray#test_map! = 0.00 s 4273s [ 252/5474] TestArray#test_index2 = 0.00 s 4273s [ 253/5474] TestArray#test_join_recheck_elements_type = 0.00 s 4273s [ 254/5474] TestArray#test_size = 0.00 s 4273s [ 255/5474] TestArray#test_OR_big_in_order = 0.01 s 4273s [ 256/5474] TestArray#test_min_uncomparable = 0.01 s 4273s [ 257/5474] TestArray#test_reverse! = 0.00 s 4273s [ 258/5474] TestArray#test_reverse_each = 0.01 s 4273s [ 259/5474] TestArray#test_CMP = 0.00 s 4273s [ 260/5474] TestArray#test_rassoc = 0.00 s 4273s [ 261/5474] TestArray#test_OR_big_array = 0.00 s 4273s [ 262/5474] TestArray#test_LSHIFT = 0.00 s 4273s [ 263/5474] TestArray#test_MINUS_big_array = 0.01 s 4273s [ 264/5474] TestArray#test_empty_0 = 0.00 s 4273s [ 265/5474] TestArray#test_reject = 0.00 s 4273s [ 266/5474] TestArray#test_fill = 0.00 s 4273s [ 267/5474] TestArray#test_join = 0.03 s 4273s [ 268/5474] TestArray#test_uniq_with_block = 0.01 s 4273s [ 269/5474] TestArray#test_bsearch_index_in_find_minimum_mode = 0.01 s 4273s [ 270/5474] TestArray#test_percent_I = 0.00 s 4273s [ 271/5474] TestArray#test_clone = 0.00 s 4273s [ 272/5474] TestArray#test_take = 0.00 s 4273s [ 273/5474] TestArray#test_select = 0.00 s 4273s [ 274/5474] TestArray#test_last2 = 0.00 s 4273s [ 275/5474] TestArray#test_delete2 = 0.00 s 4273s [ 276/5474] TestArray#test_include? = 0.01 s 4273s [ 277/5474] TestArray#test_combination_clear = 0.10 s 4273s [ 278/5474] TestArray#test_sum = 0.02 s 4273s [ 279/5474] TestArray#test_sample = 0.47 s 4273s [ 280/5474] TestArray#test_AREF = 0.00 s 4273s [ 281/5474] TestArray#test_uniq_bang_with_freeze = 0.00 s 4273s [ 282/5474] TestRand#test_0x4000000000000001 = 0.03 s 4273s [ 283/5474] TestRand#test_mt = 0.02 s 4273s [ 284/5474] TestRand#test_marshal = 0.00 s 4273s [ 285/5474] TestRand#test_random_argument_error = 0.01 s 4273s [ 286/5474] TestRand#test_0x3fffffff = 0.01 s 4273s [ 287/5474] TestRand#test_0x100000001 = 0.01 s 4277s [ 288/5474] TestRand#test_default_seed = 3.72 s 4277s [ 289/5474] TestRand#test_0x3fffffffffffffff = 0.01 s 4277s [ 290/5474] TestRand#test_types = 0.02 s 4277s [ 291/5474] TestRand#test_seed = 0.00 s 4277s [ 292/5474] TestRand#test_random_float = 0.02 s 4277s [ 293/5474] TestRand#test_0x10000000000 = 0.01 s 4277s [ 294/5474] TestRand#test_rand_0x100000000 = 0.01 s 4277s [ 295/5474] TestRand#test_random_ulong_limited = 0.01 s 4277s [ 296/5474] TestRand#test_0x1000000000000 = 0.01 s 4277s [ 297/5474] TestRand#test_random_equal = 0.00 s 4277s [ 298/5474] TestRand#test_random_seed = 0.00 s 4277s [ 299/5474] TestRand#test_0x40000001 = 0.01 s 4277s [ 300/5474] TestRand#test_fork_shuffle = 0.00 s 4277s [ 301/5474] TestRand#test_random_dup = 0.01 s 4277s [ 302/5474] TestRand#test_0x40000000 = 0.01 s 4277s [ 303/5474] TestRand#test_0x1000000000001 = 0.01 s 4277s [ 304/5474] TestRand#test_big_seed = 0.05 s 4277s [ 305/5474] TestRand#test_random_gc = 0.00 s 4277s [ 306/5474] TestRand#test_random_type_error = 0.00 s 4277s [ 307/5474] TestRand#test_urandom = 0.00 s 4277s [ 308/5474] TestRand#test_random_bytes = 0.00 s 4277s [ 309/5474] TestRand#test_shuffle = 0.00 s 4277s [ 310/5474] TestRand#test_0xffffffff = 0.01 s 4277s [ 311/5474] TestRand#test_rand_reseed_on_fork = 0.00 s 4277s [ 312/5474] TestRand#test_random_ulong_limited_no_rand = 0.00 s 4277s [ 313/5474] TestRand#test_random_range = 0.01 s 4277s [ 314/5474] TestRand#test_srand = 0.01 s 4277s [ 315/5474] TestRand#test_new_seed = 0.00 s 4277s [ 316/5474] TestRand#test_initialize_frozen = 0.00 s 4277s [ 317/5474] TestRand#test_0x10000 = 0.00 s 4277s [ 318/5474] TestRand#test_0x4000000000000000 = 0.00 s 4277s [ 319/5474] TestRand#test_marshal_load_frozen = 0.00 s 4277s [ 320/5474] TestRand#test_0x100000000 = 0.00 s 4277s [ 321/5474] TestPatternMatching::TestPatternMatchingRefinements#test_refinements = 0.01 s 4281s [ 322/5474] TestArgf#test_readbyte = 3.57 s 4285s [ 323/5474] TestArgf#test_each_char = 3.95 s 4287s [ 324/5474] TestArgf#test_readlines_chomp = 2.46 s 4291s [ 325/5474] TestArgf#test_close_replace = 3.67 s 4295s [ 326/5474] TestArgf#test_file = 3.73 s 4298s [ 327/5474] TestArgf#test_wrong_type = 3.39 s 4301s [ 328/5474] TestArgf#test_each_line_paragraph = 2.51 s 4304s [ 329/5474] TestArgf#test_set_pos = 3.67 s 4308s [ 330/5474] TestArgf#test_readpartial2 = 3.66 s 4311s [ 331/5474] TestArgf#test_tell = 3.41 s 4319s [ 332/5474] TestArgf#test_skip_in_each_line = 7.36 s 4322s [ 333/5474] TestArgf#test_read3 = 3.71 s 4326s [ 334/5474] TestArgf#test_read2_with_not_empty_buffer = 3.79 s 4330s [ 335/5474] TestArgf#test_getbyte = 3.39 s 4333s [ 336/5474] TestArgf#test_readchar = 3.32 s 4336s [ 337/5474] TestArgf#test_each_codepoint = 3.42 s 4340s [ 338/5474] TestArgf#test_each_byte = 3.49 s 4342s [ 339/5474] TestArgf#test_readline_chomp = 2.44 s 4346s [ 340/5474] TestArgf#test_read = 3.81 s 4349s [ 341/5474] TestArgf#test_gets_chomp = 2.47 s 4349s [ 342/5474] TestArgf#test_inplace_to_path = 0.01 s 4352s [ 343/5474] TestArgf#test_closed = 3.55 s 4356s [ 344/5474] TestArgf#test_skip_in_each_byte = 3.68 s 4356s [ 345/5474] TestArgf#test_new_lineno_each_char = 0.00 s 4360s [ 346/5474] TestArgf#test_close = 3.70 s 4360s [ 347/5474] TestArgf#test_inplace_suffix_encoding = 0.02 s 4362s [ 348/5474] TestArgf#test_inplace_dup = 2.58 s 4366s [ 349/5474] TestArgf#test_sized_read = 4.05 s 4370s [ 350/5474] TestArgf#test_binmode = 3.56 s 4370s [ 351/5474] TestArgf#test_inplace_invalid_backup = 0.00 s 4370s [ 352/5474] TestArgf#test_unreadable = 0.01 s 4374s [ 353/5474] TestArgf#test_fileno = 3.95 s 4376s [ 354/5474] TestArgf#test_inplace = 2.66 s 4380s [ 355/5474] TestArgf#test_seek = 3.58 s 4383s [ 356/5474] TestArgf#test_lineno3 = 2.63 s 4387s [ 357/5474] TestArgf#test_getc = 4.07 s 4390s [ 358/5474] TestArgf#test_readpartial_eof_twice = 3.67 s 4396s [ 359/5474] TestArgf#test_each_line_chomp = 5.32 s 4399s [ 360/5474] TestArgf#test_read2 = 3.72 s 4403s [ 361/5474] TestArgf#test_read_nonblock = 3.65 s 4407s [ 362/5474] TestArgf#test_argv = 3.85 s 4410s [ 363/5474] TestArgf#test_filename = 3.63 s 4415s [ 364/5474] TestArgf#test_readlines_twice = 4.40 s 4418s [ 365/5474] TestArgf#test_each_line = 3.54 s 4418s [ 366/5474] TestArgf#test_new_lineno_each = 0.01 s 4422s [ 367/5474] TestArgf#test_readpartial = 3.39 s 4426s [ 368/5474] TestArgf#test_rewind = 3.67 s 4429s [ 369/5474] TestArgf#test_skip = 3.45 s 4429s [ 370/5474] TestAutoload#test_override_autoload = 0.01 s 4429s [ 371/5474] TestAutoload#test_require_implemented_in_ruby_is_called = 0.01 s 4431s [ 372/5474] TestAutoload#test_non_realpath_in_loadpath = 2.39 s 4432s [ 373/5474] TestAutoload#test_override_while_autoloading = 0.51 s 4432s [ 374/5474] TestAutoload#test_autoload_while_autoloading = 0.02 s 4432s [ 375/5474] TestAutoload#test_require_explicit = 0.01 s 4436s [ 376/5474] TestAutoload#test_autoload_after_failed_and_removed_from_loaded_features = 3.75 s 4436s [ 377/5474] TestAutoload#test_nameerror_when_autoload_did_not_define_the_constant = 0.00 s 4436s [ 378/5474] TestAutoload#test_threaded_accessing_inner_constant = 0.51 s 4436s [ 379/5474] TestAutoload#test_autoload_p = 0.01 s 4437s [ 380/5474] TestAutoload#test_threaded_accessing_constant = 0.51 s 4437s [ 381/5474] TestAutoload#test_autoload_with_unqualified_file_name = 0.01 s 4437s [ 382/5474] TestRubyPrimitive#test_aset = 0.00 s 4437s [ 383/5474] TestRubyPrimitive#test_constatant_cache4 = 0.00 s 4437s [ 384/5474] TestRubyPrimitive#test_cvar_from_instance_method = 0.00 s 4437s [ 385/5474] TestRubyPrimitive#test_opassign = 0.00 s 4437s [ 386/5474] TestRubyPrimitive#test_concatarray_ruby_dev_41933 = 0.01 s 4437s [ 387/5474] TestRubyPrimitive#test_cvar_from_singleton_method2 = 0.00 s 4437s [ 388/5474] TestRubyPrimitive#test_lvar = 0.00 s 4437s [ 389/5474] TestRubyPrimitive#test_fact = 0.01 s 4437s [ 390/5474] TestRubyPrimitive#test_list_expand = 0.00 s 4437s [ 391/5474] TestRubyPrimitive#test_cvar_from_singleton_method = 0.00 s 4437s [ 392/5474] TestRubyPrimitive#test_constant_cache = 0.00 s 4437s [ 393/5474] TestRubyPrimitive#test_constant_cache2 = 0.00 s 4437s [ 394/5474] TestRubyPrimitive#test_attr_setter = 0.00 s 4437s [ 395/5474] TestRubyPrimitive#test_constant_cache5 = 0.00 s 4437s [ 396/5474] TestRubyPrimitive#test_constant_cache3 = 0.00 s 4437s [ 397/5474] TestRubyPrimitive#test_aref = 0.00 s 4437s [ 398/5474] TestRubyPrimitive#test_gvar = 0.00 s 4437s [ 399/5474] TestRubyPrimitive#test_mod = 0.00 s 4437s [ 400/5474] TestRubyPrimitive#test_constant = 0.03 s 4437s [ 401/5474] TestRubyPrimitive#test_backref = 0.00 s 4437s [ 402/5474] TestRubyPrimitive#test_length = 0.00 s 4437s [ 403/5474] TestRubyPrimitive#test_opassign_and_or = 0.00 s 4437s [ 404/5474] TestRubyPrimitive#test_mul = 0.00 s 4437s [ 405/5474] TestRubyPrimitive#test_not = 0.00 s 4437s [ 406/5474] TestRubyPrimitive#test_div = 0.00 s 4437s [ 407/5474] TestAssignment#test_assign_ary = 0.00 s 4437s [ 408/5474] TestAssignment#test_massign_splat = 0.01 s 4437s [ 409/5474] TestAssignment#test_multi = 0.00 s 4437s [ 410/5474] TestAssignment#test_massign_in_cond = 0.00 s 4437s [ 411/5474] TestAssignment#test_break = 0.01 s 4437s [ 412/5474] TestAssignment#test_assign_abbreviated = 0.00 s 4437s [ 413/5474] TestAssignment#test_to_ary_splat = 0.01 s 4437s [ 414/5474] TestAssignment#test_assign_splat = 0.00 s 4437s [ 415/5474] TestAssignment#test_next = 0.02 s 4437s [ 416/5474] TestAssignment#test_massign_simple = 0.00 s 4437s [ 417/5474] TestAssignment#test_assign = 0.00 s 4437s [ 418/5474] TestAssignment#test_const_massign = 0.00 s 4437s [ 419/5474] TestAssignment#test_assign_simple = 0.00 s 4437s [ 420/5474] TestAssignment#test_lambda = 0.01 s 4437s [ 421/5474] TestAssignment#test_assign_rescue = 0.00 s 4437s [ 422/5474] TestAssignment#test_nested_massign = 0.00 s 4437s [ 423/5474] TestAssignment#test_assign_ary_splat = 0.00 s 4437s [ 424/5474] TestAssignment#test_massign = 0.00 s 4437s [ 425/5474] TestAssignment#test_return = 0.01 s 4437s [ 426/5474] TestCondition#test_condition = 0.00 s 4440s [ 427/5474] TestConst#test_redefinition_memory_leak = 3.10 s 4440s [ 428/5474] TestConst#test_const = 0.00 s 4440s [ 429/5474] TestConst#test_const_access_from_nil = 0.00 s 4440s [ 430/5474] TestConst#test_toplevel_lookup = 0.00 s 4448s [ 431/5474] TestKeywordArguments#test_gced_object_in_stack = 7.80 s 4448s [ 432/5474] TestKeywordArguments#test_non_keyword_hash_subclass = 0.00 s 4448s [ 433/5474] TestKeywordArguments#test_do_not_use_newarraykwsplat = 0.00 s 4448s [ 434/5474] TestKeywordArguments#test_required_keyword_with_newline = 0.00 s 4448s [ 435/5474] TestKeywordArguments#test_method_missing_kwsplat = 0.02 s 4448s [ 436/5474] TestKeywordArguments#test_zsuper_only_anonymous_kwrest = 0.00 s 4448s [ 437/5474] TestKeywordArguments#test_unknown_keyword_with_block = 0.00 s 4448s [ 438/5474] TestKeywordArguments#test_define_method_method_kwsplat = 0.02 s 4448s [ 439/5474] TestKeywordArguments#test_p5 = 0.00 s 4448s [ 440/5474] TestKeywordArguments#test_explicit_super_kwsplat = 0.02 s 4448s [ 441/5474] TestKeywordArguments#test_p3 = 0.00 s 4448s [ 442/5474] TestKeywordArguments#test_p1 = 0.00 s 4448s [ 443/5474] TestKeywordArguments#test_kwrest_overwritten = 0.01 s 4448s [ 444/5474] TestKeywordArguments#test_splat_hash_conversion = 0.00 s 4448s [ 445/5474] TestKeywordArguments#test_precedence_of_keyword_arguments = 0.00 s 4451s [ 446/5474] TestKeywordArguments#test_top_ruby2_keywords = 2.57 s 4451s [ 447/5474] TestKeywordArguments#test_UnboundMethod_bindcall_kwsplat_call = 0.02 s 4451s [ 448/5474] TestKeywordArguments#test_ruby2_keywords = 0.04 s 4451s [ 449/5474] TestKeywordArguments#test_unknown_keyword = 0.00 s 4451s [ 450/5474] TestKeywordArguments#test_splat_hash = 0.01 s 4451s [ 451/5474] TestKeywordArguments#test_f10 = 0.00 s 4451s [ 452/5474] TestKeywordArguments#test_super_with_keyword_kwrest = 0.00 s 4451s [ 453/5474] TestKeywordArguments#test_f12 = 0.00 s 4451s [ 454/5474] TestKeywordArguments#test_splat_empty_hash_with_block_passing = 0.00 s 4451s [ 455/5474] TestKeywordArguments#test_f9 = 0.00 s 4451s [ 456/5474] TestKeywordArguments#test_attr_reader_kwsplat = 0.00 s 4451s [ 457/5474] TestKeywordArguments#test_keyword_no_split = 0.01 s 4451s [ 458/5474] TestKeywordArguments#test_define_method_kwsplat = 0.04 s 4451s [ 459/5474] TestKeywordArguments#test_f5 = 0.00 s 4451s [ 460/5474] TestKeywordArguments#test_f7 = 0.00 s 4451s [ 461/5474] TestKeywordArguments#test_f1 = 0.00 s 4451s [ 462/5474] TestKeywordArguments#test_f3 = 0.00 s 4451s [ 463/5474] TestKeywordArguments#test_splat_keyword_nondestructive = 0.00 s 4451s [ 464/5474] TestKeywordArguments#test_proc_ruby2_keywords = 0.01 s 4451s [ 465/5474] TestKeywordArguments#test_method_parameters = 0.00 s 4451s [ 466/5474] TestKeywordArguments#test_Class_new_method_kwsplat_call = 0.02 s 4451s [ 467/5474] TestKeywordArguments#test_Enumerator_Yielder_yield_kwsplat = 0.03 s 4451s [ 468/5474] TestKeywordArguments#test_block_required_keyword = 0.01 s 4451s [ 469/5474] TestKeywordArguments#test_to_hash_call_during_setup_complex_parameters = 0.00 s 4451s [ 470/5474] TestKeywordArguments#test_attr_writer_method_kwsplat = 0.00 s 4451s [ 471/5474] TestKeywordArguments#test_send_kwsplat = 0.01 s 4451s [ 472/5474] TestKeywordArguments#test_send_method_kwsplat = 0.02 s 4451s [ 473/5474] TestKeywordArguments#test_enumerator_size_kwsplat = 0.02 s 4451s [ 474/5474] TestKeywordArguments#test_precedence_of_keyword_arguments_with_post_argument = 0.00 s 4451s [ 475/5474] TestKeywordArguments#test_instance_exec_kwsplat = 0.02 s 4451s [ 476/5474] TestKeywordArguments#test_attr_reader_method_kwsplat = 0.00 s 4451s [ 477/5474] TestKeywordArguments#test_lambda_kwsplat_call = 0.02 s 4451s [ 478/5474] TestKeywordArguments#test_sym_proc_kwsplat = 0.01 s 4451s [ 479/5474] TestKeywordArguments#test_instance_exec_define_method_kwsplat = 0.02 s 4451s [ 480/5474] TestKeywordArguments#test_bare_kwrest = 0.00 s 4451s [ 481/5474] TestKeywordArguments#test_f8 = 0.00 s 4451s [ 482/5474] TestKeywordArguments#test_sym_proc_method_kwsplat = 0.01 s 4451s [ 483/5474] TestKeywordArguments#test_zsuper_only_named_kwrest = 0.00 s 4451s [ 484/5474] TestKeywordArguments#test_f13 = 0.00 s 4451s [ 485/5474] TestKeywordArguments#test_f11 = 0.01 s 4451s [ 486/5474] TestKeywordArguments#test_required_keyword = 0.01 s 4451s [ 487/5474] TestKeywordArguments#test_super_with_keyword = 0.00 s 4451s [ 488/5474] TestKeywordArguments#test_f2 = 0.00 s 4451s [ 489/5474] TestKeywordArguments#test_f6 = 0.00 s 4451s [ 490/5474] TestKeywordArguments#test_regular_kwsplat = 0.01 s 4451s [ 491/5474] TestKeywordArguments#test_f4 = 0.00 s 4451s [ 492/5474] TestKeywordArguments#test_block = 0.00 s 4451s [ 493/5474] TestKeywordArguments#test_lambda = 0.00 s 4451s [ 494/5474] TestKeywordArguments#test_lambda_method_kwsplat_call = 0.02 s 4451s [ 495/5474] TestKeywordArguments#test_proc_parameters = 0.00 s 4451s [ 496/5474] TestKeywordArguments#test_Thread_new_kwsplat = 0.06 s 4451s [ 497/5474] TestKeywordArguments#test_attr_set_method_cache = 0.01 s 4455s [ 498/5474] TestKeywordArguments#test_dynamic_symbol_keyword = 3.63 s 4455s [ 499/5474] TestKeywordArguments#test_without_paren = 0.00 s 4455s [ 500/5474] TestKeywordArguments#test_super_method_missing_kwsplat = 0.01 s 4455s [ 501/5474] TestKeywordArguments#test_dig_kwsplat = 0.01 s 4455s [ 502/5474] TestKeywordArguments#test_attr_writer_kwsplat = 0.00 s 4455s [ 503/5474] TestKeywordArguments#test_rest_keyrest = 0.00 s 4455s [ 504/5474] TestKeywordArguments#test_keyword_splat_new = 0.03 s 4455s [ 505/5474] TestKeywordArguments#test_many_kwargs = 0.01 s 4455s [ 506/5474] TestKeywordArguments#test_no_implicit_hash_conversion = 0.00 s 4455s [ 507/5474] TestKeywordArguments#test_super_with_anon_restkeywords = 0.00 s 4455s [ 508/5474] TestKeywordArguments#test_implicit_super_kwsplat = 0.01 s 4455s [ 509/5474] TestKeywordArguments#test_Method_call_kwsplat_call = 0.01 s 4455s [ 510/5474] TestKeywordArguments#test_public_send_kwsplat = 0.01 s 4455s [ 511/5474] TestKeywordArguments#test_p2 = 0.00 s 4455s [ 512/5474] TestKeywordArguments#test_p4 = 0.00 s 4455s [ 513/5474] TestKeywordArguments#test_Class_new_kwsplat_call = 0.03 s 4455s [ 514/5474] TestKeywordArguments#test_instance_exec_sym_proc_kwsplat = 0.02 s 4455s [ 515/5474] TestKeywordArguments#test_p6 = 0.01 s 4455s [ 516/5474] TestKeywordArguments#test_instance_exec_method_kwsplat = 0.01 s 4455s [ 517/5474] TestDefaultGems#test_validate_gemspec = 0.01 s 4455s [ 518/5474] TestStruct::SubStruct#test_initialize_with_kw = 0.00 s 4455s [ 519/5474] TestStruct::SubStruct#test_deconstruct_keys = 0.00 s 4455s [ 520/5474] TestStruct::SubStruct#test_aset = 0.06 s 4455s [ 521/5474] TestStruct::SubStruct#test_each_pair = 0.01 s 4455s [ 522/5474] TestStruct::SubStruct#test_public_send = 0.00 s 4455s [ 523/5474] TestStruct::SubStruct#test_ref = 0.00 s 4455s [ 524/5474] TestStruct::SubStruct#test_redefinition_warning = 0.01 s 4455s [ 525/5474] TestStruct::SubStruct#test_dig = 0.00 s 4455s [ 526/5474] TestStruct::SubStruct#test_hash = 0.00 s 4455s [ 527/5474] TestStruct::SubStruct#test_to_h_block = 0.01 s 4455s [ 528/5474] TestStruct::SubStruct#test_eql = 0.00 s 4455s [ 529/5474] TestStruct::SubStruct#test_small_structs = 0.01 s 4455s [ 530/5474] TestStruct::SubStruct#test_inherit = 0.00 s 4455s [ 531/5474] TestStruct::SubStruct#test_big_struct = 0.05 s 4455s [ 532/5474] TestStruct::SubStruct#test_struct = 0.00 s 4455s [ 533/5474] TestStruct::SubStruct#test_values_at = 0.00 s 4455s [ 534/5474] TestStruct::SubStruct#test_inspect = 0.00 s 4455s [ 535/5474] TestStruct::SubStruct#test_struct_new_with_keyword_init = 0.01 s 4455s [ 536/5474] TestStruct::SubStruct#test_comparison_when_recursive = 0.02 s 4455s [ 537/5474] TestStruct::SubStruct#test_to_h = 0.00 s 4455s [ 538/5474] TestStruct::SubStruct#test_equal = 0.00 s 4455s [ 539/5474] TestStruct::SubStruct#test_overridden_aref = 0.00 s 4455s [ 540/5474] TestStruct::SubStruct#test_set = 0.00 s 4455s [ 541/5474] TestStruct::SubStruct#test_bang_mark_in_member = 0.00 s 4455s [ 542/5474] TestStruct::SubStruct#test_struct_new = 0.00 s 4455s [ 543/5474] TestStruct::SubStruct#test_aref = 0.01 s 4455s [ 544/5474] TestStruct::SubStruct#test_initialize = 0.00 s 4455s [ 545/5474] TestStruct::SubStruct#test_new_duplicate = 0.00 s 4455s [ 546/5474] TestStruct::SubStruct#test_setter_method_returns_value = 0.00 s 4455s [ 547/5474] TestStruct::SubStruct#test_members = 0.00 s 4455s [ 548/5474] TestStruct::SubStruct#test_struct_new_with_keyword_init_and_block = 0.00 s 4455s [ 549/5474] TestStruct::SubStruct#test_overridden_aset = 0.00 s 4455s [ 550/5474] TestStruct::SubStruct#test_init_copy = 0.00 s 4455s [ 551/5474] TestStruct::SubStruct#test_each = 0.00 s 4455s [ 552/5474] TestStruct::SubStruct#test_error = 0.00 s 4455s [ 553/5474] TestStruct::SubStruct#test_filter = 0.00 s 4455s [ 554/5474] TestStruct::SubStruct#test_struct_new_with_empty_hash = 0.00 s 4455s [ 555/5474] TestStruct::SubStruct#test_junk = 0.00 s 4455s [ 556/5474] TestStruct::SubStruct#test_morethan10members = 0.01 s 4455s [ 557/5474] TestStruct::SubStruct#test_question_mark_in_member = 0.00 s 4455s [ 558/5474] TestStruct::SubStruct#test_size = 0.00 s 4455s [ 559/5474] TestStruct::SubStruct#test_select = 0.00 s 4455s [ 560/5474] TestNoMethodError#test_new_name_args = 0.00 s 4455s [ 561/5474] TestNoMethodError#test_new_name = 0.00 s 4455s [ 562/5474] TestNoMethodError#test_new_name_args_priv = 0.00 s 4455s [ 563/5474] TestNoMethodError#test_message_encoding = 0.01 s 4455s [ 564/5474] TestNoMethodError#test_to_s = 0.02 s 4455s [ 565/5474] TestNoMethodError#test_new_default = 0.00 s 4455s [ 566/5474] TestNoMethodError#test_new_receiver = 0.01 s 4455s [ 567/5474] TestNoMethodError#test_new_message = 0.00 s 4455s [ 568/5474] TestCall#test_safe_call_block_call = 0.00 s 4455s [ 569/5474] TestCall#test_call_block_order = 0.00 s 4455s [ 570/5474] TestCall#test_call_splat_order = 0.00 s 4455s [ 571/5474] TestCall#test_safe_call_evaluate_arguments_only_method_call_is_made = 0.00 s 4455s [ 572/5474] TestCall#test_safe_call_block_command = 0.00 s 4455s [ 573/5474] TestCall#test_safe_call = 0.00 s 4455s [ 574/5474] TestCall#test_safe_call_block_call_command = 0.00 s 4455s [ 575/5474] TestCall#test_invalid_safe_call = 0.00 s 4455s [ 576/5474] TestCall#test_call = 0.00 s 4455s [ 577/5474] TestCall#test_safe_call_block_call_brace = 0.00 s 4455s [ 578/5474] TestCall#test_callinfo = 0.00 s 4455s [ 579/5474] TestMethodCache#test_undef_with_subclasses_complicated = 0.00 s 4455s [ 580/5474] TestMethodCache#test_negative_cache_with_and_without_subclasses = 0.00 s 4455s [ 581/5474] TestMethodCache#test_undef_with_subclasses = 0.00 s 4455s [ 582/5474] TestMethodCache#test_undef = 0.00 s 4455s [ 583/5474] TestAlias#test_cyclic_zsuper = 0.00 s 4455s [ 584/5474] TestAlias#test_alias_inspect = 0.00 s 4455s [ 585/5474] TestAlias#test_alias = 0.00 s 4459s [ 586/5474] TestAlias#test_alias_in_module = 3.70 s 4459s [ 587/5474] TestAlias#test_send_alias = 0.00 s 4459s [ 588/5474] TestAlias#test_special_const_alias = 0.00 s 4459s [ 589/5474] TestAlias#test_alias_method_equation = 0.00 s 4459s [ 590/5474] TestAlias#test_super_in_aliased_module_method = 0.00 s 4459s [ 591/5474] TestAlias#test_alias_class_method_added = 0.00 s 4463s [ 592/5474] TestAlias#test_alias_wb_miss = 4.39 s 4463s [ 593/5474] TestAlias#test_alias_module_method_added = 0.00 s 4463s [ 594/5474] TestAlias#test_alias_with_zsuper_method = 0.00 s 4463s [ 595/5474] TestAlias#test_nonexistmethod = 0.00 s 4463s [ 596/5474] TestIterator#test_iter_test2 = 0.00 s 4463s [ 597/5474] TestIterator#test_itertest = 0.03 s 4463s [ 598/5474] TestIterator#test_break_from_enum = 0.00 s 4463s [ 599/5474] TestIterator#test_collect = 0.00 s 4463s [ 600/5474] TestIterator#test_assoc_yield = 0.01 s 4463s [ 601/5474] TestIterator#test_argument = 0.00 s 4463s [ 602/5474] TestIterator#test_block_passing = 0.00 s 4463s [ 603/5474] TestIterator#test_yield_vs_call = 0.00 s 4463s [ 604/5474] TestIterator#test_array_for_masgn = 0.00 s 4463s [ 605/5474] TestIterator#test_break = 0.00 s 4463s [ 606/5474] TestIterator#test_return_trace_func = 0.01 s 4463s [ 607/5474] TestIterator#test_break__nested_loop2 = 0.00 s 4463s [ 608/5474] TestIterator#test_enumerator = 0.02 s 4463s [ 609/5474] TestIterator#test_return2 = 0.00 s 4463s [ 610/5474] TestIterator#test_array = 0.00 s 4463s [ 611/5474] TestIterator#test_block_given_within_iterator = 0.00 s 4467s [ 612/5474] TestIterator#test_yield_at_toplevel = 3.91 s 4467s [ 613/5474] TestIterator#test_proc_return2 = 0.00 s 4467s [ 614/5474] TestIterator#test_marity = 0.00 s 4467s [ 615/5474] TestIterator#test_return1 = 0.00 s 4467s [ 616/5474] TestIterator#test_proc_return1 = 0.00 s 4467s [ 617/5474] TestIterator#test_block_argument_without_paren = 0.00 s 4467s [ 618/5474] TestIterator#test_append_method_to_built_in_class = 0.01 s 4467s [ 619/5474] TestIterator#test_block_given = 0.00 s 4467s [ 620/5474] TestIterator#test_break__nested_loop3 = 0.00 s 4467s [ 621/5474] TestIterator#test_block = 0.00 s 4467s [ 622/5474] TestIterator#test_break__nested_loop1 = 0.00 s 4467s [ 623/5474] TestIterator#test_nested_iterator = 0.00 s 4467s [ 624/5474] TestIterator#test_iter4 = 0.00 s 4467s [ 625/5474] TestIterator#test_proc = 0.00 s 4467s [ 626/5474] TestIterator#test_get_block = 0.00 s 4467s [ 627/5474] TestNameError#test_info_method_missing = 0.01 s 4467s [ 628/5474] TestNameError#test_new_name = 0.00 s 4467s [ 629/5474] TestNameError#test_info_const_name = 0.01 s 4467s [ 630/5474] TestNameError#test_info_const = 0.00 s 4467s [ 631/5474] TestNameError#test_new_default = 0.00 s 4467s [ 632/5474] TestNameError#test_new_receiver = 0.01 s 4467s [ 633/5474] TestNameError#test_new_message = 0.00 s 4467s [ 634/5474] TestStringchar#test_string = 0.00 s 4469s [ 635/5474] TestStringchar#test_dump = 1.47 s 4469s [ 636/5474] TestStringchar#test_char = 0.02 s 4469s [ 637/5474] TestStringchar#test_bang = 0.00 s 4469s [ 638/5474] TestVariable#test_local_variables2 = 0.00 s 4469s [ 639/5474] TestVariable#test_external_ivars = 0.00 s 4469s [ 640/5474] TestVariable#test_local_variables = 0.00 s 4469s [ 641/5474] TestVariable#test_local_variables_with_kwarg = 0.00 s 4469s [ 642/5474] TestVariable#test_constant_popped = 0.00 s 4469s [ 643/5474] TestVariable#test_global_variable_popped = 0.00 s 4469s [ 644/5474] TestVariable#test_include_refined_module_class_variable = 0.00 s 4469s [ 645/5474] TestVariable#test_shadowing_local_variables = 0.00 s 4469s [ 646/5474] TestVariable#test_shadowing_block_local_variables = 0.00 s 4469s [ 647/5474] TestVariable#test_local_variables3 = 0.00 s 4469s [ 648/5474] TestPath#test_path = 0.00 s 4469s [ 649/5474] TestString#test_gsub = 0.01 s 4469s [ 650/5474] TestString#test_match_p_regexp = 0.00 s 4469s [ 651/5474] TestString#test_each_char = 0.01 s 4469s [ 652/5474] TestString#test_lstrip = 0.00 s 4469s [ 653/5474] TestString#test_strip = 0.00 s 4469s [ 654/5474] TestString#test_gsub! = 0.00 s 4469s [ 655/5474] TestString#test_downcase2 = 0.00 s 4469s [ 656/5474] TestString#test_reverse = 0.00 s 4469s [ 657/5474] TestString#test_VERY_EQUAL = 0.00 s 4469s [ 658/5474] TestString#test_downcase = 0.00 s 4469s [ 659/5474] TestString#test_sub = 0.01 s 4469s [ 660/5474] TestString#test_times = 0.00 s 4469s [ 661/5474] TestString#test_prepend = 0.00 s 4469s [ 662/5474] TestString#test_split_lookbehind = 0.00 s 4469s [ 663/5474] TestString#test_match_method = 0.00 s 4469s [ 664/5474] TestString#test_eql? = 0.00 s 4469s [ 665/5474] TestString#test_dummy_inspect = 0.00 s 4469s [ 666/5474] TestString#test_squeeze = 0.00 s 4469s [ 667/5474] TestString#test_squeeze! = 0.00 s 4469s [ 668/5474] TestString#test_slice! = 0.00 s 4469s [ 669/5474] TestString#test_PLUS = 0.00 s 4469s [ 670/5474] TestString#test_str_new4 = 0.00 s 4469s [ 671/5474] TestString#test_ord = 0.00 s 4469s [ 672/5474] TestString#test_tr! = 0.00 s 4469s [ 673/5474] TestString#test_upcase2 = 0.00 s 4469s [ 674/5474] TestString#test_MUL = 0.00 s 4469s [ 675/5474] TestString#test_split = 0.00 s 4469s [ 676/5474] TestString#test_intern = 0.00 s 4469s [ 677/5474] TestString#test_lines = 0.00 s 4469s [ 678/5474] TestString#test_strip! = 0.00 s 4469s [ 679/5474] TestString#test_empty? = 0.00 s 4469s [ 680/5474] TestString#test_inspect_nul = 0.00 s 4469s [ 681/5474] TestString#test_succ = 0.00 s 4469s [ 682/5474] TestString#test_split_encoding = 0.01 s 4469s [ 683/5474] TestString#test_capitalize = 0.00 s 4469s [ 684/5474] TestString#test_byteslice = 0.00 s 4469s [ 685/5474] TestString#test_delete! = 0.00 s 4469s [ 686/5474] TestString#test_split_invalid_sequence = 0.00 s 4469s [ 687/5474] TestString#test_hash = 0.00 s 4469s [ 688/5474] TestString#test_clear_nonasciicompat = 0.00 s 4473s [ 689/5474] TestString#test_eq_tilde_can_be_overridden = 3.78 s 4473s [ 690/5474] TestString#test_lstrip_bang = 0.00 s 4473s [ 691/5474] TestString#test_concat_literals = 0.00 s 4473s [ 692/5474] TestString#test_tr_s = 0.00 s 4473s [ 693/5474] TestString#test_chr = 0.00 s 4473s [ 694/5474] TestString#test_split_wchar = 0.01 s 4473s [ 695/5474] TestString#test_clear = 0.00 s 4473s [ 696/5474] TestString#test_ljust = 0.00 s 4473s [ 697/5474] TestString#test_substr_code_range = 0.00 s 4473s [ 698/5474] TestString#test_chars = 0.00 s 4473s [ 699/5474] TestString#test_each_codepoint = 0.01 s 4473s [ 700/5474] TestString#test_each_byte = 0.00 s 4473s [ 701/5474] TestString#test_dup = 0.00 s 4473s [ 702/5474] TestString#test_to_s_2 = 0.00 s 4473s [ 703/5474] TestString#test_substr_negative_begin = 0.00 s 4473s [ 704/5474] TestString#test_chop! = 0.00 s 4473s [ 705/5474] TestString#test_tr_s! = 0.00 s 4473s [ 706/5474] TestString#test_unpack = 0.00 s 4473s [ 707/5474] TestString#test_capitalize! = 0.00 s 4473s [ 708/5474] TestString#test_swapcase = 0.00 s 4473s [ 709/5474] TestString#test_count = 0.00 s 4473s [ 710/5474] TestString#test_dump = 0.00 s 4473s [ 711/5474] TestString#test_next! = 0.00 s 4473s [ 712/5474] TestString#test_delete = 0.00 s 4473s [ 713/5474] TestString#test_insert = 0.00 s 4473s [ 714/5474] TestString#test_oct = 0.00 s 4473s [ 715/5474] TestString#test_sub! = 0.00 s 4473s [ 716/5474] TestString#test_to_f = 0.00 s 4473s [ 717/5474] TestString#test_each_grapheme_cluster = 0.57 s 4473s [ 718/5474] TestString#test_rindex = 0.00 s 4473s [ 719/5474] TestString#test_to_str = 0.02 s 4473s [ 720/5474] TestString#test_match_p_string = 0.00 s 4473s [ 721/5474] TestString#test_chomp = 0.00 s 4474s [ 722/5474] TestString#test_split_with_block = 0.01 s 4474s [ 723/5474] TestString#test_upcase = 0.00 s 4474s [ 724/5474] TestString#test_MOD = 0.00 s 4474s [ 725/5474] TestString#test_delete_prefix = 0.00 s 4474s [ 726/5474] TestString#test_sub_hash = 0.00 s 4474s [ 727/5474] TestString#test_scan = 0.00 s 4474s [ 728/5474] TestString#test_rb_str_new4 = 0.00 s 4474s [ 729/5474] TestString#test_mod_check = 0.00 s 4474s [ 730/5474] TestString#test_gsub_encoding = 0.00 s 4474s [ 731/5474] TestString#test_next = 0.00 s 4474s [ 732/5474] TestString#test_sum_long = 0.12 s 4474s [ 733/5474] TestString#test_try_convert = 0.00 s 4474s [ 734/5474] TestString#test_MATCH = 0.00 s 4474s [ 735/5474] TestString#test_upto = 0.03 s 4474s [ 736/5474] TestString#test_to_id = 0.00 s 4474s [ 737/5474] TestString#test_to_i = 0.02 s 4474s [ 738/5474] TestString#test_initialize = 0.00 s 4474s [ 739/5474] TestString#test_upto_numeric = 0.01 s 4474s [ 740/5474] TestString#test_nesting_shared = 0.00 s 4474s [ 741/5474] TestString#test_split_invalid_argument = 0.00 s 4474s [ 742/5474] TestString#test_center = 0.00 s 4474s [ 743/5474] TestString#test_nesting_shared_b = 0.00 s 4474s [ 744/5474] TestString#test_replace = 0.00 s 4474s [ 745/5474] TestString#test_times2 = 0.00 s 4474s [ 746/5474] TestString#test_rb_str_to_str = 0.00 s 4474s [ 747/5474] TestString#test_gsub_hash = 0.00 s 4474s [ 748/5474] TestString#test_to_s = 0.00 s 4474s [ 749/5474] TestString#test_rstrip = 0.00 s 4474s [ 750/5474] TestString#test_delete_suffix = 0.00 s 4474s [ 751/5474] TestString#test_shared_force_encoding = 0.00 s 4474s [ 752/5474] TestString#test_s_new = 0.00 s 4474s [ 753/5474] TestString#test_upto_nonalnum = 0.00 s 4474s [ 754/5474] TestString#test_slice = 0.00 s 4474s [ 755/5474] TestString#test_end_with? = 0.01 s 4474s [ 756/5474] TestString#test_bytes = 0.00 s 4474s [ 757/5474] TestString#test_concat = 0.00 s 4474s [ 758/5474] TestString#test_splice! = 0.00 s 4474s [ 759/5474] TestString#test_respond_to = 0.00 s 4474s [ 760/5474] TestString#test_split_dupped = 0.00 s 4474s [ 761/5474] TestString#test_codepoints = 0.01 s 4474s [ 762/5474] TestString#test_ascii_incomat_inspect = 0.01 s 4478s [ 763/5474] TestString#test_fs = 3.83 s 4478s [ 764/5474] TestString#test_index = 0.00 s 4478s [ 765/5474] TestString#test_downcase! = 0.00 s 4478s [ 766/5474] TestString#test_rstrip_bang = 0.00 s 4478s [ 767/5474] TestString#test_initialize_shared = 0.00 s 4478s [ 768/5474] TestString#test_length = 0.00 s 4478s [ 769/5474] TestString#test_each = 0.00 s 4478s [ 770/5474] TestString#test_chop = 0.00 s 4478s [ 771/5474] TestString#test_delete_suffix_bang = 0.00 s 4478s [ 772/5474] TestString#test_chomp! = 0.00 s 4478s [ 773/5474] TestString#test_each_line_chomp = 0.02 s 4478s [ 774/5474] TestString#test_delete_prefix_bang = 0.00 s 4478s [ 775/5474] TestString#test_tr = 0.00 s 4478s [ 776/5474] TestString#test_unknown_string_option = 0.00 s 4478s [ 777/5474] TestString#test_EQUAL = 0.00 s 4478s [ 778/5474] TestString#test_start_with? = 0.03 s 4478s [ 779/5474] TestString#test_rb_str_shared_replace = 0.00 s 4478s [ 780/5474] TestString#test_initialize_nonstring = 0.00 s 4478s [ 781/5474] TestString#test_size = 0.00 s 4478s [ 782/5474] TestString#test_casecmp = 0.00 s 4478s [ 783/5474] TestString#test_rjust = 0.01 s 4478s [ 784/5474] TestString#test_reverse! = 0.00 s 4478s [ 785/5474] TestString#test_swapcase! = 0.00 s 4478s [ 786/5474] TestString#test_rpartition = 0.01 s 4478s [ 787/5474] TestString#test_CMP = 0.00 s 4478s [ 788/5474] TestString#test_partition = 0.00 s 4478s [ 789/5474] TestString#test_LSHIFT = 0.01 s 4478s [ 790/5474] TestString#test_upcase! = 0.00 s 4478s [ 791/5474] TestString#test_each_line = 0.02 s 4478s [ 792/5474] TestString#test_hex = 0.00 s 4481s [ 793/5474] TestString#test_gsub_enumerator = 3.72 s 4481s [ 794/5474] TestString#test_clone = 0.00 s 4482s [ 795/5474] TestString#test_frozen_check = 0.00 s 4482s [ 796/5474] TestString#test_succ! = 0.00 s 4482s [ 797/5474] TestString#test_regexp_match_subclass = 0.00 s 4482s [ 798/5474] TestString#test_include? = 0.00 s 4482s [ 799/5474] TestString#test_casecmp? = 0.00 s 4482s [ 800/5474] TestString#test_sum = 0.00 s 4482s [ 801/5474] TestString#test_sum_2 = 0.01 s 4482s [ 802/5474] TestString#test_AREF = 0.00 s 4482s [ 803/5474] TestComparable#test_le = 0.01 s 4482s [ 804/5474] TestComparable#test_between = 0.00 s 4482s [ 805/5474] TestComparable#test_ge = 0.00 s 4482s [ 806/5474] TestComparable#test_clamp = 0.00 s 4482s [ 807/5474] TestComparable#test_equal = 0.00 s 4482s [ 808/5474] TestComparable#test_no_cmp = 0.00 s 4482s [ 809/5474] TestComparable#test_lt = 0.00 s 4482s [ 810/5474] TestComparable#test_inversed_compare = 0.00 s 4482s [ 811/5474] TestComparable#test_err = 0.00 s 4482s [ 812/5474] TestComparable#test_gt = 0.00 s 4485s [ 813/5474] TestEval#test_gced_binding_block = 3.73 s 4485s [ 814/5474] TestEval#test_instance_eval_block_basic = 0.03 s 4485s [ 815/5474] TestEval#test_module_eval_block_basic = 0.00 s 4485s [ 816/5474] TestEval#test_module_eval_string_basic = 0.00 s 4485s [ 817/5474] TestEval#test_instance_eval_method_proc = 0.00 s 4485s [ 818/5474] TestEval#test_module_eval_block_symbol = 0.00 s 4485s [ 819/5474] TestEval#test_instance_exec_eval_method_definition = 0.00 s 4485s [ 820/5474] TestEval#test_instance_eval_block_self = 0.00 s 4485s [ 821/5474] TestEval#test_fstring_instance_eval = 0.00 s 4485s [ 822/5474] TestEval#test_eval_binding_basic = 0.00 s 4485s [ 823/5474] TestEval#test_instance_eval_on_argf_singleton_class = 0.00 s 4485s [ 824/5474] TestEval#test_define_method_block = 0.00 s 4485s [ 825/5474] TestEval#test_eval_orig = 0.01 s 4485s [ 826/5474] TestEval#test_eval_basic = 0.00 s 4485s [ 827/5474] TestEval#test_instance_exec_cvar = 0.00 s 4485s [ 828/5474] TestEval#test_fixnum_instance_eval_cvar = 0.00 s 4485s [ 829/5474] TestEval#test_define_method_toplevel = 0.00 s 4485s [ 830/5474] TestEval#test_instance_eval_block_symbol = 0.00 s 4485s [ 831/5474] TestEval#test_instance_eval_string_basic = 0.01 s 4485s [ 832/5474] TestEval#test_instance_exec_method_definition = 0.00 s 4485s [ 833/5474] TestEval#test_nil_instance_eval_cvar = 0.00 s 4485s [ 834/5474] TestEval#test_instance_eval_cvar = 0.00 s 4485s [ 835/5474] TestEval#test_eval_using_integer_as_binding = 0.00 s 4485s [ 836/5474] TestEval#test_eval_and_define_method = 0.00 s 4485s [ 837/5474] TestEval#test_instance_eval_method = 0.01 s 4485s [ 838/5474] TestEval#test_return_in_eval_lambda = 0.00 s 4489s [ 839/5474] TestEval#test_eval_with_toplevel_binding = 3.46 s 4489s [ 840/5474] TestEval#test_instance_exec_block_basic = 0.03 s 4489s [ 841/5474] TestEval#test_gced_eval_location = 0.01 s 4489s [ 842/5474] TestEval#test_instance_eval_const = 0.00 s 4489s [ 843/5474] TestEval#test_cvar_scope_with_instance_eval = 0.00 s 4489s [ 844/5474] TestEval#test_eval_raise = 0.01 s 4489s [ 845/5474] TestClass#test_class_cmp = 0.00 s 4489s [ 846/5474] TestClass#test_assign_frozen_class_to_const = 0.00 s 4489s [ 847/5474] TestClass#test_cloned_class = 0.00 s 4492s [ 848/5474] TestClass#test_subclass_gc = 2.97 s 4492s [ 849/5474] TestClass#test_append_features = 0.00 s 4496s [ 850/5474] TestClass#test_singleton_class = 4.08 s 4496s [ 851/5474] TestClass#test_singleton_class_of_frozen_object = 0.01 s 4496s [ 852/5474] TestClass#test_s_inherited = 0.00 s 4496s [ 853/5474] TestClass#test_superclass_of_basicobject = 0.00 s 4496s [ 854/5474] TestClass#test_superclass = 0.00 s 4496s [ 855/5474] TestClass#test_invalid_next_from_class_definition = 0.00 s 4496s [ 856/5474] TestClass#test_module_function = 0.01 s 4496s [ 857/5474] TestClass#test_initialize_copy = 0.02 s 4496s [ 858/5474] TestClass#test_invalid_break_from_class_definition = 0.01 s 4496s [ 859/5474] TestClass#test_nonascii_name = 0.01 s 4500s [ 860/5474] TestClass#test_nested_class_removal = 3.55 s 4500s [ 861/5474] TestClass#test_00_new_basic = 0.00 s 4500s [ 862/5474] TestClass#test_invalid_redo_from_class_definition = 0.00 s 4500s [ 863/5474] TestClass#test_invalid_yield_from_class_definition = 0.00 s 4500s [ 864/5474] TestClass#test_singleton_class_p = 0.00 s 4500s [ 865/5474] TestClass#test_cloned_singleton_method_added = 0.01 s 4500s [ 866/5474] TestClass#test_invalid_superclass = 0.01 s 4500s [ 867/5474] TestClass#test_prepend_features = 0.00 s 4500s [ 868/5474] TestClass#test_extend_object = 0.00 s 4500s [ 869/5474] TestClass#test_namescope_error_message = 0.00 s 4500s [ 870/5474] TestClass#test_clone_when_singleton_class_of_singleton_class_exists = 0.00 s 4500s [ 871/5474] TestClass#test_class_initialize = 0.00 s 4500s [ 872/5474] TestClass#test_invalid_reset_superclass = 0.01 s 4500s [ 873/5474] TestClass#test_check_inheritable = 0.02 s 4500s [ 874/5474] TestClass#test_s_new = 0.00 s 4500s [ 875/5474] TestClass#test_module_specific_methods = 0.00 s 4502s [ 876/5474] TestClass#test_subclass_gc_stress = 2.24 s 4502s [ 877/5474] TestClass#test_01_new_inherited = 0.00 s 4502s [ 878/5474] TestClass#test_freeze_to_s = 0.00 s 4505s [ 879/5474] TestClass#test_cannot_reinitialize_class_with_initialize_copy = 2.71 s 4505s [ 880/5474] TestClass#test_invalid_return_from_class_definition = 0.00 s 4512s [ 881/5474] TestClass#test_should_not_expose_singleton_class_without_metaclass = 7.08 s 4512s [ 882/5474] TestClass#test_clone_when_method_exists_on_singleton_class_of_singleton_class = 0.00 s 4512s [ 883/5474] TestClass#test_instantiate_singleton_class = 0.00 s 4512s [ 884/5474] TestClass#test_clone = 0.00 s 4512s [ 885/5474] TestParse#test_location_of_invalid_token = 0.00 s 4512s [ 886/5474] TestParse#test_set_backref = 0.00 s 4512s [ 887/5474] TestParse#test_parse_string = 0.00 s 4512s [ 888/5474] TestParse#test_carrige_return = 0.00 s 4512s [ 889/5474] TestParse#test_heredoc_interpolation = 0.00 s 4512s [ 890/5474] TestParse#test_dstr_disallowed_variable = 0.01 s 4512s [ 891/5474] TestParse#test_arg = 0.00 s 4512s [ 892/5474] TestParse#test_op_asgn1_with_block = 0.00 s 4512s [ 893/5474] TestParse#test_rescue_in_command_assignment = 0.01 s 4512s [ 894/5474] TestParse#test_symbol = 0.00 s 4512s [ 895/5474] TestParse#test_unexpected_token_error = 0.00 s 4512s [ 896/5474] TestParse#test_pow_asgn = 0.00 s 4512s [ 897/5474] TestParse#test_command_def_cmdarg = 0.00 s 4512s [ 898/5474] TestParse#test_nonascii_constant = 0.08 s 4512s [ 899/5474] TestParse#test_mlhs_node = 0.00 s 4512s [ 900/5474] TestParse#test_duplicate_argument = 0.00 s 4512s [ 901/5474] TestParse#test_dsym = 0.00 s 4512s [ 902/5474] TestParse#test_block_call_colon2 = 0.00 s 4512s [ 903/5474] TestParse#test_disallowed_class_variable = 0.00 s 4512s [ 904/5474] TestParse#test_unterminated_regexp_error = 0.00 s 4512s [ 905/5474] TestParse#test_cdmarg_after_command_args_and_tlbrace_arg = 0.00 s 4512s [ 906/5474] TestParse#test_class_module = 0.00 s 4512s [ 907/5474] TestParse#test_dstr = 0.00 s 4512s [ 908/5474] TestParse#test_utf8_bom = 0.01 s 4512s [ 909/5474] TestParse#test_invalid_class_variable = 0.00 s 4512s [ 910/5474] TestParse#test_bad_arg = 0.01 s 4514s [ 911/5474] TestParse#test_invalid_char = 2.52 s 4514s [ 912/5474] TestParse#test_invalid_instance_variable = 0.00 s 4514s [ 913/5474] TestParse#test_block_variable = 0.00 s 4514s [ 914/5474] TestParse#test_else_without_rescue = 0.00 s 4514s [ 915/5474] TestParse#test_words = 0.00 s 4514s [ 916/5474] TestParse#test_file_in_indented_heredoc = 0.00 s 4514s [ 917/5474] TestParse#test_void_value_in_rhs = 0.01 s 4514s [ 918/5474] TestParse#test_arg2 = 0.01 s 4514s [ 919/5474] TestParse#test_dot_in_next_line = 0.00 s 4514s [ 920/5474] TestParse#test_call_method = 0.00 s 4514s [ 921/5474] TestParse#test_backquote = 0.00 s 4514s [ 922/5474] TestParse#test_op_name = 0.00 s 4514s [ 923/5474] TestParse#test_named_capture_conflict = 0.00 s 4514s [ 924/5474] TestParse#test_alias_backref = 0.00 s 4514s [ 925/5474] TestParse#test_here_document = 0.00 s 4514s [ 926/5474] TestParse#test_lparenarg = 0.00 s 4514s [ 927/5474] TestParse#test_no_shadowing_variable_warning = 0.00 s 4514s [ 928/5474] TestParse#test_whitespace_warning = 0.01 s 4514s [ 929/5474] TestParse#test_eof = 0.00 s 4514s [ 930/5474] TestParse#test_xstring = 0.00 s 4514s [ 931/5474] TestParse#test_assign_in_conditional = 0.00 s 4514s [ 932/5474] TestParse#test_serial_comparison = 0.00 s 4514s [ 933/5474] TestParse#test_literal_concat = 0.00 s 4514s [ 934/5474] TestParse#test_do_lambda = 0.00 s 4514s [ 935/5474] TestParse#test_dynamic_constant_assignment = 0.00 s 4514s [ 936/5474] TestParse#test_eof_in_def = 0.00 s 4514s [ 937/5474] TestParse#test_yyerror_at_eol = 0.00 s 4514s [ 938/5474] TestParse#test_arg_concat = 0.00 s 4514s [ 939/5474] TestParse#test_disallowed_instance_variable = 0.00 s 4515s [ 940/5474] TestParse#test_nonascii_const_set = 0.03 s 4515s [ 941/5474] TestParse#test_command_call = 0.01 s 4515s [ 942/5474] TestParse#test_percent = 0.00 s 4515s [ 943/5474] TestParse#test_disallowed_gloal_variable = 0.00 s 4518s [ 944/5474] TestParse#test_error_def_in_argument = 3.62 s 4518s [ 945/5474] TestProc#test_curry_ski_fib = 0.04 s 4518s [ 946/5474] TestProc#test_proc_args_pos_opt_rest_post = 0.01 s 4518s [ 947/5474] TestProc#test_local_variables = 0.00 s 4518s [ 948/5474] TestProc#test_proc_args_plain = 0.00 s 4518s [ 949/5474] TestProc#test_curry_lambda_splat = 0.00 s 4518s [ 950/5474] TestProc#test_orphan_break = 0.00 s 4522s [ 951/5474] TestProc#test_overridden_lambda = 3.74 s 4526s [ 952/5474] TestProc#test_overridden_proc = 4.03 s 4526s [ 953/5474] TestProc#test_compose_with_noncallable = 0.00 s 4526s [ 954/5474] TestProc#test_proc_args_rest = 0.00 s 4526s [ 955/5474] TestProc#test_curry_lambda = 0.00 s 4526s [ 956/5474] TestProc#test_proc_single_arg_with_keywords_accepted_and_yielded = 0.00 s 4526s [ 957/5474] TestProc#test_local_variables_nested = 0.00 s 4526s [ 958/5474] TestProc#test_proc_args_opt_rest_post = 0.00 s 4526s [ 959/5474] TestProc#test_compose_with_callable = 0.01 s 4526s [ 960/5474] TestProc#test_block_propagation = 0.00 s 4526s [ 961/5474] TestProc#test_proc_args_opt_block = 0.00 s 4530s [ 962/5474] TestProc#test_local_variable_set_wb = 4.15 s 4530s [ 963/5474] TestProc#test_compose_with_block = 0.00 s 4530s [ 964/5474] TestProc#test_proc_args_rest_kwsplat = 0.00 s 4530s [ 965/5474] TestProc#test_compose = 0.00 s 4530s [ 966/5474] TestProc#test_lambda_warning_pass_block_symbol_proc = 0.00 s 4530s [ 967/5474] TestProc#test_compose_with_multiple_args = 0.00 s 4530s [ 968/5474] TestProc#test_method_to_proc = 0.00 s 4530s [ 969/5474] TestProc#test_hash = 0.01 s 4530s [ 970/5474] TestProc#test_proc_args_opt_post = 0.00 s 4530s [ 971/5474] TestProc#test_proc_location = 0.01 s 4530s [ 972/5474] TestProc#test_binding = 0.00 s 4530s [ 973/5474] TestProc#test_local_variables_in_other_context = 0.00 s 4530s [ 974/5474] TestProc#test_arity2 = 0.00 s 4530s [ 975/5474] TestProc#test_binding_receiver = 0.00 s 4530s [ 976/5474] TestProc#test_localjump_error = 0.00 s 4530s [ 977/5474] TestProc#test_local_variable_set = 0.00 s 4530s [ 978/5474] TestProc#test_proc_args_pos_opt_rest = 0.00 s 4533s [ 979/5474] TestProc#test_refined_call = 2.70 s 4533s [ 980/5474] TestProc#test_local_variable_get = 0.00 s 4533s [ 981/5474] TestProc#test_to_proc = 0.00 s 4533s [ 982/5474] TestProc#test_eq = 0.00 s 4533s [ 983/5474] TestProc#test_curry_proc = 0.00 s 4533s [ 984/5474] TestProc#test_block_source_location = 0.00 s 4533s [ 985/5474] TestProc#test_proc_args_rest_post_block = 0.01 s 4533s [ 986/5474] TestProc#test_compose_with_method = 0.00 s 4533s [ 987/5474] TestProc#test_proc_args_pos_opt_block = 0.00 s 4533s [ 988/5474] TestProc#test_proc_args_opt_rest_post_block = 0.00 s 4533s [ 989/5474] TestProc#test_proc_args_pos_opt = 0.00 s 4533s [ 990/5474] TestProc#test_block_given_method = 0.00 s 4533s [ 991/5474] TestProc#test_proc_args_opt_single = 0.00 s 4533s [ 992/5474] TestProc#test_proc_args_pos_opt_rest_post_block = 0.00 s 4533s [ 993/5474] TestProc#test_not_orphan_next = 0.00 s 4533s [ 994/5474] TestProc#test_curry_instance_exec = 0.00 s 4537s [ 995/5474] TestProc#test_proc_mark = 4.04 s 4537s [ 996/5474] TestProc#test_proc_args_opt = 0.00 s 4537s [ 997/5474] TestProc#test_proc_args_only_rest = 0.00 s 4537s [ 998/5474] TestProc#test_curry_no_arguments = 0.00 s 4537s [ 999/5474] TestProc#test_proc_args_opt_rest_block = 0.00 s 4537s [1000/5474] TestProc#test_curry_given_blocks = 0.00 s 4537s [1001/5474] TestProc#test_curry_with_trace = 0.13 s 4537s [1002/5474] TestProc#test_proc_args_rest_block = 0.00 s 4537s [1003/5474] TestProc#test_block_persist_between_calls = 0.00 s 4537s [1004/5474] TestProc#test_proc_args_pos_opt_rest_block = 0.00 s 4537s [1005/5474] TestProc#test_local_variable_defined? = 0.00 s 4537s [1006/5474] TestProc#test_curry_optional_params = 0.00 s 4540s [1007/5474] TestProc#test_prepended_call = 2.83 s 4540s [1008/5474] TestProc#test_lambda? = 0.00 s 4540s [1009/5474] TestProc#test_block_par = 0.00 s 4540s [1010/5474] TestProc#test_lambda_warning_pass_symbol_proc = 0.00 s 4540s [1011/5474] TestProc#test_proc_args_pos_rest_post = 0.00 s 4540s [1012/5474] TestProc#test_proc_args_opt_rest = 0.01 s 4540s [1013/5474] TestProc#test_proc_args_rest_kw = 0.00 s 4540s [1014/5474] TestProc#test_block_given_method_to_proc = 0.00 s 4540s [1015/5474] TestProc#test_proc_args_pos_unleashed = 0.00 s 4540s [1016/5474] TestProc#test_orphan_return = 0.00 s 4540s [1017/5474] TestProc#test_splat_without_respond_to = 0.00 s 4540s [1018/5474] TestProc#test_proc_args_pos_opt_post_block = 0.01 s 4540s [1019/5474] TestProc#test_bound_parameters = 0.00 s 4540s [1020/5474] TestProc#test_arity = 0.01 s 4540s [1021/5474] TestProc#test_source_location = 0.00 s 4540s [1022/5474] TestProc#test_proc_args_pos_opt_post = 0.00 s 4540s [1023/5474] TestProc#test_lambda_warning_pass_lambda = 0.00 s 4540s [1024/5474] TestProc#test_compose_with_lambda = 0.00 s 4540s [1025/5474] TestProc#test_curry_binding = 0.01 s 4540s [1026/5474] TestProc#test_proc_args_pos_block = 0.01 s 4540s [1027/5474] TestProc#test_curry_passed_block = 0.01 s 4540s [1028/5474] TestProc#test_proc_lambda = 0.01 s 4540s [1029/5474] TestProc#test_proc = 0.00 s 4540s [1030/5474] TestProc#test_proc_args_pos_rest_post_block = 0.00 s 4540s [1031/5474] TestProc#test_proc_args_rest_post = 0.00 s 4540s [1032/5474] TestProc#test_proc_args_opt_post_block = 0.01 s 4540s [1033/5474] TestProc#test_proc_args_pos_rest_block = 0.00 s 4540s [1034/5474] TestProc#test_lambda_warning_normal = 0.00 s 4540s [1035/5474] TestProc#test_curry_proc_splat = 0.01 s 4540s [1036/5474] TestObject#test_true_and = 0.00 s 4540s [1037/5474] TestObject#test_instance_variable_get = 0.01 s 4540s [1038/5474] TestObject#test_instance_variable_set = 0.00 s 4540s [1039/5474] TestObject#test_itself = 0.00 s 4540s [1040/5474] TestObject#test_implicit_respond_to_arity_1 = 0.00 s 4540s [1041/5474] TestObject#test_methods_prepend = 0.00 s 4540s [1042/5474] TestObject#test_implicit_respond_to_arity_3 = 0.00 s 4540s [1043/5474] TestObject#test_implicit_respond_to = 0.00 s 4540s [1044/5474] TestObject#test_singleton_class = 0.00 s 4540s [1045/5474] TestObject#test_true_or = 0.00 s 4540s [1046/5474] TestObject#test_methods2 = 0.00 s 4540s [1047/5474] TestObject#test_public_send = 0.00 s 4540s [1048/5474] TestObject#test_kind_of = 0.00 s 4540s [1049/5474] TestObject#test_convert_hash = 0.00 s 4540s [1050/5474] TestObject#test_bad_initialize_copy = 0.02 s 4540s [1051/5474] TestObject#test_false_and = 0.00 s 4540s [1052/5474] TestObject#test_false_xor = 0.00 s 4540s [1053/5474] TestObject#test_extend = 0.00 s 4540s [1054/5474] TestObject#test_nil_to_s = 0.00 s 4540s [1055/5474] TestObject#test_convert_array = 0.00 s 4540s [1056/5474] TestObject#test_frozen_error_message = 0.00 s 4540s [1057/5474] TestObject#test_check_to_integer = 0.01 s 4551s [1058/5474] TestObject#test_redef_method_missing = 11.18 s 4551s [1059/5474] TestObject#test_dup = 0.00 s 4551s [1060/5474] TestObject#test_inspect = 0.00 s 4551s [1061/5474] TestObject#test_respond_to_missing = 0.01 s 4551s [1062/5474] TestObject#test_true_xor = 0.00 s 4551s [1063/5474] TestObject#test_instance_of = 0.00 s 4551s [1064/5474] TestObject#test_nil_to_f = 0.00 s 4551s [1065/5474] TestObject#test_method_missing_passed_block = 0.01 s 4551s [1066/5474] TestObject#test_false_or = 0.00 s 4551s [1067/5474] TestObject#test_send_with_block = 0.00 s 4551s [1068/5474] TestObject#test_instance_exec = 0.00 s 4551s [1069/5474] TestObject#test_to_s = 0.00 s 4551s [1070/5474] TestObject#test_freeze_immediate = 0.00 s 4551s [1071/5474] TestObject#test_remove_instance_variable = 0.01 s 4551s [1072/5474] TestObject#test_respond_to_missing_string = 0.00 s 4551s [1073/5474] TestObject#test_instance_variable_defined = 0.00 s 4552s [1074/5474] TestObject#test_no_superclass_method = 0.06 s 4552s [1075/5474] TestObject#test_method_missing = 0.00 s 4552s [1076/5474] TestObject#test_send_with_no_arguments = 0.00 s 4555s [1077/5474] TestObject#test_clone_object_should_not_be_old = 3.95 s 4555s [1078/5474] TestObject#test_yield_self = 0.00 s 4555s [1079/5474] TestObject#test_to_integer = 0.00 s 4555s [1080/5474] TestObject#test_false_to_s = 0.00 s 4555s [1081/5474] TestObject#test_true_to_s = 0.00 s 4555s [1082/5474] TestObject#test_convert_string = 0.01 s 4555s [1083/5474] TestObject#test_init_dupclone = 0.00 s 4558s [1084/5474] TestObject#test_superclass_method = 2.75 s 4558s [1085/5474] TestObject#test_clone = 0.01 s 4558s [1086/5474] TestObject#test_specific_eval_with_wrong_arguments = 0.00 s 4558s [1087/5474] TestObject#test_methods = 0.00 s 4558s [1088/5474] TestObject#test_not = 0.00 s 4558s [1089/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_kwsplat = 0.02 s 4558s [1090/5474] TestKeywordArgumentsSymProcRefinements#test_value_omission = 0.00 s 4558s [1091/5474] TestKeywordArgumentsSymProcRefinements#test_protected_kwarg = 0.00 s 4558s [1092/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_method_missing_kwsplat = 0.02 s 4558s [1093/5474] TestKeywordArgumentsSymProcRefinements#test_sym_proc_refine_super_method_missing_kwsplat = 0.02 s 4558s [1094/5474] TestFixnum#test_xor_with_float = 0.00 s 4558s [1095/5474] TestFixnum#test_sub = 0.00 s 4558s [1096/5474] TestFixnum#test_zero_p = 0.00 s 4558s [1097/5474] TestFixnum#test_and_with_nonintegral_numeric = 0.00 s 4558s [1098/5474] TestFixnum#test_minus = 0.00 s 4558s [1099/5474] TestFixnum#test_pow2 = 0.00 s 4558s [1100/5474] TestFixnum#test_mult = 0.00 s 4558s [1101/5474] TestFixnum#test_succ = 0.00 s 4558s [1102/5474] TestFixnum#test_xor_with_nonintegral_numeric = 0.00 s 4558s [1103/5474] TestFixnum#test_plus2 = 0.00 s 4558s [1104/5474] TestFixnum#test_and_with_rational = 0.00 s 4558s [1105/5474] TestFixnum#test_cmp = 0.00 s 4558s [1106/5474] TestFixnum#test_and_with_float = 0.00 s 4558s [1107/5474] TestFixnum#test_or_with_rational = 0.00 s 4558s [1108/5474] TestFixnum#test_power_of_0 = 0.00 s 4558s [1109/5474] TestFixnum#test_positive_p = 0.00 s 4558s [1110/5474] TestFixnum#test_singleton_method = 0.00 s 4558s [1111/5474] TestFixnum#test_xor_with_rational = 0.00 s 4558s [1112/5474] TestFixnum#test_remainder = 0.00 s 4558s [1113/5474] TestFixnum#test_finite_p = 0.00 s 4558s [1114/5474] TestFixnum#test_rshift = 0.00 s 4558s [1115/5474] TestFixnum#test_divide = 0.00 s 4558s [1116/5474] TestFixnum#test_plus = 0.00 s 4558s [1117/5474] TestFixnum#test_frozen = 0.00 s 4558s [1118/5474] TestFixnum#test_abs = 0.00 s 4558s [1119/5474] TestFixnum#test_divmod = 0.01 s 4558s [1120/5474] TestFixnum#test_mod = 0.00 s 4558s [1121/5474] TestFixnum#test_to_s = 0.00 s 4558s [1122/5474] TestFixnum#test_or_with_float = 0.00 s 4558s [1123/5474] TestFixnum#test_or_with_nonintegral_numeric = 0.00 s 4558s [1124/5474] TestFixnum#test_negative_p = 0.00 s 4558s [1125/5474] TestFixnum#test_infinite_p = 0.00 s 4558s [1126/5474] TestFixnum#test_lshift = 0.00 s 4558s [1127/5474] TestFixnum#test_pred = 0.00 s 4558s [1128/5474] TestFixnum#test_mul = 0.00 s 4558s [1129/5474] TestFixnum#test_pow = 0.01 s 4558s [1130/5474] TestFixnum#test_not = 0.00 s 4558s [1131/5474] TestFixnum#test_div = 0.00 s 4558s [1132/5474] TestBasicInstructions#test_local_variable = 0.00 s 4558s [1133/5474] TestBasicInstructions#test_hash = 0.00 s 4558s [1134/5474] TestBasicInstructions#test_const_inherit = 0.02 s 4558s [1135/5474] TestBasicInstructions#test_opassign1_1 = 0.00 s 4558s [1136/5474] TestBasicInstructions#test_string = 0.00 s 4558s [1137/5474] TestBasicInstructions#test_immediates = 0.00 s 4558s [1138/5474] TestBasicInstructions#test_dsym = 0.00 s 4558s [1139/5474] TestBasicInstructions#test_opassign2_1 = 0.00 s 4558s [1140/5474] TestBasicInstructions#test_self = 0.00 s 4558s [1141/5474] TestBasicInstructions#test_opassign2_3 = 0.00 s 4558s [1142/5474] TestBasicInstructions#test_array = 0.00 s 4558s [1143/5474] TestBasicInstructions#test_xstr = 0.01 s 4558s [1144/5474] TestBasicInstructions#test_const_cref = 0.02 s 4558s [1145/5474] TestBasicInstructions#test_const_path = 0.02 s 4558s [1146/5474] TestBasicInstructions#test_opassign2_2 = 0.00 s 4558s [1147/5474] TestBasicInstructions#test_range = 0.00 s 4558s [1148/5474] TestBasicInstructions#test_global_variable = 0.00 s 4558s [1149/5474] TestBasicInstructions#test_backref = 0.00 s 4558s [1150/5474] TestBasicInstructions#test_class_variable = 0.01 s 4558s [1151/5474] TestBasicInstructions#test_opassign1_2 = 0.00 s 4558s [1152/5474] TestBasicInstructions#test_send_opassign = 0.00 s 4558s [1153/5474] TestBasicInstructions#test_array_splat = 0.00 s 4563s [1154/5474] TestBasicInstructions#test_special_const_instance_variables = 4.15 s 4563s [1155/5474] TestBasicInstructions#test_dstring = 0.00 s 4563s [1156/5474] TestBasicInstructions#test_not = 0.00 s 4563s [1157/5474] TestDir_M17N#test_glob_compose = 0.01 s 4563s [1158/5474] TestDir_M17N#test_pwd = 0.01 s 4563s [1159/5474] TestDir_M17N#test_entries_compose = 0.01 s 4563s [1160/5474] TestDir_M17N#test_glob_escape_multibyte = 0.00 s 4563s [1161/5474] TestFrozenError#test_receiver = 0.00 s 4563s [1162/5474] TestFrozenError#test_new_receiver = 0.00 s 4563s [1163/5474] TestRefinement#test_include_refinement = 0.00 s 4566s [1164/5474] TestRefinement#test_eval_scoping = 2.77 s 4566s [1165/5474] TestRefinement#test_instance_methods = 0.00 s 4570s [1166/5474] TestRefinement#test_undef_refined_method = 5.05 s 4570s [1167/5474] TestRefinement#test_refine_alias_in_subclass = 0.00 s 4570s [1168/5474] TestRefinement#test_using_same_class_refinements = 0.00 s 4570s [1169/5474] TestRefinement#test_instance_methods_not_include_superclass_method = 0.00 s 4574s [1170/5474] TestRefinement#test_change_refined_new_method_visibility = 3.65 s 4574s [1171/5474] TestRefinement#test_refine_with_proc = 0.00 s 4577s [1172/5474] TestRefinement#test_refining_module_repeatedly = 2.69 s 4577s [1173/5474] TestRefinement#test_symbol_proc = 0.00 s 4577s [1174/5474] TestRefinement#test_instance_eval_without_refinement = 0.00 s 4577s [1175/5474] TestRefinement#test_return_value_of_refine = 0.00 s 4577s [1176/5474] TestRefinement#test_instance_method_should_use_refinements = 0.00 s 4579s [1177/5474] TestRefinement#test_call_method_in_unused_refinement = 2.41 s 4579s [1178/5474] TestRefinement#test_override_builtin_method_with_method_added = 0.00 s 4579s [1179/5474] TestRefinement#test_refine_in_class = 0.00 s 4579s [1180/5474] TestRefinement#test_super = 0.00 s 4583s [1181/5474] TestRefinement#test_alias_refined_method = 3.95 s 4583s [1182/5474] TestRefinement#test_check_funcall_undefined = 0.00 s 4587s [1183/5474] TestRefinement#test_two_refinements_for_prepended_class = 3.98 s 4591s [1184/5474] TestRefinement#test_symbol_proc_with_block = 3.84 s 4595s [1185/5474] TestRefinement#test_prepend_after_refine_wb_miss = 4.13 s 4595s [1186/5474] TestRefinement#test_refine_module = 0.00 s 4595s [1187/5474] TestRefinement#test_override_builtin_method = 0.00 s 4595s [1188/5474] TestRefinement#test_redefine_refined_method = 0.00 s 4597s [1189/5474] TestRefinement#test_refine_undefed_method_and_send = 2.25 s 4597s [1190/5474] TestRefinement#test_refine_array_min_max = 0.00 s 4597s [1191/5474] TestRefinement#test_inspect = 0.00 s 4597s [1192/5474] TestRefinement#test_new_method_on_subclass = 0.00 s 4597s [1193/5474] TestRefinement#test_module_using_class = 0.00 s 4597s [1194/5474] TestRefinement#test_prepended_with_method_cache = 0.00 s 4597s [1195/5474] TestRefinement#test_using_in_method = 0.00 s 4601s [1196/5474] TestRefinement#test_prepended_with_method_cache_17417 = 3.30 s 4601s [1197/5474] TestRefinement#test_refine_inherited_method_with_visibility_changes = 0.03 s 4601s [1198/5474] TestRefinement#test_super_in_subclass = 0.00 s 4601s [1199/5474] TestRefinement#test_privatizing_refined_method = 0.00 s 4601s [1200/5474] TestRefinement#test_refine_neither_class_nor_module = 0.00 s 4601s [1201/5474] TestRefinement#test_refine_in_using = 0.00 s 4601s [1202/5474] TestRefinement#test_module_inclusion = 0.00 s 4601s [1203/5474] TestRefinement#test_module_using_in_method = 0.00 s 4601s [1204/5474] TestRefinement#test_module_using = 0.00 s 4601s [1205/5474] TestRefinement#test_super_not_chained = 0.00 s 4601s [1206/5474] TestRefinement#test_method_should_use_refinements = 0.01 s 4601s [1207/5474] TestRefinement#test_super_in_block = 0.00 s 4601s [1208/5474] TestRefinement#test_no_local_rebinding = 0.00 s 4601s [1209/5474] TestRefinement#test_method_defined = 0.00 s 4601s [1210/5474] TestRefinement#test_builtin_method_no_local_rebinding = 0.00 s 4603s [1211/5474] TestRefinement#test_main_using = 2.38 s 4603s [1212/5474] TestRefinement#test_redefining_refined_for_prepended_class = 0.00 s 4603s [1213/5474] TestRefinement#test_refine_prepended_module = 0.00 s 4603s [1214/5474] TestRefinement#test_refine_same_class_twice = 0.00 s 4607s [1215/5474] TestRefinement#test_refine_with_prepend = 3.58 s 4607s [1216/5474] TestRefinement#test_defining_after_cached = 0.00 s 4607s [1217/5474] TestRefinement#test_subclass_is_prior = 0.00 s 4609s [1218/5474] TestRefinement#test_case_dispatch_is_aware_of_refinements = 2.41 s 4609s [1219/5474] TestRefinement#test_module_using_invalid_self = 0.00 s 4612s [1220/5474] TestRefinement#test_warn_setconst_in_refinmenet = 2.41 s 4614s [1221/5474] TestRefinement#test_refine_undefed_method_and_call = 2.51 s 4617s [1222/5474] TestRefinement#test_using_method_cache = 2.60 s 4617s [1223/5474] TestRefinement#test_mixed_using = 0.00 s 4619s [1224/5474] TestRefinement#test_alias_refined_method2 = 2.56 s 4622s [1225/5474] TestRefinement#test_call_refined_method_in_duplicate_module = 2.42 s 4624s [1226/5474] TestRefinement#test_adding_private_method = 2.64 s 4624s [1227/5474] TestRefinement#test_refine_without_block = 0.00 s 4624s [1228/5474] TestRefinement#test_method_missing = 0.00 s 4631s [1229/5474] TestRefinement#test_using_wrong_argument = 6.94 s 4635s [1230/5474] TestRefinement#test_remove_refined_method = 3.46 s 4635s [1231/5474] TestRefinement#test_super_from_refined_module = 0.00 s 4635s [1232/5474] TestRefinement#test_module_eval = 0.00 s 4637s [1233/5474] TestRefinement#test_unused_refinement_for_module = 2.19 s 4640s [1234/5474] TestRefinement#test_public_in_refine = 3.20 s 4640s [1235/5474] TestRefinement#test_include_into_refinement = 0.00 s 4640s [1236/5474] TestRefinement#test_override = 0.00 s 4643s [1237/5474] TestRefinement#test_undefined_refined_method_defined = 3.14 s 4643s [1238/5474] TestRefinement#test_used_modules = 0.00 s 4646s [1239/5474] TestRefinement#test_eval_with_binding_scoping = 2.24 s 4646s [1240/5474] TestRefinement#test_dsym_literal = 0.00 s 4648s [1241/5474] TestRefinement#test_making_private_method_public = 2.15 s 4648s [1242/5474] TestRefinement#test_inherit_singleton_methods_of_module = 0.00 s 4648s [1243/5474] TestRefinement#test_no_kernel_using = 0.00 s 4651s [1244/5474] TestRefinement#test_refine_after_using = 3.01 s 4651s [1245/5474] TestRefinement#test_funcall_inherited = 0.00 s 4654s [1246/5474] TestRefinement#test_refined_method_defined = 3.52 s 4658s [1247/5474] TestRefinement#test_remove_undefined_refined_method = 3.40 s 4658s [1248/5474] TestRefinement#test_new_method = 0.00 s 4658s [1249/5474] TestRefinement#test_refine_mutual_recursion = 0.00 s 4658s [1250/5474] TestRefinement#test_module_inclusion2 = 0.00 s 4664s [1251/5474] TestRefinement#test_refine_basic_object = 6.87 s 4668s [1252/5474] TestRefinement#test_reopen_refinement_module = 3.10 s 4668s [1253/5474] TestRefinement#test_using_in_module = 0.00 s 4668s [1254/5474] TestRefinement#test_main_using_is_private = 0.00 s 4671s [1255/5474] TestRefinement#test_singleton_method_should_not_use_refinements = 3.30 s 4671s [1256/5474] TestRefinement#test_prepend_after_refine = 0.00 s 4671s [1257/5474] TestRefinement#test_send_should_use_refinements = 0.00 s 4671s [1258/5474] TestMarshal::TestMarshalFreezeProc#test_object_subclass = 0.00 s 4671s [1259/5474] TestMarshal::TestMarshalFreezeProc#test_range_cyclic = 0.00 s 4671s [1260/5474] TestMarshal::TestMarshalFreezeProc#test_anonymous = 0.00 s 4671s [1261/5474] TestMarshal::TestMarshalFreezeProc#test_string_subclass = 0.00 s 4671s [1262/5474] TestMarshal::TestMarshalFreezeProc#test_time = 0.01 s 4671s [1263/5474] TestMarshal::TestMarshalFreezeProc#test_struct_subclass_extend = 0.00 s 4671s [1264/5474] TestMarshal::TestMarshalFreezeProc#test_share = 0.00 s 4671s [1265/5474] TestMarshal::TestMarshalFreezeProc#test_time_ivar = 0.01 s 4671s [1266/5474] TestMarshal::TestMarshalFreezeProc#test_time_subclass = 0.00 s 4671s [1267/5474] TestMarshal::TestMarshalFreezeProc#test_nil = 0.00 s 4671s [1268/5474] TestMarshal::TestMarshalFreezeProc#test_false = 0.00 s 4671s [1269/5474] TestMarshal::TestMarshalFreezeProc#test_exception = 0.02 s 4671s [1270/5474] TestMarshal::TestMarshalFreezeProc#test_float = 0.00 s 4671s [1271/5474] TestMarshal::TestMarshalFreezeProc#test_bignum = 0.00 s 4671s [1272/5474] TestMarshal::TestMarshalFreezeProc#test_symbol = 0.07 s 4671s [1273/5474] TestMarshal::TestMarshalFreezeProc#test_regexp = 0.01 s 4671s [1274/5474] TestMarshal::TestMarshalFreezeProc#test_fixnum = 0.00 s 4671s [1275/5474] TestMarshal::TestMarshalFreezeProc#test_object = 0.00 s 4671s [1276/5474] TestMarshal::TestMarshalFreezeProc#test_hash = 0.00 s 4671s [1277/5474] TestMarshal::TestMarshalFreezeProc#test_string = 0.00 s 4671s [1278/5474] TestMarshal::TestMarshalFreezeProc#test_extend = 0.01 s 4671s [1279/5474] TestMarshal::TestMarshalFreezeProc#test_array_subclass = 0.01 s 4671s [1280/5474] TestMarshal::TestMarshalFreezeProc#test_struct = 0.00 s 4671s [1281/5474] TestMarshal::TestMarshalFreezeProc#test_exception_subclass = 0.01 s 4671s [1282/5474] TestMarshal::TestMarshalFreezeProc#test_hash_extend = 0.00 s 4671s [1283/5474] TestMarshal::TestMarshalFreezeProc#test_array = 0.00 s 4671s [1284/5474] TestMarshal::TestMarshalFreezeProc#test_true = 0.00 s 4671s [1285/5474] TestMarshal::TestMarshalFreezeProc#test_object_subclass_extend = 0.01 s 4671s [1286/5474] TestMarshal::TestMarshalFreezeProc#test_struct_subclass = 0.00 s 4671s [1287/5474] TestMarshal::TestMarshalFreezeProc#test_string_crlf = 0.00 s 4671s [1288/5474] TestMarshal::TestMarshalFreezeProc#test_struct_ivar = 0.00 s 4671s [1289/5474] TestMarshal::TestMarshalFreezeProc#test_float_inf_nan = 0.00 s 4671s [1290/5474] TestMarshal::TestMarshalFreezeProc#test_hash_subclass = 0.00 s 4671s [1291/5474] TestMarshal::TestMarshalFreezeProc#test_struct_toplevel = 0.00 s 4671s [1292/5474] TestMarshal::TestMarshalFreezeProc#test_array_ivar = 0.00 s 4671s [1293/5474] TestMarshal::TestMarshalFreezeProc#test_string_subclass_extend = 0.00 s 4671s [1294/5474] TestMarshal::TestMarshalFreezeProc#test_range_subclass = 0.00 s 4671s [1295/5474] TestMarshal::TestMarshalFreezeProc#test_string_escape = 0.00 s 4671s [1296/5474] TestMarshal::TestMarshalFreezeProc#test_string_ivar = 0.00 s 4671s [1297/5474] TestMarshal::TestMarshalFreezeProc#test_range = 0.00 s 4671s [1298/5474] TestMarshal::TestMarshalFreezeProc#test_hash_default = 0.00 s 4671s [1299/5474] TestMarshal::TestMarshalFreezeProc#test_time_in_array = 0.00 s 4671s [1300/5474] TestMarshal::TestMarshalFreezeProc#test_hash_ivar = 0.00 s 4671s [1301/5474] TestMarshal::TestMarshalFreezeProc#test_object_extend = 0.01 s 4671s [1302/5474] TestMarshal::TestMarshalFreezeProc#test_extend_string = 0.00 s 4671s [1303/5474] TestMarshal::TestMarshalFreezeProc#test_string_empty = 0.00 s 4671s [1304/5474] TestMarshal::TestMarshalFreezeProc#test_regexp_subclass = 0.00 s 4671s [1305/5474] TestMarshal::TestMarshalFreezeProc#test_hash_default_proc = 0.00 s 4671s [1306/5474] Rational_Test2#test_kumi = 0.02 s 4671s [1307/5474] TestFileExhaustive#test_hardlink = 0.02 s 4671s [1308/5474] TestFileExhaustive#test_s_size = 0.03 s 4671s [1309/5474] TestFileExhaustive#test_expand_path_converts_a_dot_with_unc_dir = 0.00 s 4671s [1310/5474] TestFileExhaustive#test_stat_executable_real_p = 0.00 s 4671s [1311/5474] TestFileExhaustive#test_socket_p = 0.05 s 4671s [1312/5474] TestFileExhaustive#test_expand_path_accepts_objects_that_have_a_to_path_method = 0.00 s 4671s [1313/5474] TestFileExhaustive#test_symlink = 0.01 s 4671s [1314/5474] TestFileExhaustive#test_zero_p = 0.01 s 4671s [1315/5474] TestFileExhaustive#test_chardev_p = 0.01 s 4671s [1316/5474] TestFileExhaustive#test_lstat = 0.00 s 4671s [1317/5474] TestFileExhaustive#test_stat_sgid = 0.01 s 4671s [1318/5474] TestFileExhaustive#test_birthtime = 0.01 s 4671s [1319/5474] TestFileExhaustive#test_lchown = 0.00 s 4671s [1320/5474] TestFileExhaustive#test_chown = 0.00 s 4671s [1321/5474] TestFileExhaustive#test_stat_readable_real_p = 0.00 s 4672s [1322/5474] TestFileExhaustive#test_stat_init = 1.11 s 4672s [1323/5474] TestFileExhaustive#test_stat_size = 0.00 s 4672s [1324/5474] TestFileExhaustive#test_umask = 0.00 s 4672s [1325/5474] TestFileExhaustive#test_expand_path_does_not_modify_a_home_string_argument = 0.00 s 4672s [1326/5474] TestFileExhaustive#test_split = 0.00 s 4674s [1327/5474] TestFileExhaustive#test_test = 1.13 s 4674s [1328/5474] TestFileExhaustive#test_exist_p = 0.00 s 4675s [1329/5474] TestFileExhaustive#test_stat = 1.11 s 4675s [1330/5474] TestFileExhaustive#test_expand_path_removes_trailing_slashes_from_absolute_path = 0.00 s 4675s [1331/5474] TestFileExhaustive#test_expand_path_resolve_file_name_relative_current_directory = 0.00 s 4675s [1332/5474] TestFileExhaustive#test_stat_writable_p = 0.00 s 4676s [1333/5474] TestFileExhaustive#test_io_identical_p = 0.76 s 4676s [1334/5474] TestFileExhaustive#test_world_writable_p = 0.01 s 4676s [1335/5474] TestFileExhaustive#test_stat_zero_p = 0.01 s 4676s [1336/5474] TestFileExhaustive#test_absolute_path = 0.01 s 4676s [1337/5474] TestFileExhaustive#test_stat_owned_p = 0.01 s 4676s [1338/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_to_an_absolute_pathname_using_a_complete_path = 0.01 s 4676s [1339/5474] TestFileExhaustive#test_utime_symlinkfile = 0.01 s 4676s [1340/5474] TestFileExhaustive#test_readable_p = 0.01 s 4676s [1341/5474] TestFileExhaustive#test_stat_socket_p = 0.00 s 4676s [1342/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_which_starts_with_a_slash_using_a_current_drive = 0.00 s 4676s [1343/5474] TestFileExhaustive#test_symlink_p = 0.00 s 4676s [1344/5474] TestFileExhaustive#test_expand_path_error_for_non_absolute_home = 0.00 s 4676s [1345/5474] TestFileExhaustive#test_blockdev_p = 0.01 s 4676s [1346/5474] TestFileExhaustive#test_ctime = 0.01 s 4676s [1347/5474] TestFileExhaustive#test_empty_p = 0.00 s 4676s [1348/5474] TestFileExhaustive#test_expand_path_cleanup_dots_file_name = 0.00 s 4676s [1349/5474] TestFileExhaustive#test_stat_executable_p = 0.00 s 4676s [1350/5474] TestFileExhaustive#test_stat_writable_real_p = 0.00 s 4676s [1351/5474] TestFileExhaustive#test_path_identical_p = 0.01 s 4676s [1352/5474] TestFileExhaustive#test_expand_path_converts_a_pathname_to_an_absolute_pathname_using_home_as_base = 0.00 s 4676s [1353/5474] TestFileExhaustive#test_truncate = 0.01 s 4676s [1354/5474] TestFileExhaustive#test_expand_path_absolute = 0.00 s 4676s [1355/5474] TestFileExhaustive#test_stat_world_writable_p = 0.00 s 4676s [1356/5474] TestFileExhaustive#test_expand_path = 0.00 s 4676s [1357/5474] TestFileExhaustive#test_file_p = 0.00 s 4676s [1358/5474] TestFileExhaustive#test_unlink = 0.00 s 4676s [1359/5474] TestFileExhaustive#test_ftype = 0.00 s 4676s [1360/5474] TestFileExhaustive#test_stat_world_readable_p = 0.00 s 4676s [1361/5474] TestFileExhaustive#test_stat_pipe_p = 0.00 s 4676s [1362/5474] TestFileExhaustive#test_expand_path_preserves_unc_path_root = 0.00 s 4676s [1363/5474] TestFileExhaustive#test_basename_strip = 0.01 s 4676s [1364/5474] TestFileExhaustive#test_readable_real_p = 0.00 s 4676s [1365/5474] TestFileExhaustive#test_stat_symlink_p = 0.00 s 4676s [1366/5474] TestFileExhaustive#test_stat_ftype = 0.00 s 4676s [1367/5474] TestFileExhaustive#test_mtime = 0.01 s 4676s [1368/5474] TestFileExhaustive#test_stat_size_p = 0.00 s 4676s [1369/5474] TestFileExhaustive#test_readlink = 0.01 s 4676s [1370/5474] TestFileExhaustive#test_expand_path_returns_a_string_when_passed_a_string_subclass = 0.00 s 4676s [1371/5474] TestFileExhaustive#test_writable_p = 0.00 s 4676s [1372/5474] TestFileExhaustive#test_expand_path_error_for_nonexistent_username = 0.00 s 4676s [1373/5474] TestFileExhaustive#test_directory_p = 0.00 s 4676s [1374/5474] TestFileExhaustive#test_expand_path_for_existent_username = 0.00 s 4676s [1375/5474] TestFileExhaustive#test_world_readable_p = 0.01 s 4676s [1376/5474] TestFileExhaustive#test_rename = 0.01 s 4676s [1377/5474] TestFileExhaustive#test_expand_path_expands_dot_dir = 0.00 s 4676s [1378/5474] TestFileExhaustive#test_expand_path_resolve_empty_string_current_directory = 0.01 s 4676s [1379/5474] TestFileExhaustive#test_stat_new_utf8 = 0.00 s 4676s [1380/5474] TestFileExhaustive#test_stat_file_p = 0.01 s 4676s [1381/5474] TestFileExhaustive#test_pipe_p = 0.00 s 4676s [1382/5474] TestFileExhaustive#test_join_alt_separator = 0.00 s 4676s [1383/5474] TestFileExhaustive#test_stat_readable_p = 0.00 s 4676s [1384/5474] TestFileExhaustive#test_expand_path_raises_a_type_error_if_not_passed_a_string_type = 0.00 s 4676s [1385/5474] TestFileExhaustive#test_writable_real_p = 0.00 s 4676s [1386/5474] TestFileExhaustive#test_expand_path_resolve_file_name_and_dir_string_relative = 0.00 s 4676s [1387/5474] TestFileExhaustive#test_stat_chardev_p = 0.00 s 4676s [1388/5474] TestFileExhaustive#test_path_check = 0.00 s 4676s [1389/5474] TestFileExhaustive#test_size_p = 0.00 s 4676s [1390/5474] TestFileExhaustive#test_size = 0.01 s 4676s [1391/5474] TestFileExhaustive#test_ignore_nil_dir_string = 0.00 s 4676s [1392/5474] TestFileExhaustive#test_expand_path_home = 0.00 s 4676s [1393/5474] TestFileExhaustive#test_stat_directory_p = 0.00 s 4676s [1394/5474] TestFileExhaustive#test_lutime = 0.00 s 4676s [1395/5474] TestFileExhaustive#test_utime = 0.00 s 4676s [1396/5474] TestFileExhaustive#test_join = 0.00 s 4676s [1397/5474] TestFileExhaustive#test_owned_p = 0.00 s 4676s [1398/5474] TestFileExhaustive#test_executable_real_p = 0.00 s 4676s [1399/5474] TestFileExhaustive#test_expand_path_encoding_filesystem = 0.00 s 4676s [1400/5474] TestFileExhaustive#test_executable_p = 0.00 s 4676s [1401/5474] TestFileExhaustive#test_chmod = 0.01 s 4676s [1402/5474] TestFileExhaustive#test_basename = 0.00 s 4676s [1403/5474] TestFileExhaustive#test_stat_sticky = 0.00 s 4676s [1404/5474] TestFileExhaustive#test_expand_path_resolve_dot_current_directory = 0.00 s 4676s [1405/5474] TestFileExhaustive#test_stat_suid = 0.01 s 4676s [1406/5474] TestFileExhaustive#test_expand_path_does_not_modify_the_string_argument = 0.00 s 4676s [1407/5474] TestFileExhaustive#test_stat_blockdev_p = 0.00 s 4676s [1408/5474] TestFileExhaustive#test_path = 0.01 s 4676s [1409/5474] TestThreadQueue#test_sized_queue_one_closed_interrupt = 0.00 s 4676s [1410/5474] TestThreadQueue#test_queue = 0.07 s 4676s [1411/5474] TestThreadQueue#test_empty_non_blocking = 0.02 s 4676s [1412/5474] TestThreadQueue#test_sized_queue_initialized = 0.00 s 4676s [1413/5474] TestThreadQueue#test_sized_queue_push_interrupt = 0.00 s 4676s [1414/5474] TestThreadQueue#test_size_queue_close_wakeup = 0.02 s 4676s [1415/5474] TestThreadQueue#test_queue_close_wakeup = 0.02 s 4676s [1416/5474] TestThreadQueue#test_deny_pushers = 0.04 s 4676s [1417/5474] TestThreadQueue#test_sized_queue_pop_non_block = 0.01 s 4676s [1418/5474] TestThreadQueue#test_queue_push_return_value = 0.00 s 4676s [1419/5474] TestThreadQueue#test_sized_queue_push_return_value = 0.00 s 4676s [1420/5474] TestThreadQueue#test_dup = 0.00 s 4679s [1421/5474] TestThreadQueue#test_queue_with_trap = 2.59 s 4679s [1422/5474] TestThreadQueue#test_sized_queue_clear_return_value = 0.00 s 4679s [1423/5474] TestThreadQueue#test_dump = 0.00 s 4679s [1424/5474] TestThreadQueue#test_queue_pop_non_block = 0.00 s 4679s [1425/5474] TestThreadQueue#test_one_element_sized_queue = 0.00 s 4679s [1426/5474] TestThreadQueue#test_sized_queue = 0.06 s 4679s [1427/5474] TestThreadQueue#test_queue_clear_return_value = 0.00 s 4683s [1428/5474] TestThreadQueue#test_thr_kill = 3.83 s 4683s [1429/5474] TestThreadQueue#test_queue_initialize = 0.00 s 4683s [1430/5474] TestThreadQueue#test_queue_initialized = 0.00 s 4683s [1431/5474] TestThreadQueue#test_blocked_pushers_empty = 0.01 s 4683s [1432/5474] TestThreadQueue#test_sized_queue_assign_max = 0.00 s 4683s [1433/5474] TestThreadQueue#test_close = 0.01 s 4683s [1434/5474] TestThreadQueue#test_queue_pop_interrupt = 0.00 s 4683s [1435/5474] TestThreadQueue#test_queue_close_multi_multi = 0.16 s 4683s [1436/5474] TestThreadQueue#test_sized_queue_closed_push_non_blocking = 0.00 s 4683s [1437/5474] TestThreadQueue#test_blocked_pushers = 0.02 s 4683s [1438/5474] TestThreadQueue#test_sized_queue_pop_interrupt = 0.00 s 4683s [1439/5474] TestThreadQueue#test_sized_queue_throttle = 0.01 s 4683s [1440/5474] TestThreadQueue#test_sized_queue_initialize = 0.00 s 4683s [1441/5474] TestThreadQueue#test_queue_thread_raise = 0.21 s 4683s [1442/5474] TestThreadQueue#test_sized_queue_push_non_block = 0.00 s 4683s [1443/5474] TestThreadQueue#test_close_twice = 0.00 s 4683s [1444/5474] TestThreadQueue#test_sized_queue_clear = 0.00 s 4683s [1445/5474] TestIO_M17N#test_s_foreach_enc = 0.00 s 4683s [1446/5474] TestIO_M17N#test_read_newline_conversion_with_encoding_conversion = 0.01 s 4683s [1447/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc_in_opt2 = 0.00 s 4683s [1448/5474] TestIO_M17N#test_s_pipe_undef = 0.00 s 4683s [1449/5474] TestIO_M17N#test_textmode_paragraph_binaryread = 0.01 s 4683s [1450/5474] TestIO_M17N#test_open_ascii = 0.01 s 4683s [1451/5474] TestIO_M17N#test_marshal = 0.00 s 4683s [1452/5474] TestIO_M17N#test_bom_non_utf = 0.00 s 4683s [1453/5474] TestIO_M17N#test_textmode_decode_universal_newline_getc = 0.01 s 4683s [1454/5474] TestIO_M17N#test_read_stateful = 0.00 s 4683s [1455/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc_in_opt = 0.00 s 4690s [1456/5474] TestIO_M17N#test_bom_too_long_utfname = 7.28 s 4690s [1457/5474] TestIO_M17N#test_write_conversion = 0.00 s 4690s [1458/5474] TestIO_M17N#test_set_encoding_invalid = 0.00 s 4690s [1459/5474] TestIO_M17N#test_set_encoding_identical = 0.00 s 4690s [1460/5474] TestIO_M17N#test_s_pipe_invalid = 0.00 s 4694s [1461/5474] TestIO_M17N#test_popen_r_enc_in_opt2 = 3.39 s 4694s [1462/5474] TestIO_M17N#test_nonascii_terminator = 0.00 s 4694s [1463/5474] TestIO_M17N#test_open_w_enc_enc_in_opt2 = 0.00 s 4703s [1464/5474] TestIO_M17N#test_each_codepoint_need_more = 9.50 s 4703s [1465/5474] TestIO_M17N#test_open_r_enc_enc = 0.00 s 4703s [1466/5474] TestIO_M17N#test_s_foreach_open_args_enc = 0.00 s 4703s [1467/5474] TestIO_M17N#test_s_foreach_enc_enc_in_opt = 0.00 s 4703s [1468/5474] TestIO_M17N#test_s_foreach_enc_in_opt = 0.00 s 4703s [1469/5474] TestIO_M17N#test_open_w_enc_in_opt = 0.01 s 4703s [1470/5474] TestIO_M17N#test_write_conversion_fixenc = 0.00 s 4703s [1471/5474] TestIO_M17N#test_open_w = 0.00 s 4703s [1472/5474] TestIO_M17N#test_textmode_decode_universal_newline_gets = 0.00 s 4703s [1473/5474] TestIO_M17N#test_set_encoding_undef_replace = 0.00 s 4703s [1474/5474] TestIO_M17N#test_binmode_paragraph_nonasciicompat = 0.02 s 4703s [1475/5474] TestIO_M17N#test_ignored_encoding_option = 0.00 s 4703s [1476/5474] TestIO_M17N#test_text_mode = 0.00 s 4703s [1477/5474] TestIO_M17N#test_textmode_paragraph_nonasciicompat = 0.03 s 4704s [1478/5474] TestIO_M17N#test_strip_bom:UTF-32BE = 0.13 s 4704s [1479/5474] TestIO_M17N#test_stderr = 0.00 s 4704s [1480/5474] TestIO_M17N#test_gets_nil = 0.01 s 4704s [1481/5474] TestIO_M17N#test_strip_bom:UTF-8 = 0.03 s 4708s [1482/5474] TestIO_M17N#test_popen_r_enc_enc_in_opt2 = 4.08 s 4708s [1483/5474] TestIO_M17N#test_cbuf_select = 0.01 s 4708s [1484/5474] TestIO_M17N#test_w_xml_attr = 0.01 s 4708s [1485/5474] TestIO_M17N#test_gets_invalid = 0.01 s 4708s [1486/5474] TestIO_M17N#test_ungetc_stateful_conversion2 = 0.01 s 4708s [1487/5474] TestIO_M17N#test_invalid_w = 0.00 s 4708s [1488/5474] TestIO_M17N#test_read_mode = 0.01 s 4708s [1489/5474] TestIO_M17N#test_strip_bom_no_bom = 0.00 s 4708s [1490/5474] TestIO_M17N#test_textmode_encode_newline_enc = 0.01 s 4708s [1491/5474] TestIO_M17N#test_write_noenc = 0.00 s 4708s [1492/5474] TestIO_M17N#test_getc_invalid2 = 0.00 s 4708s [1493/5474] TestIO_M17N#test_binmode3 = 0.00 s 4708s [1494/5474] TestIO_M17N#test_open_r_ext_enc_in_opt = 0.00 s 4711s [1495/5474] TestIO_M17N#test_popen_r_enc_enc = 3.38 s 4711s [1496/5474] TestIO_M17N#test_write_mode_fail = 0.00 s 4711s [1497/5474] TestIO_M17N#test_strip_bom:UTF-16BE = 0.01 s 4711s [1498/5474] TestIO_M17N#test_set_encoding_undef = 0.00 s 4711s [1499/5474] TestIO_M17N#test_terminator_conversion2 = 0.00 s 4715s [1500/5474] TestIO_M17N#test_open_pipe_r_enc = 3.48 s 4715s [1501/5474] TestIO_M17N#test_write_ascii_incompat = 0.00 s 4715s [1502/5474] TestIO_M17N#test_read_newline_conversion_without_encoding_conversion = 0.00 s 4715s [1503/5474] TestIO_M17N#test_read_all_invalid = 0.00 s 4715s [1504/5474] TestIO_M17N#test_textmode_decode_universal_newline_utf16 = 0.00 s 4715s [1505/5474] TestIO_M17N#test_strip_bom:UTF-32LE = 0.00 s 4715s [1506/5474] TestIO_M17N#test_bom_non_reading = 0.00 s 4715s [1507/5474] TestIO_M17N#test_read_with_buf_broken_ascii_only = 0.00 s 4718s [1508/5474] TestIO_M17N#test_lf_decorator_on_stdout = 3.63 s 4718s [1509/5474] TestIO_M17N#test_set_encoding2 = 0.00 s 4718s [1510/5474] TestIO_M17N#test_write_conversion_anyenc_stateful = 0.00 s 4718s [1511/5474] TestIO_M17N#test_getc_invalid = 0.00 s 4718s [1512/5474] TestIO_M17N#test_open_w_enc = 0.00 s 4718s [1513/5474] TestIO_M17N#test_text_mode_ungetc_eof = 0.00 s 4718s [1514/5474] TestIO_M17N#test_pipe_conversion = 0.00 s 4718s [1515/5474] TestIO_M17N#test_set_encoding_nil = 0.00 s 4718s [1516/5474] TestIO_M17N#test_open_nonascii = 0.01 s 4718s [1517/5474] TestIO_M17N#test_strip_bom_no_conv = 0.00 s 4722s [1518/5474] TestIO_M17N#test_popen_r_enc_in_opt = 3.31 s 4722s [1519/5474] TestIO_M17N#test_io_new_enc = 0.00 s 4722s [1520/5474] TestIO_M17N#test_open_r_encname_in_opt = 0.00 s 4722s [1521/5474] TestIO_M17N#test_getc_stateful_conversion = 0.00 s 4722s [1522/5474] TestIO_M17N#test_open_r_encname_encname = 0.00 s 4725s [1523/5474] TestIO_M17N#test_popen_r_enc_enc_in_opt = 3.26 s 4725s [1524/5474] TestIO_M17N#test_open_w_enc_enc_perm = 0.00 s 4725s [1525/5474] TestIO_M17N#test_textmode_decode_universal_newline_read = 0.00 s 4725s [1526/5474] TestIO_M17N#test_textmode_paragraphmode = 0.00 s 4725s [1527/5474] TestIO_M17N#test_getc_ascii_only = 0.00 s 4725s [1528/5474] TestIO_M17N#test_binmode_write_ascii_incompat_internal = 0.01 s 4725s [1529/5474] TestIO_M17N#test_getc_conversion = 0.00 s 4725s [1530/5474] TestIO_M17N#test_s_foreach_enc_enc = 0.00 s 4725s [1531/5474] TestIO_M17N#test_read_all = 0.00 s 4725s [1532/5474] TestIO_M17N#test_open_r_encname_encname_in_opt = 0.00 s 4725s [1533/5474] TestIO_M17N#test_open_r_enc_in_opt = 0.00 s 4725s [1534/5474] TestIO_M17N#test_invalid_r = 0.00 s 4725s [1535/5474] TestIO_M17N#test_s_foreach_open_args_enc_enc = 0.00 s 4725s [1536/5474] TestIO_M17N#test_default_mode_on_unix = 0.00 s 4725s [1537/5474] TestIO_M17N#test_binmode2 = 0.00 s 4725s [1538/5474] TestIO_M17N#test_getc_invalid3 = 0.00 s 4725s [1539/5474] TestIO_M17N#test_ungetc_stateful_conversion = 0.00 s 4725s [1540/5474] TestIO_M17N#test_textmode_twice = 0.00 s 4728s [1541/5474] TestIO_M17N#test_popenv_r_enc_enc_in_opt2 = 3.33 s 4728s [1542/5474] TestIO_M17N#test_open_r_enc_enc_in_opt = 0.00 s 4728s [1543/5474] TestIO_M17N#test_binmode = 0.00 s 4728s [1544/5474] TestIO_M17N#test_pipe_terminator_conversion = 0.00 s 4732s [1545/5474] TestIO_M17N#test_cr_decorator_on_stdout = 3.68 s 4732s [1546/5474] TestIO_M17N#test_terminator_stateful_conversion = 0.00 s 4732s [1547/5474] TestIO_M17N#test_gets_limit = 0.01 s 4732s [1548/5474] TestIO_M17N#test_open_wb = 0.00 s 4732s [1549/5474] TestIO_M17N#test_strip_bom_invalid = 0.00 s 4732s [1550/5474] TestIO_M17N#test_getc_newlineconv = 0.00 s 4732s [1551/5474] TestIO_M17N#test_file_foreach = 0.00 s 4732s [1552/5474] TestIO_M17N#test_s_foreach_open_args_enc_in_opt2 = 0.00 s 4732s [1553/5474] TestIO_M17N#test_write_mode = 0.14 s 4732s [1554/5474] TestIO_M17N#test_open_w_enc_enc = 0.00 s 4732s [1555/5474] TestIO_M17N#test_write_conversion_anyenc_stateful_nosync = 0.00 s 4732s [1556/5474] TestIO_M17N#test_s_foreach_open_args_enc_in_opt = 0.00 s 4732s [1557/5474] TestIO_M17N#test_open_rb = 0.00 s 4732s [1558/5474] TestIO_M17N#test_open_r = 0.00 s 4736s [1559/5474] TestIO_M17N#test_popen_r_enc = 3.99 s 4736s [1560/5474] TestIO_M17N#test_binary_mode = 0.00 s 4736s [1561/5474] TestIO_M17N#test_set_encoding_enc = 0.00 s 4736s [1562/5474] TestIO_M17N#test_read_newline_conversion_error = 0.00 s 4736s [1563/5474] TestIO_M17N#test_binary = 0.00 s 4736s [1564/5474] TestIO_M17N#test_s_foreach_enc_enc_in_opt2 = 0.00 s 4736s [1565/5474] TestIO_M17N#test_pipe_convert_partial_read = 0.10 s 4736s [1566/5474] TestIO_M17N#test_set_encoding = 0.00 s 4736s [1567/5474] TestIO_M17N#test_default_mode_decode_universal_newline_gets = 0.00 s 4736s [1568/5474] TestIO_M17N#test_stdin = 0.00 s 4736s [1569/5474] TestIO_M17N#test_terminator_conversion = 0.00 s 4736s [1570/5474] TestIO_M17N#test_read_encoding = 0.04 s 4736s [1571/5474] TestIO_M17N#test_write_conversion_anyenc_stateless = 0.00 s 4736s [1572/5474] TestIO_M17N#test_open_r_externalencname_internalencname_in_opt = 0.00 s 4736s [1573/5474] TestIO_M17N#test_open_r_enc = 0.00 s 4736s [1574/5474] TestIO_M17N#test_s_pipe_undef_replace_string = 0.00 s 4736s [1575/5474] TestIO_M17N#test_open_w_enc_enc_in_opt = 0.00 s 4736s [1576/5474] TestIO_M17N#test_binmode_decode_universal_newline = 0.00 s 4736s [1577/5474] TestIO_M17N#test_s_foreach_enc_in_opt2 = 0.00 s 4736s [1578/5474] TestIO_M17N#test_textmode_encode_newline = 0.00 s 4736s [1579/5474] TestIO_M17N#test_ungetc_str = 0.00 s 4736s [1580/5474] TestIO_M17N#test_open_w_enc_in_opt2 = 0.00 s 4736s [1581/5474] TestIO_M17N#test_open_r_ext_encname_in_opt = 0.00 s 4736s [1582/5474] TestIO_M17N#test_stdout = 0.00 s 4736s [1583/5474] TestIO_M17N#test_open_r_ascii8bit = 0.01 s 4740s [1584/5474] TestIO_M17N#test_crlf_decorator_on_stdout = 3.45 s 4740s [1585/5474] TestException#test_exception_ensure = 0.00 s 4740s [1586/5474] TestException#test_rescue_single_argument = 0.00 s 4740s [1587/5474] TestException#test_catch_throw_in_require = 0.00 s 4743s [1588/5474] TestException#test_blocking_backtrace = 3.70 s 4743s [1589/5474] TestException#test_exception_rescued = 0.00 s 4743s [1590/5474] TestException#test_rescue_splat_argument = 0.00 s 4746s [1591/5474] TestException#test_exception_in_message = 2.32 s 4746s [1592/5474] TestException#test_systemexit_new = 0.00 s 4746s [1593/5474] TestException#test_raise_with_cause_in_rescue = 0.00 s 4746s [1594/5474] TestException#test_exception_in_rescue = 0.00 s 4746s [1595/5474] TestException#test_else_nested_rescued = 0.00 s 4746s [1596/5474] TestException#test_cause = 0.00 s 4748s [1597/5474] TestException#test_backtrace_in_eval = 2.29 s 4748s [1598/5474] TestException#test_cause_reraised = 0.00 s 4748s [1599/5474] TestException#test_cause_thread_with_cause = 0.00 s 4748s [1600/5474] TestException#test_exception_retry = 0.00 s 4748s [1601/5474] TestException#test_else_no_exception = 0.00 s 4748s [1602/5474] TestException#test_circular_cause = 0.00 s 4748s [1603/5474] TestException#test_else_nested_rescued_reraise = 0.00 s 4748s [1604/5474] TestException#test_else_nested_no_exception = 0.00 s 4748s [1605/5474] TestException#test_inspect = 0.01 s 4748s [1606/5474] TestException#test_exception_in_ensure_with_return = 0.00 s 4748s [1607/5474] TestException#test_break_ensure = 0.00 s 4748s [1608/5474] TestException#test_set_backtrace = 0.00 s 4748s [1609/5474] TestException#test_errinfo_in_debug = 0.02 s 4748s [1610/5474] TestException#test_cause_with_no_arguments = 0.00 s 4748s [1611/5474] TestException#test_catch_throw_noarg = 0.00 s 4748s [1612/5474] TestException#test_exception_in_ensure = 0.00 s 4748s [1613/5474] TestException#test_raise_with_wrong_number_of_arguments = 0.00 s 4748s [1614/5474] TestException#test_method_missing_reason_clear = 0.01 s 4748s [1615/5474] TestException#test_equal = 0.00 s 4751s [1616/5474] TestException#test_undefined_backtrace = 3.37 s 4751s [1617/5474] TestException#test_warn_deprecated_backwards_compatibility_category = 0.00 s 4751s [1618/5474] TestException#test_cause_at_raised = 0.00 s 4751s [1619/5474] TestException#test_uncaught_throw = 0.00 s 4751s [1620/5474] TestException#test_warning_category = 0.00 s 4764s [1621/5474] TestException#test_errat = 12.17 s 4764s [1622/5474] TestException#test_else_nested_unrescued = 0.00 s 4764s [1623/5474] TestException#test_errinfo = 0.00 s 4764s [1624/5474] TestException#test_exception_ensure_2 = 0.00 s 4764s [1625/5474] TestException#test_warn_deprecated_to_remove_backwards_compatibility_category = 0.01 s 4766s [1626/5474] TestException#test_cause_at_end = 2.48 s 4766s [1627/5474] TestException#test_warning_warn_invalid_argument = 0.00 s 4766s [1628/5474] TestException#test_to_s = 0.00 s 4766s [1629/5474] TestException#test_throw_false = 0.00 s 4766s [1630/5474] TestException#test_message_of_name_error = 0.00 s 4766s [1631/5474] TestException#test_ensure_after_nomemoryerror = 0.00 s 4766s [1632/5474] TestException#test_cause_thread_no_cause = 0.00 s 4766s [1633/5474] TestException#test_exit_success_p = 0.00 s 4766s [1634/5474] TestException#test_exception_in_ensure_with_redo = 0.00 s 4766s [1635/5474] TestException#test_errno = 0.00 s 4766s [1636/5474] TestException#test_type_error_message_encoding = 0.01 s 4766s [1637/5474] TestException#test_raise_with_cause = 0.00 s 4766s [1638/5474] TestException#test_unknown_option = 0.01 s 4769s [1639/5474] TestException#test_anonymous_message = 2.48 s 4769s [1640/5474] TestException#test_backtrace_by_exception = 0.00 s 4769s [1641/5474] TestException#test_thread_signal_location = 0.01 s 4769s [1642/5474] TestException#test_catch_throw = 0.00 s 4769s [1643/5474] TestException#test_cause_with_frozen_exception = 0.00 s 4769s [1644/5474] TestException#test_else_raised = 0.00 s 4771s [1645/5474] TestException#test_warning_warn_super = 2.27 s 4774s [1646/5474] TestException#test_super_in_method_missing = 3.40 s 4778s [1647/5474] TestException#test_exception_in_name_error_to_str = 3.40 s 4781s [1648/5474] TestException#test_exception_in_exception_equal = 3.36 s 4781s [1649/5474] TestException#test_catch_no_throw = 0.00 s 4781s [1650/5474] TestException#test_cause_raised_in_rescue = 0.00 s 4781s [1651/5474] TestException#test_encoding_in_message = 0.00 s 4781s [1652/5474] TestFloat#test_zero_p = 0.00 s 4781s [1653/5474] TestFloat#test_precision = 0.00 s 4781s [1654/5474] TestFloat#test_minus = 0.00 s 4781s [1655/5474] TestFloat#test_num2dbl = 0.00 s 4781s [1656/5474] TestFloat#test_modulo4 = 0.00 s 4781s [1657/5474] TestFloat#test_round_half_down = 0.00 s 4781s [1658/5474] TestFloat#test_float = 0.00 s 4781s [1659/5474] TestFloat#test_round_half_up = 0.00 s 4781s [1660/5474] TestFloat#test_modulo2 = 0.00 s 4781s [1661/5474] TestFloat#test_Float_with_exception_keyword = 0.01 s 4781s [1662/5474] TestFloat#test_step2 = 0.00 s 4781s [1663/5474] TestFloat#test_cmp = 0.00 s 4781s [1664/5474] TestFloat#test_eql = 0.00 s 4781s [1665/5474] TestFloat#test_positive_p = 0.00 s 4781s [1666/5474] TestFloat#test_singleton_method = 0.00 s 4781s [1667/5474] TestFloat#test_remainder = 0.00 s 4781s [1668/5474] TestFloat#test_prev_float = 0.00 s 4781s [1669/5474] TestFloat#test_next_prev_float_zero = 0.00 s 4781s [1670/5474] TestFloat#test_coerce = 0.00 s 4781s [1671/5474] TestFloat#test_ceil_with_precision = 0.00 s 4781s [1672/5474] TestFloat#test_finite_p = 0.00 s 4781s [1673/5474] TestFloat#test_round_half_invalid = 0.00 s 4781s [1674/5474] TestFloat#test_truncate = 0.01 s 4781s [1675/5474] TestFloat#test_floor = 0.00 s 4781s [1676/5474] TestFloat#test_div2 = 0.00 s 4781s [1677/5474] TestFloat#test_plus = 0.00 s 4781s [1678/5474] TestFloat#test_step = 0.02 s 4781s [1679/5474] TestFloat#test_round_half_even = 0.00 s 4785s [1680/5474] TestFloat#test_long_string = 3.83 s 4785s [1681/5474] TestFloat#test_modulo = 0.00 s 4785s [1682/5474] TestFloat#test_next_float = 0.00 s 4785s [1683/5474] TestFloat#test_ceil = 0.00 s 4785s [1684/5474] TestFloat#test_nan = 0.00 s 4786s [1685/5474] TestFloat#test_sleep_with_Float = 1.00 s 4786s [1686/5474] TestFloat#test_symmetry_bignum = 0.00 s 4786s [1687/5474] TestFloat#test_floor_with_precision = 0.00 s 4786s [1688/5474] TestFloat#test_divmod = 0.00 s 4786s [1689/5474] TestFloat#test_truncate_with_precision = 0.00 s 4786s [1690/5474] TestFloat#test_round = 0.01 s 4786s [1691/5474] TestFloat#test_modulo3 = 0.00 s 4786s [1692/5474] TestFloat#test_negative_p = 0.00 s 4786s [1693/5474] TestFloat#test_infinite_p = 0.00 s 4786s [1694/5474] TestFloat#test_floor_ceil_round_truncate = 0.00 s 4786s [1695/5474] TestFloat#test_Float_with_invalid_exception = 0.00 s 4786s [1696/5474] TestFloat#test_hash_0 = 0.00 s 4786s [1697/5474] TestFloat#test_step_excl = 0.09 s 4790s [1698/5474] TestFloat#test_aliased_quo_recursion = 3.41 s 4790s [1699/5474] TestFloat#test_round_with_precision = 0.00 s 4790s [1700/5474] TestFloat#test_divmod2 = 0.00 s 4790s [1701/5474] TestFloat#test_invalid_str = 0.00 s 4790s [1702/5474] TestFloat#test_mul = 0.00 s 4790s [1703/5474] TestFloat#test_pow = 0.00 s 4790s [1704/5474] TestFloat#test_round_half_nil = 0.00 s 4790s [1705/5474] TestFloat#test_div = 0.00 s 4790s [1706/5474] TestIfUnless#test_if_unless = 0.00 s 4793s [1707/5474] TestContinuation#test_ary_flatten = 3.49 s 4797s [1708/5474] TestContinuation#test_marshal_dump = 3.72 s 4797s [1709/5474] TestReadPartial#test_closed_pipe = 0.01 s 4797s [1710/5474] TestReadPartial#test_length_zero = 0.00 s 4797s [1711/5474] TestReadPartial#test_with_stdio = 0.21 s 4797s [1712/5474] TestReadPartial#test_open_pipe = 0.21 s 4797s [1713/5474] TestSuper#test_optional2 = 0.00 s 4797s [1714/5474] TestSuper#test_optional4 = 0.00 s 4797s [1715/5474] TestSuper#test_missing_super = 0.00 s 4797s [1716/5474] TestSuper#test_double_include = 0.00 s 4797s [1717/5474] TestSuper#test_define_method = 0.00 s 4797s [1718/5474] TestSuper#test_double2 = 0.00 s 4797s [1719/5474] TestSuper#test_keyword2 = 0.00 s 4797s [1720/5474] TestSuper#test_super_with_modified_rest_parameter = 0.00 s 4797s [1721/5474] TestSuper#test_single2 = 0.00 s 4800s [1722/5474] TestSuper#test_super_in_at_exit = 3.16 s 4800s [1723/5474] TestSuper#test_public_zsuper_with_prepend = 0.01 s 4800s [1724/5474] TestSuper#test_from_eval = 0.00 s 4800s [1725/5474] TestSuper#test_super_in_thread = 0.00 s 4800s [1726/5474] TestSuper#test_super_missing_prepended_module = 0.00 s 4800s [1727/5474] TestSuper#test_super_in_orphan_block = 0.00 s 4800s [1728/5474] TestSuper#test_double_include2 = 0.00 s 4800s [1729/5474] TestSuper#test_array1 = 0.00 s 4800s [1730/5474] TestSuper#test_array3 = 0.00 s 4800s [1731/5474] TestSuper#test_missing_super_in_method_module = 0.00 s 4800s [1732/5474] TestSuper#test_missing_super_in_module_unbound_method = 0.00 s 4800s [1733/5474] TestSuper#test_module_super_in_method_module = 0.00 s 4800s [1734/5474] TestSuper#test_super_in_module_unbound_method = 0.00 s 4800s [1735/5474] TestSuper#test_array4 = 0.00 s 4800s [1736/5474] TestSuper#test_array2 = 0.00 s 4800s [1737/5474] TestSuper#test_super_attr_reader = 0.00 s 4800s [1738/5474] TestSuper#test_yielding_super = 0.00 s 4800s [1739/5474] TestSuper#test_super_splat = 0.00 s 4800s [1740/5474] TestSuper#test_super_with_block = 0.00 s 4800s [1741/5474] TestSuper#test_overlaid = 0.01 s 4804s [1742/5474] TestSuper#test_super_in_BEGIN = 3.49 s 4804s [1743/5474] TestSuper#test_super_with_define_method = 0.00 s 4804s [1744/5474] TestSuper#test_single1 = 0.00 s 4804s [1745/5474] TestSuper#test_double1 = 0.00 s 4804s [1746/5474] TestSuper#test_double3 = 0.00 s 4804s [1747/5474] TestSuper#test_keyword1 = 0.00 s 4804s [1748/5474] TestSuper#test_optional5 = 0.01 s 4804s [1749/5474] TestSuper#test_optional1 = 0.00 s 4804s [1750/5474] TestSuper#test_super_attr_writer = 0.00 s 4804s [1751/5474] TestSuper#test_optional3 = 0.00 s 4807s [1752/5474] TestSuper#test_super_in_END = 3.55 s 4808s [1753/5474] Rational_Test#test_fixed_bug = 0.00 s 4808s [1754/5474] Rational_Test#test_idiv = 0.00 s 4808s [1755/5474] Rational_Test#test_marshal = 0.00 s 4808s [1756/5474] Rational_Test#test_math = 0.00 s 4808s [1757/5474] Rational_Test#test_sub = 0.00 s 4808s [1758/5474] Rational_Test#test_quo = 0.00 s 4808s [1759/5474] Rational_Test#test_marshal_compatibility = 0.00 s 4808s [1760/5474] Rational_Test#test_freeze = 0.00 s 4808s [1761/5474] Rational_Test#test_power_overflow = 0.00 s 4808s [1762/5474] Rational_Test#test_fdiv = 0.00 s 4808s [1763/5474] Rational_Test#test_attr = 0.00 s 4808s [1764/5474] Rational_Test#test_cmp = 0.00 s 4808s [1765/5474] Rational_Test#test_ratsub = 0.00 s 4808s [1766/5474] Rational_Test#test_hash = 0.00 s 4808s [1767/5474] Rational_Test#test_parse_zero_denominator = 0.00 s 4808s [1768/5474] Rational_Test#test_power_of_0 = 0.00 s 4808s [1769/5474] Rational_Test#test_positive_p = 0.00 s 4808s [1770/5474] Rational_Test#test_to_r = 0.00 s 4808s [1771/5474] Rational_Test#test_expt = 0.00 s 4808s [1772/5474] Rational_Test#test_remainder = 0.00 s 4808s [1773/5474] Rational_Test#test_trunc = 0.00 s 4808s [1774/5474] Rational_Test#test_coerce = 0.00 s 4808s [1775/5474] Rational_Test#test_inspect = 0.00 s 4808s [1776/5474] Rational_Test#test_finite_p = 0.00 s 4808s [1777/5474] Rational_Test#test_parse = 0.03 s 4808s [1778/5474] Rational_Test#test_conv = 0.01 s 4808s [1779/5474] Rational_Test#test_to_f = 0.00 s 4808s [1780/5474] Rational_Test#test_Rational_with_invalid_exception = 0.00 s 4808s [1781/5474] Rational_Test#test_attr2 = 0.00 s 4808s [1782/5474] Rational_Test#test_rationalize = 0.00 s 4808s [1783/5474] Rational_Test#test_coerce2 = 0.01 s 4808s [1784/5474] Rational_Test#test_to_c = 0.00 s 4808s [1785/5474] Rational_Test#test_add = 0.00 s 4808s [1786/5474] Rational_Test#test_ruby19 = 0.00 s 4808s [1787/5474] Rational_Test#test_uplus = 0.00 s 4808s [1788/5474] Rational_Test#test_modulo = 0.00 s 4808s [1789/5474] Rational_Test#test_to_i = 0.00 s 4808s [1790/5474] Rational_Test#test_eql_p = 0.00 s 4808s [1791/5474] Rational_Test#test_divmod = 0.00 s 4808s [1792/5474] Rational_Test#test_to_s = 0.00 s 4808s [1793/5474] Rational_Test#test_power_of_1_and_minus_1 = 0.00 s 4808s [1794/5474] Rational_Test#test_negative_p = 0.00 s 4808s [1795/5474] Rational_Test#test_infinite_p = 0.00 s 4808s [1796/5474] Rational_Test#test_supp = 0.00 s 4808s [1797/5474] Rational_Test#test_Rational_without_exception = 0.00 s 4808s [1798/5474] Rational_Test#test_gcdlcm = 0.00 s 4808s [1799/5474] Rational_Test#test_negate = 0.00 s 4808s [1800/5474] Rational_Test#test_eqeq = 0.00 s 4808s [1801/5474] Rational_Test#test_known_bug = 0.00 s 4808s [1802/5474] Rational_Test#test_mul = 0.00 s 4808s [1803/5474] Rational_Test#test_div = 0.00 s 4808s [1804/5474] TestRegexp#test_char_class = 0.02 s 4808s [1805/5474] TestRegexp#test_match_p = 0.00 s 4808s [1806/5474] TestRegexp#test_cclass_X = 0.01 s 4808s [1807/5474] TestRegexp#test_uninitialized = 0.01 s 4808s [1808/5474] TestRegexp#test_error_message_on_failed_conversion = 0.00 s 4811s [1809/5474] TestRegexp#test_assign_named_capture_trace = 3.28 s 4811s [1810/5474] TestRegexp#test_yoshidam_net_20041111_2 = 0.00 s 4811s [1811/5474] TestRegexp#test_quote = 0.00 s 4811s [1812/5474] TestRegexp#test_match_control_meta_escape = 0.00 s 4811s [1813/5474] TestRegexp#test_cclass_R = 0.00 s 4811s [1814/5474] TestRegexp#test_match_init_copy = 0.00 s 4811s [1815/5474] TestRegexp#test_ignorecase = 0.00 s 4811s [1816/5474] TestRegexp#test_raw_hyphen_and_tk_char_type_after_range = 0.00 s 4811s [1817/5474] TestRegexp#test_regsub = 0.00 s 4811s [1818/5474] TestRegexp#test_source_escaped = 0.00 s 4811s [1819/5474] TestRegexp#test_conditional_expression = 0.00 s 4811s [1820/5474] TestRegexp#test_match_offset_begin_end = 0.00 s 4811s [1821/5474] TestRegexp#test_ruby_dev_24643 = 0.00 s 4811s [1822/5474] TestRegexp#test_union2 = 0.00 s 4811s [1823/5474] TestRegexp#test_options = 0.00 s 4811s [1824/5474] TestRegexp#test_match = 0.00 s 4814s [1825/5474] TestRegexp#test_eq_tilde_can_be_overridden = 3.40 s 4814s [1826/5474] TestRegexp#test_char_type = 0.00 s 4814s [1827/5474] TestRegexp#test_match_regexp = 0.00 s 4814s [1828/5474] TestRegexp#test_ruby_dev_999 = 0.00 s 4814s [1829/5474] TestRegexp#test_last_match = 0.00 s 4814s [1830/5474] TestRegexp#test_parse_comment = 0.00 s 4814s [1831/5474] TestRegexp#test_match_matchsubstring = 0.00 s 4814s [1832/5474] TestRegexp#test_casefold_p = 0.00 s 4814s [1833/5474] TestRegexp#test_match_string = 0.00 s 4814s [1834/5474] TestRegexp#test_exec = 0.02 s 4814s [1835/5474] TestRegexp#test_dup = 0.00 s 4814s [1836/5474] TestRegexp#test_inspect = 0.00 s 4814s [1837/5474] TestRegexp#test_once_escape = 0.00 s 4814s [1838/5474] TestRegexp#test_parse = 0.01 s 4814s [1839/5474] TestRegexp#test_to_s2 = 0.00 s 4818s [1840/5474] TestRegexp#test_invalid_free_at_parse_depth_limit_over = 3.24 s 4818s [1841/5474] TestRegexp#test_regsub_K = 0.00 s 4818s [1842/5474] TestRegexp#test_once = 0.00 s 4818s [1843/5474] TestRegexp#test_match_lambda_multithread = 0.65 s 4818s [1844/5474] TestRegexp#test_equal = 0.00 s 4818s [1845/5474] TestRegexp#test_match_data_named_captures = 0.00 s 4818s [1846/5474] TestRegexp#test_match_setter = 0.00 s 4818s [1847/5474] TestRegexp#test_match_values_at = 0.00 s 4818s [1848/5474] TestRegexp#test_assign_named_capture = 0.00 s 4818s [1849/5474] TestRegexp#test_once_recursive = 0.00 s 4818s [1850/5474] TestRegexp#test_rindex_regexp = 0.00 s 4818s [1851/5474] TestRegexp#test_ruby_dev_31309 = 0.00 s 4818s [1852/5474] TestRegexp#test_ruby_talk_116455 = 0.00 s 4818s [1853/5474] TestRegexp#test_source_unescaped = 0.01 s 4818s [1854/5474] TestRegexp#test_parse_curly_brace = 0.01 s 4818s [1855/5474] TestRegexp#test_eqq = 0.00 s 4818s [1856/5474] TestRegexp#test_try_convert = 0.00 s 4818s [1857/5474] TestRegexp#test_unicode_age = 0.00 s 4818s [1858/5474] TestRegexp#test_source_escaped_paren = 0.00 s 4818s [1859/5474] TestRegexp#test_match_to_s = 0.00 s 4818s [1860/5474] TestRegexp#test_options_in_look_behind = 0.01 s 4818s [1861/5474] TestRegexp#test_backward = 0.00 s 4821s [1862/5474] TestRegexp#test_property_warn = 2.47 s 4821s [1863/5474] TestRegexp#test_match_match_length = 0.00 s 4821s [1864/5474] TestRegexp#test_initialize = 0.00 s 4821s [1865/5474] TestRegexp#test_getter = 0.00 s 4821s [1866/5474] TestRegexp#test_source = 0.00 s 4821s [1867/5474] TestRegexp#test_match_aref = 0.00 s 4821s [1868/5474] TestRegexp#test_match_inspect = 0.00 s 4821s [1869/5474] TestRegexp#test_unicode = 0.01 s 4821s [1870/5474] TestRegexp#test_quantifier_reduction = 0.01 s 4821s [1871/5474] TestRegexp#test_match_pre_post = 0.00 s 4821s [1872/5474] TestRegexp#test_assert_normal_exit = 0.00 s 4821s [1873/5474] TestRegexp#test_named_capture = 0.00 s 4821s [1874/5474] TestRegexp#test_char_to_option_kcode = 0.00 s 4821s [1875/5474] TestRegexp#test_word_boundary = 0.00 s 4821s [1876/5474] TestRegexp#test_regexp_popped = 0.00 s 4821s [1877/5474] TestRegexp#test_ruby_core_27247 = 0.00 s 4821s [1878/5474] TestRegexp#test_match_size = 0.00 s 4821s [1879/5474] TestRegexp#test_to_s_extended_subexp = 0.00 s 4821s [1880/5474] TestRegexp#test_match_array = 0.00 s 4821s [1881/5474] TestRegexp#test_ruby_dev_24887 = 0.00 s 4821s [1882/5474] TestRegexp#test_parse_look_behind = 0.00 s 4821s [1883/5474] TestRegexp#test_assign_named_capture_to_const = 0.00 s 4821s [1884/5474] TestRegexp#test_char_to_option = 0.00 s 4821s [1885/5474] TestRegexp#test_match_captures = 0.00 s 4821s [1886/5474] TestRegexp#test_parse_kg = 0.02 s 4821s [1887/5474] TestRegexp#test_matchdata = 0.00 s 4821s [1888/5474] TestRegexp#test_yoshidam_net_20041111_1 = 0.00 s 4821s [1889/5474] TestRegexp#test_named_capture_with_nul = 0.00 s 4821s [1890/5474] TestRegexp#test_premature_end_char_property = 0.00 s 4821s [1891/5474] TestRegexp#test_has_NOENCODING = 0.00 s 4821s [1892/5474] TestPack#test_pack_unpack_vV = 0.00 s 4821s [1893/5474] TestPack#test_pack_unpack_cC = 0.00 s 4821s [1894/5474] TestPack#test_pack_unpack_nN = 0.00 s 4821s [1895/5474] TestPack#test_unpack1 = 0.00 s 4821s [1896/5474] TestPack#test_pack_n = 0.00 s 4821s [1897/5474] TestPack#test_unpack_N = 0.00 s 4821s [1898/5474] TestPack#test_pack_unpack_percent = 0.00 s 4821s [1899/5474] TestPack#test_pack_unpack_Z = 0.00 s 4821s [1900/5474] TestPack#test_pack_unpack_X = 0.00 s 4821s [1901/5474] TestPack#test_pack_unpack_aA = 0.00 s 4821s [1902/5474] TestPack#test_pack_unpack_m0 = 0.00 s 4821s [1903/5474] TestPack#test_pack_p2 = 0.00 s 4821s [1904/5474] TestPack#test_unpack_n = 0.00 s 4821s [1905/5474] TestPack#test_pack_N = 0.00 s 4821s [1906/5474] TestPack#test_pack_unpack_x = 0.00 s 4821s [1907/5474] TestPack#test_pack_unpack_lL = 0.00 s 4821s [1908/5474] TestPack#test_comment = 0.00 s 4821s [1909/5474] TestPack#test_pack_unpack_w = 0.00 s 4821s [1910/5474] TestPack#test_pack = 0.00 s 4821s [1911/5474] TestPack#test_pack_unpack_sS = 0.00 s 4821s [1912/5474] TestPack#test_unpack1_offset = 0.00 s 4821s [1913/5474] TestPack#test_unpack_offset = 0.00 s 4821s [1914/5474] TestPack#test_unpack_with_block = 0.00 s 4821s [1915/5474] TestPack#test_pack_U = 0.00 s 4826s [1916/5474] TestPack#test_pack_unpack_m = 3.79 s 4826s [1917/5474] TestPack#test_pack_unpack_fdeEgG = 0.01 s 4826s [1918/5474] TestPack#test_pack_unpack_U = 0.00 s 4826s [1919/5474] TestPack#test_pack_with_buffer = 0.00 s 4826s [1920/5474] TestPack#test_short_string = 0.00 s 4826s [1921/5474] TestPack#test_illegal_bang = 0.00 s 4826s [1922/5474] TestPack#test_pack_unpack_iI = 0.00 s 4826s [1923/5474] TestSymbol#test_inspect_invalid = 0.00 s 4826s [1924/5474] TestSymbol#test_match_p_regexp = 0.00 s 4826s [1925/5474] TestSymbol#test_match_method = 0.00 s 4828s [1926/5474] TestSymbol#test_block_method_to_proc = 3.47 s 4835s [1927/5474] TestSymbol#test_hash_nondeterministic = 6.73 s 4835s [1928/5474] TestSymbol#test_intern = 0.00 s 4835s [1929/5474] TestSymbol#test_case = 0.00 s 4835s [1930/5474] TestSymbol#test_instance_eval = 0.01 s 4835s [1931/5474] TestSymbol#test_succ = 0.00 s 4835s [1932/5474] TestSymbol#test_block_given_to_proc = 0.00 s 4835s [1933/5474] TestSymbol#test_cmp = 0.00 s 4839s [1934/5474] TestSymbol#test_hash_redefinition = 3.59 s 4839s [1935/5474] TestSymbol#test_frozen_symbol = 0.00 s 4839s [1936/5474] TestSymbol#test_singleton_method = 0.00 s 4841s [1937/5474] TestSymbol#test_eq_can_be_redefined = 2.48 s 4841s [1938/5474] TestSymbol#test_to_proc = 0.00 s 4841s [1939/5474] TestSymbol#test_to_proc_call_with_symbol_proc = 0.00 s 4841s [1940/5474] TestSymbol#test_all_symbols = 0.03 s 4841s [1941/5474] TestSymbol#test_match_p_string = 0.00 s 4841s [1942/5474] TestSymbol#test_to_proc_lambda_with_refinements = 0.00 s 4841s [1943/5474] TestSymbol#test_dynamic_attrset_id = 0.00 s 4841s [1944/5474] TestSymbol#test_name = 0.00 s 4841s [1945/5474] TestSymbol#test_MATCH = 0.00 s 4841s [1946/5474] TestSymbol#test_instance_exec = 0.01 s 4841s [1947/5474] TestSymbol#test_inspect_number = 0.00 s 4841s [1948/5474] TestSymbol#test_block_persist_between_calls = 0.00 s 4841s [1949/5474] TestSymbol#test_return_from_symbol_proc = 0.00 s 4841s [1950/5474] TestSymbol#test_end_with? = 0.00 s 4841s [1951/5474] TestSymbol#test_ascii_incomat_inspect = 0.00 s 4841s [1952/5474] TestSymbol#test_inspect_suboptimal = 0.00 s 4841s [1953/5474] TestSymbol#test_inspect_dollar = 0.00 s 4841s [1954/5474] TestSymbol#test_length = 0.00 s 4841s [1955/5474] TestSymbol#test_to_proc_instance_exec = 0.00 s 4841s [1956/5474] TestSymbol#test_to_proc_lambda? = 0.00 s 4841s [1957/5474] TestSymbol#test_empty = 0.00 s 4841s [1958/5474] TestSymbol#test_start_with? = 0.00 s 4845s [1959/5474] TestSymbol#test_to_proc_for_hash_each = 3.68 s 4848s [1960/5474] TestSymbol#test_block_curry_proc = 3.44 s 4858s [1961/5474] TestSymbol#test_symbol_gc_1 = 9.27 s 4858s [1962/5474] TestSymbol#test_casecmp = 0.00 s 4858s [1963/5474] TestSymbol#test_call = 0.00 s 4858s [1964/5474] TestSymbol#test_to_proc_arg_with_refinements_undefined = 0.00 s 4858s [1965/5474] TestSymbol#test_symbol_popped = 0.00 s 4858s [1966/5474] TestSymbol#test_casecmp? = 0.00 s 4861s [1967/5474] TestSymbol#test_block_curry_lambda = 3.17 s 4861s [1968/5474] TestTranscode#test_all_bytes = 0.00 s 4864s [1969/5474] TestTranscode#test_valid_dummy_encoding = 3.68 s 4864s [1970/5474] TestTranscode#test_utf_32 = 0.01 s 4864s [1971/5474] TestTranscode#test_twostep = 0.00 s 4864s [1972/5474] TestTranscode#test_nothing_changed = 0.00 s 4864s [1973/5474] TestTranscode#test_CP855 = 0.00 s 4864s [1974/5474] TestTranscode#test_ill_formed_utf_8_replace = 0.00 s 4864s [1975/5474] TestTranscode#test_undef_replace_string = 0.00 s 4864s [1976/5474] TestTranscode#test_arguments = 0.00 s 4864s [1977/5474] TestTranscode#test_noargument = 0.00 s 4864s [1978/5474] TestTranscode#test_encode_with_invalid_chars = 0.00 s 4864s [1979/5474] TestTranscode#test_macCyrillic = 0.00 s 4864s [1980/5474] TestTranscode#test_iso_2022_jp = 0.00 s 4864s [1981/5474] TestTranscode#test_IBM437 = 0.00 s 4864s [1982/5474] TestTranscode#test_gb18030 = 0.10 s 4865s [1983/5474] TestTranscode#test_invalid_ignore = 0.00 s 4865s [1984/5474] TestTranscode#test_from_cp50221 = 0.00 s 4865s [1985/5474] TestTranscode#test_tilde_overline = 0.00 s 4865s [1986/5474] TestTranscode#test_IBM852 = 0.00 s 4865s [1987/5474] TestTranscode#test_koi8_r = 0.00 s 4865s [1988/5474] TestTranscode#test_IBM865 = 0.00 s 4865s [1989/5474] TestTranscode#test_fallback_hash_default = 0.00 s 4865s [1990/5474] TestTranscode#test_windows_1250 = 0.00 s 4865s [1991/5474] TestTranscode#test_windows_1252 = 0.00 s 4868s [1992/5474] TestTranscode#test_loading_race = 3.78 s 4868s [1993/5474] TestTranscode#test_EBCDIC = 0.00 s 4868s [1994/5474] TestTranscode#test_IBM861 = 0.00 s 4868s [1995/5474] TestTranscode#test_windows_1254 = 0.00 s 4868s [1996/5474] TestTranscode#test_macTurkish = 0.00 s 4868s [1997/5474] TestTranscode#test_IBM863 = 0.00 s 4868s [1998/5474] TestTranscode#test_windows_1256 = 0.00 s 4868s [1999/5474] TestTranscode#test_utf_16 = 0.01 s 4868s [2000/5474] TestTranscode#test_unicode_public_review_issue_121 = 0.00 s 4868s [2001/5474] TestTranscode#test_Big5_UAO = 0.01 s 4868s [2002/5474] TestTranscode#test_IBM869 = 0.00 s 4868s [2003/5474] TestTranscode#test_euc_jp = 0.01 s 4868s [2004/5474] TestTranscode#test_eucjp_sjis_undef = 0.00 s 4868s [2005/5474] TestTranscode#test_utf8_mac = 0.01 s 4868s [2006/5474] TestTranscode#test_IBM720 = 0.00 s 4868s [2007/5474] TestTranscode#test_fallback_method = 0.00 s 4868s [2008/5474] TestTranscode#test_eucjp_ms = 0.00 s 4868s [2009/5474] TestTranscode#test_encodings = 0.01 s 4868s [2010/5474] TestTranscode#test_undef_replace = 0.00 s 4868s [2011/5474] TestTranscode#test_utf_32_bom = 0.00 s 4868s [2012/5474] TestTranscode#test_eucjp_sjis_unassigned = 0.00 s 4868s [2013/5474] TestTranscode#test_gbk = 0.01 s 4868s [2014/5474] TestTranscode#test_invalid_replace = 0.00 s 4868s [2015/5474] TestTranscode#test_euc_jis_2004 = 0.00 s 4868s [2016/5474] TestTranscode#test_fallback_aref = 0.00 s 4868s [2017/5474] TestTranscode#test_scrub_encode_with_coderange = 0.00 s 4868s [2018/5474] TestTranscode#test_TIS_620 = 0.00 s 4868s [2019/5474] TestTranscode#test_macRoman = 0.00 s 4868s [2020/5474] TestTranscode#test_windows_874 = 0.00 s 4868s [2021/5474] TestTranscode#test_iso_2022_jp_1 = 0.00 s 4868s [2022/5474] TestTranscode#test_newline_options = 0.00 s 4868s [2023/5474] TestTranscode#test_windows_1257 = 0.00 s 4868s [2024/5474] TestTranscode#test_IBM862 = 0.00 s 4868s [2025/5474] TestTranscode#test_windows_1255 = 0.00 s 4868s [2026/5474] TestTranscode#test_IBM860 = 0.00 s 4872s [2027/5474] TestTranscode#test_pseudo_encoding_inspect(UTF-32) = 3.46 s 4872s [2028/5474] TestTranscode#test_windows_1253 = 0.01 s 4872s [2029/5474] TestTranscode#test_IBM866 = 0.00 s 4872s [2030/5474] TestTranscode#test_windows_1251 = 0.00 s 4872s [2031/5474] TestTranscode#test_windows_31j = 0.00 s 4872s [2032/5474] TestTranscode#test_yen_sign = 0.00 s 4872s [2033/5474] TestTranscode#test_errors = 0.00 s 4872s [2034/5474] TestTranscode#test_macIceland = 0.00 s 4872s [2035/5474] TestTranscode#test_invalid_replace_string = 0.00 s 4872s [2036/5474] TestTranscode#test_gb2312 = 0.01 s 4872s [2037/5474] TestTranscode#test_length = 0.11 s 4872s [2038/5474] TestTranscode#test_macGreek = 0.00 s 4872s [2039/5474] TestTranscode#test_IBM855 = 0.00 s 4872s [2040/5474] TestTranscode#test_Big5_Hkscs = 0.00 s 4872s [2041/5474] TestTranscode#test_koi8_u = 0.00 s 4872s [2042/5474] TestTranscode#test_IBM857 = 0.00 s 4872s [2043/5474] TestTranscode#test_to_cp50221 = 0.00 s 4872s [2044/5474] TestTranscode#test_utf_16_bom = 0.00 s 4872s [2045/5474] TestTranscode#test_macUkraine = 0.00 s 4872s [2046/5474] TestTranscode#test_Big5 = 0.00 s 4872s [2047/5474] TestTranscode#test_CP850 = 0.00 s 4872s [2048/5474] TestTranscode#test_encoding_of_ascii_originating_from_binary = 0.00 s 4872s [2049/5474] TestTranscode#test_CP852 = 0.00 s 4872s [2050/5474] TestTranscode#test_fallback = 0.00 s 4872s [2051/5474] TestTranscode#test_fallback_proc = 0.00 s 4872s [2052/5474] TestTranscode#test_ascii_range = 0.00 s 4872s [2053/5474] TestTranscode#test_macRomania = 0.00 s 4872s [2054/5474] TestTranscode#test_eucjp_sjis = 0.00 s 4872s [2055/5474] TestTranscode#test_IBM775 = 0.00 s 4875s [2056/5474] TestTranscode#test_pseudo_encoding_inspect(UTF-16) = 3.46 s 4876s [2057/5474] TestTranscode#test_shift_jis = 0.01 s 4876s [2058/5474] TestTranscode#test_macCroatian = 0.00 s 4876s [2059/5474] TestUnicodeEscape#test_regexp = 0.00 s 4876s [2060/5474] TestUnicodeEscape#test_fulton = 0.00 s 4876s [2061/5474] TestUnicodeEscape#test_chars = 0.00 s 4876s [2062/5474] TestUnicodeEscape#test_syntax_variants = 0.00 s 4876s [2063/5474] TestUnicodeEscape#test_dynamic_regexp = 0.00 s 4876s [2064/5474] TestUnicodeEscape#test_edge_cases = 0.00 s 4876s [2065/5474] TestIntegerComb#test_printf_o_sign = 0.01 s 4876s [2066/5474] TestIntegerComb#test_marshal = 0.01 s 4876s [2067/5474] TestIntegerComb#test_xor = 0.28 s 4876s [2068/5474] TestIntegerComb#test_minus = 0.30 s 4876s [2069/5474] TestIntegerComb#test_anybits_p = 0.05 s 4877s [2070/5474] TestIntegerComb#test_mult = 0.60 s 4877s [2071/5474] TestIntegerComb#test_succ = 0.00 s 4877s [2072/5474] TestIntegerComb#test_cmp = 0.12 s 4877s [2073/5474] TestIntegerComb#test_even_odd = 0.00 s 4877s [2074/5474] TestIntegerComb#test_nobits_p = 0.03 s 4877s [2075/5474] TestIntegerComb#test_remainder = 0.18 s 4877s [2076/5474] TestIntegerComb#test_or = 0.12 s 4877s [2077/5474] TestIntegerComb#test_eq = 0.08 s 4877s [2078/5474] TestIntegerComb#test_pack_utf8 = 0.03 s 4877s [2079/5474] TestIntegerComb#test_pack_ber = 0.02 s 4878s [2080/5474] TestIntegerComb#test_and = 0.19 s 4878s [2081/5474] TestIntegerComb#test_allbits_p = 0.04 s 4878s [2082/5474] TestIntegerComb#test_truncate = 0.00 s 4878s [2083/5474] TestIntegerComb#test_floor = 0.00 s 4878s [2084/5474] TestIntegerComb#test_plus = 0.20 s 4878s [2085/5474] TestIntegerComb#test_unary_minus = 0.00 s 4878s [2086/5474] TestIntegerComb#test_ceil = 0.00 s 4878s [2087/5474] TestIntegerComb#test_abs = 0.00 s 4878s [2088/5474] TestIntegerComb#test_zero_nonzero = 0.00 s 4878s [2089/5474] TestIntegerComb#test_divmod = 0.26 s 4878s [2090/5474] TestIntegerComb#test_to_s = 0.04 s 4878s [2091/5474] TestIntegerComb#test_round = 0.00 s 4878s [2092/5474] TestIntegerComb#test_printf_x = 0.01 s 4878s [2093/5474] TestIntegerComb#test_printf_x_sign = 0.01 s 4878s [2094/5474] TestIntegerComb#test_pred = 0.00 s 4878s [2095/5474] TestIntegerComb#test_unary_plus = 0.00 s 4878s [2096/5474] TestIntegerComb#test_printf_b_sign = 0.00 s 4878s [2097/5474] TestIntegerComb#test_pow = 0.17 s 4878s [2098/5474] TestIntegerComb#test_not = 0.00 s 4878s [2099/5474] TestIntegerComb#test_printf_b = 0.01 s 4878s [2100/5474] TestIO#test_sysread_with_not_empty_buffer = 0.01 s 4878s [2101/5474] TestIO#test_race_between_read = 0.02 s 4881s [2102/5474] TestIO#test_recycled_fd_close = 2.55 s 4881s [2103/5474] TestIO#test_autoclose_false_closed_by_finalizer = 0.02 s 4881s [2104/5474] TestIO#test_copy_stream_socket1 = 0.01 s 4881s [2105/5474] TestIO#test_frozen_autoclose = 0.00 s 4881s [2106/5474] TestIO#test_readbyte = 0.01 s 4881s [2107/5474] TestIO#test_uninitialized = 0.00 s 4885s [2108/5474] TestIO#test_race_closed_stream = 3.61 s 4888s [2109/5474] TestIO#test_open_fifo_does_not_block_other_threads = 3.41 s 4888s [2110/5474] TestIO#test_write_nonblock_simple_no_exceptions = 0.00 s 4891s [2111/5474] TestIO#test_copy_stream_to_duplex_io = 3.37 s 4891s [2112/5474] TestIO#test_each_char = 0.01 s 4891s [2113/5474] TestIO#test_copy_stream_socket3 = 0.01 s 4891s [2114/5474] TestIO#test_close_read_non_readable = 0.00 s 4894s [2115/5474] TestIO#test_putc = 2.36 s 4894s [2116/5474] TestIO#test_copy_stream_socket5 = 0.02 s 4894s [2117/5474] TestIO#test_gets_rs_nil = 0.00 s 4894s [2118/5474] TestIO#test_copy_stream_io_to_rot13 = 0.00 s 4894s [2119/5474] TestIO#test_seek_symwhence = 0.00 s 4894s [2120/5474] TestIO#test_autoclose = 0.00 s 4894s [2121/5474] TestIO#test_copy_stream_strio_rbuf = 0.00 s 4894s [2122/5474] TestIO#test_gets_rs = 0.00 s 4894s [2123/5474] TestIO#test_copy_stream_append_to_nonempty = 0.00 s 4894s [2124/5474] TestIO#test_copy_stream_megacontent_pipe_to_file = 0.18 s 4894s [2125/5474] TestIO#test_copy_stream_fname_to_strio = 0.00 s 4894s [2126/5474] TestIO#test_copy_stream_small = 0.00 s 4894s [2127/5474] TestIO#test_sysseek = 0.02 s 4894s [2128/5474] TestIO#test_ungetbyte = 0.00 s 4894s [2129/5474] TestIO#test_copy_stream_read_in_binmode = 0.01 s 4894s [2130/5474] TestIO#test_read_unlocktmp_ensure = 0.21 s 4894s [2131/5474] TestIO#test_copy_stream_strio_to_fname = 0.01 s 4894s [2132/5474] TestIO#test_read_with_not_empty_buffer = 0.00 s 4894s [2133/5474] TestIO#test_read_zero_size = 0.00 s 4894s [2134/5474] TestIO#test_readpartial_buffer_error = 0.00 s 4894s [2135/5474] TestIO#test_copy_stream_rbuf = 0.00 s 4897s [2136/5474] TestIO#test_readlines = 2.38 s 4897s [2137/5474] TestIO#test_open_flag = 0.00 s 4897s [2138/5474] TestIO#test_close_write_non_readable = 0.00 s 4897s [2139/5474] TestIO#test_copy_stream_dst_rbuf = 0.00 s 4897s [2140/5474] TestIO#test_read_command = 0.01 s 4897s [2141/5474] TestIO#test_printf = 0.00 s 4897s [2142/5474] TestIO#test_s_binwrite = 0.01 s 4897s [2143/5474] TestIO#test_binmode_after_closed = 0.00 s 4897s [2144/5474] TestIO#test_pread = 0.00 s 4897s [2145/5474] TestIO#test_each_byte2 = 0.01 s 4897s [2146/5474] TestIO#test_s_binread_does_not_leak_with_invalid_offset = 0.00 s 4897s [2147/5474] TestIO#test_single_exception_on_close = 0.02 s 4897s [2148/5474] TestIO#test_write_nonblock = 0.00 s 4897s [2149/5474] TestIO#test_read_nonblock_with_buffer_no_exceptions = 0.00 s 4897s [2150/5474] TestIO#test_copy_stream_strio_flush = 0.00 s 4897s [2151/5474] TestIO#test_pipe_block = 0.00 s 4900s [2152/5474] TestIO#test_close_write = 3.55 s 4900s [2153/5474] TestIO#test_puts_old_write = 0.00 s 4900s [2154/5474] TestIO#test_ungetc = 0.00 s 4900s [2155/5474] TestIO#test_write_non_writable = 0.00 s 4900s [2156/5474] TestIO#test_invalid_advise = 0.03 s 4900s [2157/5474] TestIO#test_copy_stream_bigcontent = 0.00 s 4900s [2158/5474] TestIO#test_sysopen = 0.00 s 4900s [2159/5474] TestIO#test_copy_stream_io_to_strio = 0.00 s 4900s [2160/5474] TestIO#test_sysread_unlocktmp_ensure = 0.10 s 4900s [2161/5474] TestIO#test_close_uninitialized = 0.00 s 4900s [2162/5474] TestIO#test_copy_stream_write_pipe = 0.00 s 4900s [2163/5474] TestIO#test_copy_stream_rot13_to_io = 0.00 s 4900s [2164/5474] TestIO#test_readpartial_pos = 0.00 s 4900s [2165/5474] TestIO#test_rubydev33072 = 0.00 s 4900s [2166/5474] TestIO#test_readchar = 0.01 s 4900s [2167/5474] TestIO#test_copy_stream_bigcontent_mid = 0.00 s 4900s [2168/5474] TestIO#test_each_codepoint = 0.00 s 4900s [2169/5474] TestIO#test_each_byte = 0.00 s 4903s [2170/5474] TestIO#test_readline2 = 2.47 s 4906s [2171/5474] TestIO#test_dup = 3.48 s 4906s [2172/5474] TestIO#test_inspect = 0.00 s 4906s [2173/5474] TestIO#test_write_nonblock_no_exceptions = 0.00 s 4906s [2174/5474] TestIO#test_read = 0.00 s 4906s [2175/5474] TestIO#test_write_with_many_arguments = 0.01 s 4906s [2176/5474] TestIO#test_copy_stream_rot13_to_rot13 = 0.00 s 4906s [2177/5474] TestIO#test_flag = 0.00 s 4906s [2178/5474] TestIO#test_puts_parallel = 0.00 s 4906s [2179/5474] TestIO#test_open_redirect = 0.00 s 4906s [2180/5474] TestIO#test_copy_stream_strio_to_io = 0.00 s 4910s [2181/5474] TestIO#test_close_on_exec = 3.38 s 4910s [2182/5474] TestIO#test_pwrite = 0.00 s 4917s [2183/5474] TestIO#test_foreach = 7.16 s 4917s [2184/5474] TestIO#test_setpos = 0.00 s 4917s [2185/5474] TestIO#test_warn = 0.00 s 4919s [2186/5474] TestIO#test_new_with_block = 2.52 s 4919s [2187/5474] TestIO#test_reopen_mode = 0.00 s 4919s [2188/5474] TestIO#test_advise = 0.06 s 4919s [2189/5474] TestIO#test_copy_stream_pipe_to_file = 0.00 s 4919s [2190/5474] TestIO#test_copy_stream_src_wbuf = 0.00 s 4920s [2191/5474] TestIO#test_readpartial_unlocktmp_ensure = 0.10 s 4920s [2192/5474] TestIO#test_copy_stream_strio_len = 0.00 s 4920s [2193/5474] TestIO#test_write_with_multiple_arguments = 0.00 s 4920s [2194/5474] TestIO#test_each_byte_closed = 0.01 s 4920s [2195/5474] TestIO#test_copy_stream_append = 0.00 s 4920s [2196/5474] TestIO#test_reopen_nonascii(Shift_JIS) = 0.00 s 4920s [2197/5474] TestIO#test_gets_limit_extra_arg = 0.00 s 4922s [2198/5474] TestIO#test_print = 2.52 s 4926s [2199/5474] TestIO#test_reopen_stdio = 3.61 s 4926s [2200/5474] TestIO#test_write_nonblock_error = 0.00 s 4926s [2201/5474] TestIO#test_set_lineno_readline = 0.00 s 4926s [2202/5474] TestIO#test_each_byte_with_seek = 0.00 s 4926s [2203/5474] TestIO#test_sysread = 0.00 s 4926s [2204/5474] TestIO#test_syswrite = 0.00 s 4929s [2205/5474] TestIO#test_write_buffered_with_multiple_arguments = 3.52 s 4929s [2206/5474] TestIO#test_cross_thread_close_fd = 0.00 s 4933s [2207/5474] TestIO#test_reopen_ivar = 3.55 s 4933s [2208/5474] TestIO#test_reopen_opt_encoding = 0.00 s 4933s [2209/5474] TestIO#test_gets_chomp_paragraph = 0.00 s 4933s [2210/5474] TestIO#test_exclusive_mode = 0.00 s 4933s [2211/5474] TestIO#test_copy_stream_file_to_pipe = 0.00 s 4933s [2212/5474] TestIO#test_readpartial_with_not_empty_buffer = 0.00 s 4933s [2213/5474] TestIO#test_copy_stream_closed_pipe = 0.00 s 4933s [2214/5474] TestIO#test_pipe_block_close = 0.00 s 4933s [2215/5474] TestIO#test_try_convert = 0.00 s 4933s [2216/5474] TestIO#test_gets_paragraph = 0.00 s 4933s [2217/5474] TestIO#test_print_separators = 0.00 s 4933s [2218/5474] TestIO#test_pid_after_close_read = 0.00 s 4933s [2219/5474] TestIO#test_initialize = 0.01 s 4933s [2220/5474] TestIO#test_marshal_closed_io = 0.00 s 4933s [2221/5474] TestIO#test_gets_default_rs = 0.00 s 4933s [2222/5474] TestIO#test_s_readlines = 0.00 s 4933s [2223/5474] TestIO#test_frozen_fileno = 0.00 s 4933s [2224/5474] TestIO#test_readpartial_buffer_not_raise_shared_string_error = 0.00 s 4933s [2225/5474] TestIO#test_copy_stream_pipe = 0.00 s 4933s [2226/5474] TestIO#test_read_buffer_not_raise_shared_string_error = 0.01 s 4936s [2227/5474] TestIO#test_close_readorg/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 4936s from org/jruby/RubyIO.java:1479:in `write' 4936s from -e:1:in `
' 4936s = 3.48 s 4936s [2228/5474] TestIO#test_copy_stream_write_in_binmode = 0.00 s 4936s [2229/5474] TestIO#test_set_lineno_gets = 0.00 s 4936s [2230/5474] TestIO#test_close_read_pipe = 0.00 s 4936s [2231/5474] TestIO#test_pipe = 0.00 s 4936s [2232/5474] TestIO#test_write_no_args = 0.00 s 4936s [2233/5474] TestIO#test_gets_chomp_rs_nil = 0.00 s 4936s [2234/5474] TestIO#test_s_read = 0.00 s 4936s [2235/5474] TestIO#test_reopen = 0.00 s 4936s [2236/5474] TestIO#test_gets_rs_377 = 0.00 s 4936s [2237/5474] TestIO#test_read_nonblock_error = 0.00 s 4936s [2238/5474] TestIO#test_copy_stream_strio = 0.00 s 4936s [2239/5474] TestIO#test_seek = 0.00 s 4936s [2240/5474] TestIO#test_reopen_nonascii(EUC-JP) = 0.01 s 4936s [2241/5474] TestIO#test_write_with_multiple_arguments_and_buffer = 0.00 s 4936s [2242/5474] TestIO#test_ungetc2 = 0.00 s 4936s [2243/5474] TestIO#test_gets_chomp_rs = 0.00 s 4936s [2244/5474] TestIO#test_open_mode = 0.00 s 4940s [2245/5474] TestIO#test_open_pipe = 3.41 s 4940s [2246/5474] TestIO#test_copy_stream_noent = 0.00 s 4940s [2247/5474] TestIO#test_exception_at_close = 0.00 s 4943s [2248/5474] TestIO#test_pid = 3.63 s 4943s [2249/5474] TestIO#test_each_char2 = 0.01 s 4943s [2250/5474] TestIO#test_read_nonblock_no_exceptions = 0.00 s 4943s [2251/5474] TestIO#test_external_encoding_index = 0.00 s 4943s [2252/5474] TestIO#test_reopen_encoding = 0.01 s 4943s [2253/5474] TestIO#test_close_twice = 0.00 s 4943s [2254/5474] TestIO#test_puts_recursive_array = 0.00 s 4943s [2255/5474] TestIO#test_copy_stream_strio_to_tempfile = 0.00 s 4943s [2256/5474] TestIO#test_read_buffer_error = 0.00 s 4943s [2257/5474] TestIO#test_read_nonblock_with_not_empty_buffer = 0.00 s 4943s [2258/5474] TestIO#test_gets = 0.00 s 4943s [2259/5474] TestIO#test_copy_stream_socket2 = 0.01 s 4943s [2260/5474] TestIO#test_each_line = 0.01 s 4943s [2261/5474] TestIO#test_reopen_nonascii(UTF-8) = 0.01 s 4944s [2262/5474] TestIO#test_copy_stream_megacontent_file_to_pipe = 0.08 s 4947s [2263/5474] TestIO#test_write_epipe_nosync = 3.75 s 4947s [2264/5474] TestIO#test_readpartial = 0.00 s 4951s [2265/5474] TestIO#test_DATA_binmode = 3.24 s 4953s [2266/5474] TestIO#test_write_with_multiple_nonstring_arguments = 2.40 s 4953s [2267/5474] TestIO#test_pos_with_getc = 0.01 s 4953s [2268/5474] TestIO#test_readpartial_bad_args = 0.00 s 4955s [2269/5474] TestIO#test_display = 2.29 s 4955s [2270/5474] TestIO#test_pos = 0.00 s 4955s [2271/5474] TestIO#test_copy_stream_pathname_to_pathname = 0.00 s 4955s [2272/5474] TestNumeric#test_zero_p = 0.00 s 4955s [2273/5474] TestNumeric#test_quo = 0.00 s 4955s [2274/5474] TestNumeric#test_dummynumeric = 0.01 s 4955s [2275/5474] TestNumeric#test_cmp = 0.00 s 4959s [2276/5474] TestNumeric#test_coerced_remainder = 3.36 s 4959s [2277/5474] TestNumeric#test_floor_ceil_ndigits = 0.00 s 4959s [2278/5474] TestNumeric#test_eql = 0.00 s 4959s [2279/5474] TestNumeric#test_positive_p = 0.00 s 4959s [2280/5474] TestNumeric#test_singleton_method = 0.00 s 4959s [2281/5474] TestNumeric#test_nonzero_p = 0.00 s 4959s [2282/5474] TestNumeric#test_dup = 0.00 s 4959s [2283/5474] TestNumeric#test_coerce = 0.01 s 4959s [2284/5474] TestNumeric#test_step_bug15537 = 0.01 s 4959s [2285/5474] TestNumeric#test_comparison_comparable = 0.00 s 4959s [2286/5474] TestNumeric#test_integer_p = 0.00 s 4959s [2287/5474] TestNumeric#test_quo_ruby_core_41575 = 0.00 s 4959s [2288/5474] TestNumeric#test_abs = 0.00 s 4959s [2289/5474] TestNumeric#test_divmod = 0.00 s 4959s [2290/5474] TestNumeric#test_num2long = 0.00 s 4959s [2291/5474] TestNumeric#test_float_round_ndigits = 0.00 s 4959s [2292/5474] TestNumeric#test_real_p = 0.00 s 4959s [2293/5474] TestNumeric#test_negative_p = 0.00 s 4959s [2294/5474] TestNumeric#test_floor_ceil_round_truncate = 0.00 s 4959s [2295/5474] TestNumeric#test_to_int = 0.00 s 4959s [2296/5474] TestNumeric#test_remainder_infinity = 0.00 s 4959s [2297/5474] TestNumeric#test_clone = 0.00 s 4959s [2298/5474] TestNumeric#test_pow = 0.01 s 4959s [2299/5474] TestEnumerator#test_size_for_loops = 0.00 s 4959s [2300/5474] TestEnumerator#test_with_index_string_offset = 0.01 s 4959s [2301/5474] TestEnumerator#test_size_for_enum_created_from_env = 0.00 s 4962s [2302/5474] TestEnumerator#test_with_index_dangling_memo = 3.37 s 4962s [2303/5474] TestEnumerator#test_size_for_downup_to = 0.00 s 4962s [2304/5474] TestEnumerator#test_rewind_clear_feed = 0.01 s 4962s [2305/5474] TestEnumerator#test_lazy_chain = 0.03 s 4962s [2306/5474] TestEnumerator#test_chain_undef_methods = 0.00 s 4962s [2307/5474] TestEnumerator#test_nested_iteration = 0.00 s 4962s [2308/5474] TestEnumerator#test_peek_values_modify = 0.00 s 4962s [2309/5474] TestEnumerator#test_gc = 0.00 s 4962s [2310/5474] TestEnumerator#test_size_for_enum_created_from_enumerable = 0.01 s 4962s [2311/5474] TestEnumerator#test_uniq = 0.00 s 4962s [2312/5474] TestEnumerator#test_peek_values = 0.01 s 4962s [2313/5474] TestEnumerator#test_size_for_enum_created_from_hash = 0.00 s 4962s [2314/5474] TestEnumerator#test_peek_for_enumerator_objects = 0.00 s 4962s [2315/5474] TestEnumerator#test_size_for_array_combinatorics = 0.01 s 4962s [2316/5474] TestEnumerator#test_generator_args = 0.00 s 4962s [2317/5474] TestEnumerator#test_with_object = 0.00 s 4962s [2318/5474] TestEnumerator#test_stop_result = 0.00 s 4962s [2319/5474] TestEnumerator#test_with_index = 0.00 s 4962s [2320/5474] TestEnumerator#test_size_for_each_slice = 0.00 s 4962s [2321/5474] TestEnumerator#test_peek = 0.00 s 4962s [2322/5474] TestEnumerator#test_chained_enums = 0.01 s 4962s [2323/5474] TestEnumerator#test_next_after_stopiteration = 0.01 s 4962s [2324/5474] TestEnumerator#test_loop = 0.01 s 4962s [2325/5474] TestEnumerator#test_next = 0.00 s 4962s [2326/5474] TestEnumerator#test_cons = 0.00 s 4962s [2327/5474] TestEnumerator#test_size_for_enum_created_from_struct = 0.00 s 4962s [2328/5474] TestEnumerator#test_iterators = 0.00 s 4962s [2329/5474] TestEnumerator#test_size_for_enum_created_by_enumerators = 0.00 s 4962s [2330/5474] TestEnumerator#test_feed = 0.00 s 4962s [2331/5474] TestEnumerator#test_produce = 0.01 s 4962s [2332/5474] TestEnumerator#test_slice = 0.00 s 4962s [2333/5474] TestEnumerator#test_compact = 0.00 s 4962s [2334/5474] TestEnumerator#test_size_for_string = 0.00 s 4962s [2335/5474] TestEnumerator#test_enum_chain_and_plus = 0.00 s 4962s [2336/5474] TestEnumerator#test_inspect_verbose = 0.00 s 4962s [2337/5474] TestEnumerator#test_size_for_cycle = 0.00 s 4962s [2338/5474] TestEnumerator#test_feed_mixed = 0.00 s 4962s [2339/5474] TestEnumerator#test_each_slice_size = 0.00 s 4962s [2340/5474] TestEnumerator#test_feed_yielder = 0.00 s 4962s [2341/5474] TestEnumerator#test_feed_twice = 0.00 s 4962s [2342/5474] TestEnumerator#test_size_for_each_cons = 0.00 s 4962s [2343/5474] TestEnumerator#test_with_index_nonnum_offset = 0.00 s 4962s [2344/5474] TestEnumerator#test_next_values = 0.00 s 4962s [2345/5474] TestEnumerator#test_size_for_step = 0.00 s 4962s [2346/5474] TestEnumerator#test_size = 0.00 s 4962s [2347/5474] TestEnumerator#test_feed_before_first_next = 0.00 s 4962s [2348/5474] TestEnumerator#test_yielder = 0.00 s 4962s [2349/5474] TestEnumerator#test_chain_with_index = 0.00 s 4962s [2350/5474] TestEnumerator#test_next_rewind = 0.01 s 4962s [2351/5474] TestEnumerator#test_loop_return_value = 0.01 s 4962s [2352/5474] TestEnumerator#test_size_for_enum_created_from_array = 0.00 s 4962s [2353/5474] TestEnumerator#test_chain_each_lambda = 0.00 s 4965s [2354/5474] TestRequire#test_load_scope = 2.29 s 4968s [2355/5474] TestRequire#test_require_in_wrapped_load = 3.52 s 4972s [2356/5474] TestRequire#test_load_wrap_nil = 3.46 s 4972s [2357/5474] TestRequire#test_load_error_path = 0.00 s 4975s [2358/5474] TestRequire#test_relative_symlink_realpath = 3.70 s 4975s [2359/5474] TestRequire#test_require_syntax_error = 0.01 s 4975s [2360/5474] TestRequire#test_loaded_features_encoding = 0.00 s 4975s [2361/5474] TestRequire#test_load_syntax_error = 0.01 s 4975s [2362/5474] TestRequire#test_relative = 0.02 s 4978s [2363/5474] TestRequire#test_require_to_str_redefined_in_load_path = 2.66 s 4980s [2364/5474] TestRequire#test_require_to_path_redefined_in_load_path = 2.25 s 4983s [2365/5474] TestRequire#test_symlink_load_path = 3.20 s 4987s [2366/5474] TestRequire#test_define_module_under = 3.46 s 4989s [2367/5474] TestRequire#test_require_local_var_on_toplevel = 2.55 s 4989s [2368/5474] TestRequire#test_require_nonascii_path_utf8 = 0.00 s 4993s [2369/5474] TestRequire#test_require_invalid_shared_object = 3.43 s 4997s [2370/5474] TestRequire#test_define_module = 3.72 s 5000s [2371/5474] TestRequire#test_relative_symlink = 3.38 s 5002s [2372/5474] TestRequire#test_require_twice = 2.25 s 5005s [2373/5474] TestRequire#test_require_changed_current_dir = 2.29 s 5007s [2374/5474] TestRequire#test_require_with_array_shift = 2.37 s 5007s [2375/5474] TestRequire#test_load_into_module = 0.00 s 5010s [2376/5474] TestRequire#test_throw_while_loading = 3.45 s 5010s [2377/5474] TestRequire#test_require_syntax_error_rescued = 0.01 s 5014s [2378/5474] TestRequire#test_default_loaded_features_encoding = 3.56 s 5017s [2379/5474] TestRequire#test_require_with_array_pop = 2.27 s 5017s [2380/5474] TestRequire#test_resolve_feature_path_with_missing_feature = 0.00 s 5027s [2381/5474] TestRequire#test_define_class_under = 10.66 s 5029s [2382/5474] TestRequire#test_require_not_modified_load_path = 2.33 s 5032s [2383/5474] TestRequire#test_load = 2.34 s 5034s [2384/5474] TestGc#test_gc_stress_at_startup = 2.26 s 5034s [2385/5474] TestGc#test_profiler_enabled = 0.10 s 5034s [2386/5474] TestGc#test_gc = 0.14 s 5035s [2387/5474] TestGc#test_ast_node_buffer = 0.52 s 5038s [2388/5474] TestGc#test_gc_stress_on_realloc = 3.37 s 5038s [2389/5474] TestGc#test_profiler_clear = 0.00 s 5040s [2390/5474] TestGc#test_singleton_method = 2.25 s 5040s [2391/5474] TestGc#test_stat_single = 0.04 s 5047s [2392/5474] TestGc#test_sweep_in_finalizer = 6.86 s 5047s [2393/5474] TestGc#test_object_ids_never_repeat = 0.02 s 5047s [2394/5474] TestGc#test_stat_argument = 0.01 s 5051s [2395/5474] TestGc#test_exception_in_finalizer = 4.30 s 5054s [2396/5474] TestGc#test_stress_compile_send = 2.46 s 5054s [2397/5474] TestGc#test_enable_disable = 0.00 s 5056s [2398/5474] TestGc#test_finalizing_main_thread = 2.48 s 5060s [2399/5474] TestGc#test_vm_object = 3.49 s 5062s [2400/5474] TestGc#test_finalizer_passed_object_id = 2.33 s 5063s [2401/5474] TestGc#test_profiler_total_time = 0.01 s 5064s [2402/5474] TestGc#test_singleton_method_added = 2.30 s 5067s [2403/5474] TestBeginEndBlock#test_nested_at_exit = 2.36 s 5069s [2404/5474] TestBeginEndBlock#test_exitcode_in_at_exit = 2.25 s 5072s [2405/5474] TestBeginEndBlock#test_endblock_raise = 2.34 s 5074s [2406/5474] TestBeginEndBlock#test_endblockwarn = 2.37 s 5076s [2407/5474] TestBeginEndBlock#test_errinfo_at_exit = 2.41 s 5080s [2408/5474] TestBeginEndBlock#test_propagate_exit_code = 3.35 s 5082s [2409/5474] TestBeginEndBlock#test_endblockwarn_in_eval = 2.15 s 5089s [2410/5474] TestBeginEndBlock#test_rescue_at_exit = 6.86 s 5089s [2411/5474] TestEnv#test_ivar_in_env_should_not_be_access_from_non_main_ractors = 0.00 s 5089s [2412/5474] TestEnv#test_reject_bang_in_ractor = 0.01 s 5089s [2413/5474] TestEnv#test_each_value_in_ractor = 0.00 s 5089s [2414/5474] TestEnv#test_rehash_in_ractor = 0.00 s 5089s [2415/5474] TestEnv#test_filter_bang_in_ractor = 0.00 s 5089s [2416/5474] TestEnv#test_frozen_env = 0.00 s 5089s [2417/5474] TestEnv#test_each_key_in_ractor = 0.00 s 5089s [2418/5474] TestEnv#test_values_in_ractor = 0.00 s 5089s [2419/5474] TestEnv#test_shift_in_ractor = 0.00 s 5089s [2420/5474] TestEnv#test_update = 0.01 s 5089s [2421/5474] TestEnv#test_slice_in_ractor = 0.00 s 5089s [2422/5474] TestEnv#test_each_pair = 0.00 s 5089s [2423/5474] TestEnv#test_dup_in_ractor = 0.00 s 5089s [2424/5474] TestEnv#test_shared_substring = 0.00 s 5089s [2425/5474] TestEnv#test_to_h_in_ractor = 0.00 s 5089s [2426/5474] TestEnv#test_huge_value = 0.00 s 5089s [2427/5474] TestEnv#test_select_bang_in_ractor = 0.00 s 5089s [2428/5474] TestEnv#test_reject_bang = 0.01 s 5089s [2429/5474] TestEnv#test_delete_if = 0.00 s 5089s [2430/5474] TestEnv#test_key_in_ractor = 0.00 s 5089s [2431/5474] TestEnv#test_inspect_in_ractor = 0.00 s 5089s [2432/5474] TestEnv#test_clear = 0.00 s 5089s [2433/5474] TestEnv#test_except = 0.00 s 5089s [2434/5474] TestEnv#test_frozen_env_in_ractor = 0.00 s 5089s [2435/5474] TestEnv#test_getenv_in_ractor = 0.00 s 5089s [2436/5474] TestEnv#test_shared_substring_in_ractor = 0.00 s 5089s [2437/5474] TestEnv#test_dup = 0.00 s 5089s [2438/5474] TestEnv#test_values_at = 0.00 s 5089s [2439/5474] TestEnv#test_clear_in_ractor = 0.00 s 5089s [2440/5474] TestEnv#test_inspect = 0.00 s 5089s [2441/5474] TestEnv#test_each_value = 0.00 s 5089s [2442/5474] TestEnv#test_select_bang = 0.00 s 5089s [2443/5474] TestEnv#test_keys_in_ractor = 0.00 s 5089s [2444/5474] TestEnv#test_huge_value_in_ractor = 0.00 s 5089s [2445/5474] TestEnv#test_empty_p = 0.00 s 5089s [2446/5474] TestEnv#test_to_h = 0.00 s 5089s [2447/5474] TestEnv#test_assoc_in_ractor = 0.00 s 5089s [2448/5474] TestEnv#test_key = 0.00 s 5089s [2449/5474] TestEnv#test_invert = 0.00 s 5089s [2450/5474] TestEnv#test_bracket = 0.00 s 5089s [2451/5474] TestEnv#test_clone_in_ractor = 0.00 s 5089s [2452/5474] TestEnv#test_bracket_in_ractor = 0.00 s 5089s [2453/5474] TestEnv#test_to_a = 0.00 s 5089s [2454/5474] TestEnv#test_each_key = 0.00 s 5089s [2455/5474] TestEnv#test_select_in_ractor = 0.00 s 5089s [2456/5474] TestEnv#test_filter_bang = 0.00 s 5089s [2457/5474] TestEnv#test_update_in_ractor = 0.00 s 5089s [2458/5474] TestEnv#test_to_hash = 0.00 s 5089s [2459/5474] TestEnv#test_each_pair_in_ractor = 0.00 s 5089s [2460/5474] TestEnv#test_frozen = 0.01 s 5089s [2461/5474] TestEnv#test_frozen_in_ractor = 0.00 s 5089s [2462/5474] TestEnv#test_size_in_ractor = 0.00 s 5089s [2463/5474] TestEnv#test_has_value = 0.00 s 5089s [2464/5474] TestEnv#test_values_at_in_ractor = 0.00 s 5089s [2465/5474] TestEnv#test_keep_if = 0.00 s 5089s [2466/5474] TestEnv#test_except_in_ractor = 0.00 s 5089s [2467/5474] TestEnv#test_delete_if_in_ractor = 0.00 s 5089s [2468/5474] TestEnv#test_replace = 0.00 s 5089s [2469/5474] TestEnv#test_delete_in_ractor = 0.00 s 5089s [2470/5474] TestEnv#test_has_value2 = 0.00 s 5089s [2471/5474] TestEnv#test_has_value_in_ractor = 0.00 s 5089s [2472/5474] TestEnv#test_to_s = 0.00 s 5089s [2473/5474] TestEnv#test_has_key_in_ractor = 0.00 s 5089s [2474/5474] TestEnv#test_empty_p_in_ractor = 0.00 s 5089s [2475/5474] TestEnv#test_slice = 0.00 s 5089s [2476/5474] TestEnv#test_keys = 0.00 s 5089s [2477/5474] TestEnv#test_to_hash_in_ractor = 0.00 s 5089s [2478/5474] TestEnv#test_has_value2_in_ractor = 0.00 s 5089s [2479/5474] TestEnv#test_rassoc_in_ractor = 0.00 s 5089s [2480/5474] TestEnv#test_invert_in_ractor = 0.00 s 5089s [2481/5474] TestEnv#test_aset_in_ractor = 0.00 s 5089s [2482/5474] TestEnv#test_to_a_in_ractor = 0.00 s 5089s [2483/5474] TestEnv#test_fetch_in_ractor = 0.00 s 5089s [2484/5474] TestEnv#test_shift = 0.00 s 5089s [2485/5474] TestEnv#test_keep_if_in_ractor = 0.00 s 5089s [2486/5474] TestEnv#test_filter = 0.00 s 5089s [2487/5474] TestEnv#test_reject_in_ractor = 0.00 s 5089s [2488/5474] TestEnv#test_values = 0.00 s 5089s [2489/5474] TestEnv#test_replace_in_ractor = 0.00 s 5089s [2490/5474] TestEnv#test_to_s_in_ractor = 0.00 s 5089s [2491/5474] TestEnv#test_filter_in_ractor = 0.00 s 5089s [2492/5474] TestEnv#test_size = 0.00 s 5089s [2493/5474] TestEnv#test_rassoc = 0.00 s 5089s [2494/5474] TestEnv#test_reject = 0.00 s 5089s [2495/5474] TestEnv#test_clone = 0.00 s 5089s [2496/5474] TestEnv#test_select = 0.00 s 5089s [2497/5474] TestMethod#test_define_method_transplating = 0.00 s 5089s [2498/5474] TestMethod#test_unbound_method_visibility_predicates = 0.00 s 5089s [2499/5474] TestMethod#test_method_visibility_predicates = 0.00 s 5089s [2500/5474] TestMethod#test_super_in_proc_from_define_method = 0.00 s 5089s [2501/5474] TestMethod#test_default_accessibility = 0.00 s 5089s [2502/5474] TestMethod#test_compose_with_noncallable = 0.00 s 5089s [2503/5474] TestMethod#test_define_singleton_method_no_proc = 0.00 s 5089s [2504/5474] TestMethod#test_define_method = 0.00 s 5089s [2505/5474] TestMethod#test_define_singleton_method_with_extended_method = 0.00 s 5089s [2506/5474] TestMethod#test_compose_with_callable = 0.00 s 5089s [2507/5474] TestMethod#test_module_methods_redefiniton = 0.00 s 5089s [2508/5474] TestMethod#test_define_method_no_proc = 0.00 s 5089s [2509/5474] TestMethod#test_method_in_method_visibility_should_be_public = 0.00 s 5089s [2510/5474] TestMethod#test_alias = 0.00 s 5089s [2511/5474] TestMethod#test_singleton_method = 0.00 s 5089s [2512/5474] TestMethod#test_instance_method = 0.00 s 5089s [2513/5474] TestMethod#test_hidden_parameters = 0.00 s 5089s [2514/5474] TestMethod#test_super_method_module = 0.00 s 5089s [2515/5474] TestMethod#test_inspect = 0.00 s 5089s [2516/5474] TestMethod#test_orphan_callee = 0.00 s 5089s [2517/5474] TestMethod#test_curry_from_proc_var_args = 0.00 s 5092s [2518/5474] TestMethod#test_zsuper = 3.61 s 5092s [2519/5474] TestMethod#test_eq = 0.00 s 5092s [2520/5474] TestMethod#test_compose_with_method = 0.00 s 5092s [2521/5474] TestMethod#test_singleton_method_prepend = 0.00 s 5096s [2522/5474] TestMethod#test_invalidating_CC_ASAN = 3.23 s 5096s [2523/5474] TestMethod#test_super_method_with_prepended_module = 0.00 s 5096s [2524/5474] TestMethod#test_unbound_method_proc_coerce = 0.00 s 5099s [2525/5474] TestMethod#test_override_optimized_method_on_class_using_prepend = 3.43 s 5099s [2526/5474] TestMethod#test_super_method_after_bind = 0.00 s 5099s [2527/5474] TestMethod#test_respond_to_missing_argument = 0.00 s 5099s [2528/5474] TestMethod#test_super_method_unbound = 0.00 s 5099s [2529/5474] TestMethod#test_unbind = 0.00 s 5099s [2530/5474] TestMethod#test_method_in_block_in_define_method_block = 0.00 s 5099s [2531/5474] TestMethod#test_eqq = 0.00 s 5099s [2532/5474] TestMethod#test_define_singleton_method = 0.00 s 5099s [2533/5474] TestMethod#test_bind_module_instance_method = 0.00 s 5099s [2534/5474] TestMethod#test_public_methods_with_extended = 0.00 s 5099s [2535/5474] TestMethod#test_singleton_define_method_in_private_scope = 0.00 s 5099s [2536/5474] TestMethod#test_curry_method = 0.00 s 5099s [2537/5474] TestMethod#test_caller_negative_level = 0.00 s 5099s [2538/5474] TestMethod#test_super_method_removed = 0.00 s 5099s [2539/5474] TestMethod#test_attrset_ivar = 0.00 s 5099s [2540/5474] TestMethod#test_curry_var_args = 0.00 s 5099s [2541/5474] TestMethod#test_method_in_define_method_block = 0.00 s 5103s [2542/5474] TestMethod#test_define_method_with_symbol = 3.44 s 5103s [2543/5474] TestMethod#test_included = 0.00 s 5103s [2544/5474] TestMethod#test_super_method_module_alias = 0.00 s 5103s [2545/5474] TestMethod#test_define_method_invalid_arg = 0.00 s 5106s [2546/5474] TestMethod#test_bound_method_entry = 3.63 s 5106s [2547/5474] TestMethod#test_arity = 0.00 s 5106s [2548/5474] TestMethod#test_receiver_name_owner = 0.00 s 5106s [2549/5474] TestMethod#test_curry_from_proc = 0.00 s 5106s [2550/5474] TestMethod#test_owner_missing = 0.00 s 5106s [2551/5474] TestMethod#test_compose_with_proc = 0.00 s 5106s [2552/5474] TestMethod#test_super_method_bind_unbind_clone = 0.00 s 5106s [2553/5474] TestMethod#test_define_method_in_private_scope = 0.00 s 5106s [2554/5474] TestMethod#test_super_method = 0.00 s 5108s [2555/5474] TestMethod#test_caller_top_level = 2.28 s 5111s [2556/5474] TestMethod#test_callee_top_level = 2.32 s 5111s [2557/5474] TestMethod#test_public_method_with_zsuper_method = 0.00 s 5111s [2558/5474] TestMethod#test_super_method_alias = 0.00 s 5111s [2559/5474] TestMethod#test_new = 0.00 s 5111s [2560/5474] TestMethod#test_umethod_bind_call = 0.00 s 5111s [2561/5474] TestMethod#test_arity_special = 0.00 s 5111s [2562/5474] TestMethod#test_owner = 0.00 s 5111s [2563/5474] TestMethod#test_prepended = 0.00 s 5111s [2564/5474] TestMethod#test_clone = 0.00 s 5111s [2565/5474] TestPipe#test_eof_3 = 0.00 s 5111s [2566/5474] TestPipe#test_eof_2 = 0.00 s 5114s [2567/5474] TestPipe#test_stdout_epipe = 3.62 s 5114s [2568/5474] TestPipe#test_eof_0_rw = 0.00 s 5114s [2569/5474] TestFiber#test_prohibit_resume_to_transferring_fiber = 0.00 s 5118s [2570/5474] TestFiber#test_new_symbol_proc = 3.27 s 5118s [2571/5474] TestFiber#test_argument = 0.00 s 5118s [2572/5474] TestFiber#test_exit_in_fiber = 0.00 s 5118s [2573/5474] TestFiber#test_term = 0.00 s 5118s [2574/5474] TestFiber#test_throw = 0.00 s 5118s [2575/5474] TestFiber#test_create_fiber_in_new_thread = 0.00 s 5121s [2576/5474] TestFiber#test_mark_fiber = 3.14 s 5121s [2577/5474] TestFiber#test_tls = 0.00 s 5121s [2578/5474] TestFiber#test_separate_lastline = 0.00 s 5121s [2579/5474] TestFiber#test_fork_from_fiber = 0.00 s 5129s [2580/5474] TestFiber#test_machine_stack_gc = 8.25 s 5129s [2581/5474] TestFiber#test_raise_transferring_fiber = 0.00 s 5129s [2582/5474] TestFiber#test_normal = 0.00 s 5129s [2583/5474] TestFiber#test_raise = 0.00 s 5129s [2584/5474] TestFiber#test_transfer = 0.00 s 5129s [2585/5474] TestFiber#test_alive = 0.00 s 5129s [2586/5474] TestFiber#test_return = 0.00 s 5129s [2587/5474] TestFiber#test_resume_self = 0.00 s 5129s [2588/5474] TestMarshal::TestMarshalFreeze#test_object_subclass = 0.00 s 5129s [2589/5474] TestMarshal::TestMarshalFreeze#test_range_cyclic = 0.00 s 5129s [2590/5474] TestMarshal::TestMarshalFreeze#test_anonymous = 0.00 s 5129s [2591/5474] TestMarshal::TestMarshalFreeze#test_string_subclass = 0.00 s 5129s [2592/5474] TestMarshal::TestMarshalFreeze#test_time = 0.01 s 5129s [2593/5474] TestMarshal::TestMarshalFreeze#test_proc_returned_object_are_not_frozen = 0.00 s 5129s [2594/5474] TestMarshal::TestMarshalFreeze#test_struct_subclass_extend = 0.00 s 5129s [2595/5474] TestMarshal::TestMarshalFreeze#test_share = 0.00 s 5129s [2596/5474] TestMarshal::TestMarshalFreeze#test_time_ivar = 0.00 s 5129s [2597/5474] TestMarshal::TestMarshalFreeze#test_time_subclass = 0.00 s 5129s [2598/5474] TestMarshal::TestMarshalFreeze#test_nil = 0.00 s 5129s [2599/5474] TestMarshal::TestMarshalFreeze#test_false = 0.00 s 5129s [2600/5474] TestMarshal::TestMarshalFreeze#test_exception = 0.01 s 5129s [2601/5474] TestMarshal::TestMarshalFreeze#test_modules_and_classes_are_not_frozen = 0.00 s 5129s [2602/5474] TestMarshal::TestMarshalFreeze#test_float = 0.00 s 5129s [2603/5474] TestMarshal::TestMarshalFreeze#test_bignum = 0.00 s 5129s [2604/5474] TestMarshal::TestMarshalFreeze#test_symbol = 0.01 s 5129s [2605/5474] TestMarshal::TestMarshalFreeze#test_regexp = 0.00 s 5129s [2606/5474] TestMarshal::TestMarshalFreeze#test_fixnum = 0.00 s 5129s [2607/5474] TestMarshal::TestMarshalFreeze#test_object = 0.00 s 5129s [2608/5474] TestMarshal::TestMarshalFreeze#test_hash = 0.00 s 5129s [2609/5474] TestMarshal::TestMarshalFreeze#test_string = 0.00 s 5129s [2610/5474] TestMarshal::TestMarshalFreeze#test_extend = 0.00 s 5129s [2611/5474] TestMarshal::TestMarshalFreeze#test_array_subclass = 0.00 s 5129s [2612/5474] TestMarshal::TestMarshalFreeze#test_struct = 0.00 s 5129s [2613/5474] TestMarshal::TestMarshalFreeze#test_exception_subclass = 0.00 s 5129s [2614/5474] TestMarshal::TestMarshalFreeze#test_hash_extend = 0.00 s 5129s [2615/5474] TestMarshal::TestMarshalFreeze#test_array = 0.00 s 5129s [2616/5474] TestMarshal::TestMarshalFreeze#test_true = 0.00 s 5129s [2617/5474] TestMarshal::TestMarshalFreeze#test_object_subclass_extend = 0.00 s 5129s [2618/5474] TestMarshal::TestMarshalFreeze#test_struct_subclass = 0.00 s 5129s [2619/5474] TestMarshal::TestMarshalFreeze#test_string_crlf = 0.00 s 5129s [2620/5474] TestMarshal::TestMarshalFreeze#test_struct_ivar = 0.00 s 5129s [2621/5474] TestMarshal::TestMarshalFreeze#test_return_objects_are_frozen = 0.00 s 5129s [2622/5474] TestMarshal::TestMarshalFreeze#test_float_inf_nan = 0.00 s 5129s [2623/5474] TestMarshal::TestMarshalFreeze#test_hash_subclass = 0.00 s 5129s [2624/5474] TestMarshal::TestMarshalFreeze#test_string_subclass_cycle = 0.00 s 5129s [2625/5474] TestMarshal::TestMarshalFreeze#test_struct_toplevel = 0.00 s 5129s [2626/5474] TestMarshal::TestMarshalFreeze#test_array_ivar = 0.00 s 5129s [2627/5474] TestMarshal::TestMarshalFreeze#test_string_subclass_extend = 0.00 s 5129s [2628/5474] TestMarshal::TestMarshalFreeze#test_range_subclass = 0.00 s 5129s [2629/5474] TestMarshal::TestMarshalFreeze#test_string_escape = 0.00 s 5129s [2630/5474] TestMarshal::TestMarshalFreeze#test_range = 0.00 s 5129s [2631/5474] TestMarshal::TestMarshalFreeze#test_hash_default = 0.00 s 5129s [2632/5474] TestMarshal::TestMarshalFreeze#test_time_in_array = 0.00 s 5129s [2633/5474] TestMarshal::TestMarshalFreeze#test_hash_ivar = 0.00 s 5129s [2634/5474] TestMarshal::TestMarshalFreeze#test_object_extend = 0.00 s 5129s [2635/5474] TestMarshal::TestMarshalFreeze#test_extend_string = 0.00 s 5129s [2636/5474] TestMarshal::TestMarshalFreeze#test_string_empty = 0.00 s 5129s [2637/5474] TestMarshal::TestMarshalFreeze#test_regexp_subclass = 0.00 s 5129s [2638/5474] TestMarshal::TestMarshalFreeze#test_hash_default_proc = 0.00 s 5129s [2639/5474] TestArraySubclass#test_shared_array_reject! = 0.00 s 5129s [2640/5474] TestArraySubclass#test_aset_error = 0.01 s 5129s [2641/5474] TestArraySubclass#test_cycle = 0.00 s 5129s [2642/5474] TestArraySubclass#test_at = 0.01 s 5129s [2643/5474] TestArraySubclass#test_reverse = 0.01 s 5129s [2644/5474] TestArraySubclass#test_VERY_EQUAL = 0.00 s 5129s [2645/5474] TestArraySubclass#test_times = 0.01 s 5129s [2646/5474] TestArraySubclass#test_sort_bang_with_freeze = 0.01 s 5129s [2647/5474] TestArraySubclass#test_prepend = 0.00 s 5129s [2648/5474] TestArraySubclass#test_first2 = 0.01 s 5129s [2649/5474] TestArraySubclass#test_eql? = 0.00 s 5129s [2650/5474] TestArraySubclass#test_join_recheck_array_length = 0.00 s 5129s [2651/5474] TestArraySubclass#test_pop = 0.00 s 5129s [2652/5474] TestArraySubclass#test_values_at2 = 0.00 s 5129s [2653/5474] TestArraySubclass#test_zip = 0.01 s 5129s [2654/5474] TestArraySubclass#test_unshift_error = 0.00 s 5129s [2655/5474] TestArraySubclass#test_bsearch_index_typechecks_return_values = 0.00 s 5129s [2656/5474] TestArraySubclass#test_zip_bug = 0.00 s 5129s [2657/5474] TestArraySubclass#test_fill2 = 0.00 s 5129s [2658/5474] TestArraySubclass#test_flatten! = 0.00 s 5129s [2659/5474] TestArraySubclass#test_slice_out_of_range = 0.01 s 5129s [2660/5474] TestArraySubclass#test_slice! = 0.01 s 5129s [2661/5474] TestArraySubclass#test_flatten_respond_to_missing = 0.00 s 5129s [2662/5474] TestArraySubclass#test_PLUS = 0.00 s 5129s [2663/5474] TestArraySubclass#test_drop_while = 0.00 s 5129s [2664/5474] TestArraySubclass#test_ary_new = 0.00 s 5129s [2665/5474] TestArraySubclass#test_unshift_frozen = 0.00 s 5129s [2666/5474] TestArraySubclass#test_intersect_big_array = 0.00 s 5129s [2667/5474] TestArraySubclass#test_bsearch_index_in_find_any_mode = 0.00 s 5129s [2668/5474] TestArraySubclass#test_sort_by! = 0.00 s 5129s [2669/5474] TestArraySubclass#test_find_all_0 = 0.00 s 5129s [2670/5474] TestArraySubclass#test_uniq_bang_with_block = 0.00 s 5129s [2671/5474] TestArraySubclass#test_take_while = 0.00 s 5129s [2672/5474] TestArraySubclass#test_flatten_error = 0.00 s 5130s [2673/5474] TestArraySubclass#test_MUL = 0.24 s 5130s [2674/5474] TestArraySubclass#test_repeated_permutation = 0.02 s 5130s [2675/5474] TestArraySubclass#test_uniq = 0.01 s 5130s [2676/5474] TestArraySubclass#test_empty? = 0.00 s 5133s [2677/5474] TestArraySubclass#test_repeated_combination_stack_error = 3.74 s 5133s [2678/5474] TestArraySubclass#test_dig = 0.00 s 5133s [2679/5474] TestArraySubclass#test_each_index = 0.00 s 5133s [2680/5474] TestArraySubclass#test_hash = 0.00 s 5133s [2681/5474] TestArraySubclass#test_select! = 0.01 s 5133s [2682/5474] TestArraySubclass#test_flattern_singleton_class! = 0.00 s 5133s [2683/5474] TestArraySubclass#test_append = 0.00 s 5133s [2684/5474] TestArraySubclass#test_iseq_shared_array_reject! = 0.00 s 5133s [2685/5474] TestArraySubclass#test_intersection_big_array = 0.00 s 5133s [2686/5474] TestArraySubclass#test_delete_if = 0.00 s 5133s [2687/5474] TestArraySubclass#test_to_h_block = 0.01 s 5133s [2688/5474] TestArraySubclass#test_uniq_0 = 0.00 s 5133s [2689/5474] TestArraySubclass#test_OR_in_order = 0.00 s 5133s [2690/5474] TestArraySubclass#test_shift_shared_ary = 0.00 s 5133s [2691/5474] TestArraySubclass#test_rotate = 0.01 s 5133s [2692/5474] TestArraySubclass#test_shift2 = 0.00 s 5133s [2693/5474] TestArraySubclass#test_assoc = 0.00 s 5133s [2694/5474] TestArraySubclass#test_01_square_brackets = 0.00 s 5134s [2695/5474] TestArraySubclass#test_ASET = 0.02 s 5134s [2696/5474] TestArraySubclass#test_00_new = 0.00 s 5134s [2697/5474] TestArraySubclass#test_drop = 0.00 s 5134s [2698/5474] TestArraySubclass#test_sort_0 = 0.00 s 5134s [2699/5474] TestArraySubclass#test_clear = 0.01 s 5134s [2700/5474] TestArraySubclass#test_shuffle_random = 0.04 s 5134s [2701/5474] TestArraySubclass#test_array_subclass = 0.00 s 5134s [2702/5474] TestArraySubclass#test_uniq! = 0.01 s 5134s [2703/5474] TestArraySubclass#test_replace_shared_ary = 0.00 s 5134s [2704/5474] TestArraySubclass#test_first = 0.00 s 5134s [2705/5474] TestArraySubclass#test_minmax = 0.01 s 5134s [2706/5474] TestArraySubclass#test_join2 = 0.00 s 5134s [2707/5474] TestArraySubclass#test_product2 = 0.00 s 5134s [2708/5474] TestArraySubclass#test_product = 0.01 s 5134s [2709/5474] TestArraySubclass#test_dup = 0.00 s 5134s [2710/5474] TestArraySubclass#test_min = 0.01 s 5134s [2711/5474] TestArraySubclass#test_values_at = 0.00 s 5139s [2712/5474] TestArraySubclass#test_permutation_stack_error = 5.31 s 5139s [2713/5474] TestArraySubclass#test_intersection = 0.00 s 5139s [2714/5474] TestArraySubclass#test_big_array_literal_with_kwsplat = 0.01 s 5139s [2715/5474] TestArraySubclass#test_intersect? = 0.00 s 5139s [2716/5474] TestArraySubclass#test_reverse_each2 = 0.00 s 5139s [2717/5474] TestArraySubclass#test_bsearch_typechecks_return_values = 0.00 s 5139s [2718/5474] TestArraySubclass#test_flatten_splat = 0.00 s 5139s [2719/5474] TestArraySubclass#test_sort! = 0.00 s 5144s [2720/5474] TestArraySubclass#test_count = 4.82 s 5144s [2721/5474] TestArraySubclass#test_clear2 = 0.00 s 5144s [2722/5474] TestArraySubclass#test_array_andor_0 = 0.00 s 5144s [2723/5474] TestArraySubclass#test_repeated_combination = 0.01 s 5144s [2724/5474] TestArraySubclass#test_delete = 0.01 s 5144s [2725/5474] TestArraySubclass#test_flatten_splat! = 0.01 s 5144s [2726/5474] TestArraySubclass#test_insert = 0.01 s 5144s [2727/5474] TestArraySubclass#test_compact_0 = 0.00 s 5144s [2728/5474] TestArraySubclass#test_reject! = 0.01 s 5144s [2729/5474] TestArraySubclass#test_rindex = 0.01 s 5144s [2730/5474] TestArraySubclass#test_combination2 = 0.00 s 5148s [2731/5474] TestArraySubclass#test_shared_marking = 3.78 s 5148s [2732/5474] TestArraySubclass#test_rotate! = 0.01 s 5148s [2733/5474] TestArraySubclass#test_to_h = 0.01 s 5148s [2734/5474] TestArraySubclass#test_equal = 0.00 s 5148s [2735/5474] TestArraySubclass#test_flatten = 0.00 s 5148s [2736/5474] TestArraySubclass#test_union_big_array = 0.00 s 5151s [2737/5474] TestArraySubclass#test_repeated_permutation_stack_error = 3.32 s 5151s [2738/5474] TestArraySubclass#test_bsearch_index_with_no_block = 0.00 s 5151s [2739/5474] TestArraySubclass#test_bsearch_with_no_block = 0.00 s 5151s [2740/5474] TestArraySubclass#test_sort = 0.00 s 5151s [2741/5474] TestArraySubclass#test_fill_0 = 0.01 s 5151s [2742/5474] TestArraySubclass#test_unshift = 0.00 s 5151s [2743/5474] TestArraySubclass#test_fill_negative_length = 0.00 s 5151s [2744/5474] TestArraySubclass#test_initialize2 = 0.00 s 5151s [2745/5474] TestArraySubclass#test_zip_with_enumerator = 0.01 s 5151s [2746/5474] TestArraySubclass#test_flatten_recursive = 0.00 s 5151s [2747/5474] TestArraySubclass#test_filter! = 0.00 s 5151s [2748/5474] TestArraySubclass#test_transpose = 0.00 s 5151s [2749/5474] TestArraySubclass#test_to_a = 0.00 s 5151s [2750/5474] TestArraySubclass#test_compact! = 0.00 s 5151s [2751/5474] TestArraySubclass#test_pack = 0.01 s 5151s [2752/5474] TestArraySubclass#test_try_convert = 0.00 s 5151s [2753/5474] TestArraySubclass#test_to_a2 = 0.00 s 5151s [2754/5474] TestArraySubclass#test_combination = 0.00 s 5151s [2755/5474] TestArraySubclass#test_difference = 0.00 s 5151s [2756/5474] TestArraySubclass#test_flattern_singleton_class = 0.00 s 5151s [2757/5474] TestArraySubclass#test_bsearch_in_find_any_mode = 0.00 s 5151s [2758/5474] TestArraySubclass#test_aref = 0.00 s 5151s [2759/5474] TestArraySubclass#test_to_ary = 0.01 s 5151s [2760/5474] TestArraySubclass#test_initialize = 0.01 s 5151s [2761/5474] TestArraySubclass#test_OR = 0.00 s 5151s [2762/5474] TestArraySubclass#test_keep_if = 0.00 s 5151s [2763/5474] TestArraySubclass#test_flatten_empty! = 0.00 s 5151s [2764/5474] TestArraySubclass#test_flatten_level0! = 0.00 s 5151s [2765/5474] TestArraySubclass#test_bsearch_in_find_minimum_mode = 0.00 s 5151s [2766/5474] TestArraySubclass#test_replace = 0.01 s 5151s [2767/5474] TestArraySubclass#test_delete_at = 0.00 s 5151s [2768/5474] TestArraySubclass#test_collect! = 0.00 s 5157s [2769/5474] TestArraySubclass#test_sort_with_replace = 5.08 s 5157s [2770/5474] TestArraySubclass#test_shuffle = 0.01 s 5157s [2771/5474] TestArraySubclass#test_to_s = 0.01 s 5157s [2772/5474] TestArraySubclass#test_difference_big_array = 0.00 s 5157s [2773/5474] TestArraySubclass#test_equal_resize = 0.00 s 5157s [2774/5474] TestArraySubclass#test_MINUS = 0.00 s 5157s [2775/5474] TestArraySubclass#test_slice = 0.01 s 5157s [2776/5474] TestArraySubclass#test_slice_out_of_range! = 0.00 s 5157s [2777/5474] TestArraySubclass#test_concat = 0.01 s 5157s [2778/5474] TestArraySubclass#test_fetch = 0.01 s 5157s [2779/5474] TestArraySubclass#test_ary_to_ary = 0.00 s 5157s [2780/5474] TestArraySubclass#test_percent_i = 0.00 s 5157s [2781/5474] TestArraySubclass#test_sort_uncomparable = 0.01 s 5157s [2782/5474] TestArraySubclass#test_compact = 0.00 s 5157s [2783/5474] TestArraySubclass#test_AND = 0.00 s 5157s [2784/5474] TestArraySubclass#test_misc_0 = 0.01 s 5157s [2785/5474] TestArraySubclass#test_split_0 = 0.00 s 5157s [2786/5474] TestArraySubclass#test_rindex2 = 0.00 s 5157s [2787/5474] TestArraySubclass#test_flatten_level0 = 0.00 s 5157s [2788/5474] TestArraySubclass#test_index = 0.00 s 5157s [2789/5474] TestArraySubclass#test_last = 0.00 s 5157s [2790/5474] TestArraySubclass#test_0_literal = 0.00 s 5157s [2791/5474] TestArraySubclass#test_max = 0.01 s 5157s [2792/5474] TestArraySubclass#test_shift = 0.00 s 5157s [2793/5474] TestArraySubclass#test_beg_end_0 = 0.01 s 5157s [2794/5474] TestArraySubclass#test_slice_frozen_array = 0.00 s 5157s [2795/5474] TestArraySubclass#test_length = 0.00 s 5157s [2796/5474] TestArraySubclass#test_each = 0.00 s 5157s [2797/5474] TestArraySubclass#test_flatten_wrong_argument = 0.00 s 5157s [2798/5474] TestArraySubclass#test_splice = 0.00 s 5157s [2799/5474] TestArraySubclass#test_filter = 0.00 s 5157s [2800/5474] TestArraySubclass#test_max_uncomparable = 0.00 s 5157s [2801/5474] TestArraySubclass#test_push = 0.00 s 5157s [2802/5474] TestArraySubclass#test_permutation = 0.01 s 5157s [2803/5474] TestArraySubclass#test_EQUAL = 0.00 s 5157s [2804/5474] TestArraySubclass#test_union = 0.01 s 5157s [2805/5474] TestArraySubclass#test_AND_big_array = 0.00 s 5157s [2806/5474] TestArraySubclass#test_map! = 0.00 s 5157s [2807/5474] TestArraySubclass#test_index2 = 0.00 s 5157s [2808/5474] TestArraySubclass#test_join_recheck_elements_type = 0.00 s 5157s [2809/5474] TestArraySubclass#test_size = 0.00 s 5157s [2810/5474] TestArraySubclass#test_OR_big_in_order = 0.00 s 5157s [2811/5474] TestArraySubclass#test_min_uncomparable = 0.01 s 5157s [2812/5474] TestArraySubclass#test_reverse! = 0.00 s 5157s [2813/5474] TestArraySubclass#test_reverse_each = 0.00 s 5157s [2814/5474] TestArraySubclass#test_CMP = 0.00 s 5157s [2815/5474] TestArraySubclass#test_rassoc = 0.00 s 5157s [2816/5474] TestArraySubclass#test_OR_big_array = 0.00 s 5157s [2817/5474] TestArraySubclass#test_LSHIFT = 0.00 s 5157s [2818/5474] TestArraySubclass#test_MINUS_big_array = 0.00 s 5157s [2819/5474] TestArraySubclass#test_empty_0 = 0.00 s 5157s [2820/5474] TestArraySubclass#test_reject = 0.00 s 5157s [2821/5474] TestArraySubclass#test_fill = 0.00 s 5157s [2822/5474] TestArraySubclass#test_join = 0.02 s 5157s [2823/5474] TestArraySubclass#test_uniq_with_block = 0.00 s 5157s [2824/5474] TestArraySubclass#test_bsearch_index_in_find_minimum_mode = 0.00 s 5157s [2825/5474] TestArraySubclass#test_percent_I = 0.00 s 5157s [2826/5474] TestArraySubclass#test_clone = 0.00 s 5157s [2827/5474] TestArraySubclass#test_take = 0.00 s 5157s [2828/5474] TestArraySubclass#test_select = 0.00 s 5157s [2829/5474] TestArraySubclass#test_last2 = 0.00 s 5157s [2830/5474] TestArraySubclass#test_delete2 = 0.00 s 5157s [2831/5474] TestArraySubclass#test_include? = 0.00 s 5157s [2832/5474] TestArraySubclass#test_combination_clear = 0.09 s 5157s [2833/5474] TestArraySubclass#test_sum = 0.02 s 5157s [2834/5474] TestArraySubclass#test_sample = 0.19 s 5157s [2835/5474] TestArraySubclass#test_AREF = 0.01 s 5157s [2836/5474] TestArraySubclass#test_uniq_bang_with_freeze = 0.00 s 5157s [2837/5474] TestBacktrace#test_thread_backtrace = 0.51 s 5157s [2838/5474] TestBacktrace#test_caller_with_limit = 0.00 s 5157s [2839/5474] TestBacktrace#test_exception = 0.00 s 5160s [2840/5474] TestBacktrace#test_caller_locations_path = 2.44 s 5162s [2841/5474] TestBacktrace#test_caller_locations_lineno = 2.79 s 5163s [2842/5474] TestBacktrace#test_core_backtrace_undef = 0.00 s 5163s [2843/5474] TestBacktrace#test_caller_locations_with_range = 0.00 s 5163s [2844/5474] TestBacktrace#test_core_backtrace_hash_merge = 0.00 s 5163s [2845/5474] TestBacktrace#test_caller_locations_base_label = 0.00 s 5163s [2846/5474] TestBacktrace#test_caller_location_path_cfunc_iseq_no_pc = 0.00 s 5163s [2847/5474] TestBacktrace#test_caller_locations = 0.00 s 5163s [2848/5474] TestBacktrace#test_core_backtrace_alias = 0.00 s 5163s [2849/5474] TestBacktrace#test_argument_error_backtrace_locations = 0.00 s 5163s [2850/5474] TestBacktrace#test_caller_locations_first_label = 0.00 s 5163s [2851/5474] TestBacktrace#test_caller_with_nil_length = 0.00 s 5163s [2852/5474] TestBacktrace#test_thread_backtrace_locations_with_range = 0.50 s 5163s [2853/5474] TestBacktrace#test_exception_backtrace_locations = 0.00 s 5163s [2854/5474] TestBacktrace#test_caller_lev = 0.02 s 5163s [2855/5474] TestBacktrace#test_caller_locations_to_s_inspect = 0.01 s 5163s [2856/5474] TestM17NComb#test_str_to_s = 0.00 s 5164s [2857/5474] TestM17NComb#test_str_squeeze = 0.59 s 5164s [2858/5474] TestM17NComb#test_marshal = 0.00 s 5164s [2859/5474] TestM17NComb#test_str_hex = 0.00 s 5164s [2860/5474] TestM17NComb#test_str_aref_range2 = 0.09 s 5164s [2861/5474] TestM17NComb#test_str_new = 0.01 s 5164s [2862/5474] TestM17NComb#test_str_assign_substr = 0.52 s 5164s [2863/5474] TestM17NComb#test_str_reverse = 0.00 s 5165s [2864/5474] TestM17NComb#test_str_assign_len = 0.41 s 5165s [2865/5474] TestM17NComb#test_str_bytes = 0.00 s 5165s [2866/5474] TestM17NComb#test_str_sum = 0.00 s 5166s [2867/5474] TestM17NComb#test_str_slice = 1.64 s 5166s [2868/5474] TestM17NComb#test_str_bytesize = 0.00 s 5167s [2869/5474] TestM17NComb#test_str_rpartition = 0.37 s 5167s [2870/5474] TestM17NComb#test_str_length = 0.00 s 5167s [2871/5474] TestM17NComb#test_str_eq_transitive = 0.02 s 5167s [2872/5474] TestM17NComb#test_str_to_i = 0.01 s 5167s [2873/5474] TestM17NComb#test_str_aref = 0.00 s 5167s [2874/5474] TestM17NComb#test_tr_s = 0.40 s 5167s [2875/5474] TestM17NComb#test_str_concat = 0.20 s 5168s [2876/5474] TestM17NComb#test_str_start_with? = 0.25 s 5168s [2877/5474] TestM17NComb#test_str_rjust = 0.32 s 5168s [2878/5474] TestM17NComb#test_str_include? = 0.54 s 5169s [2879/5474] TestM17NComb#test_str_casecmp? = 0.03 s 5169s [2880/5474] TestM17NComb#test_str_center = 0.26 s 5169s [2881/5474] TestM17NComb#test_str_assign_range3 = 0.33 s 5169s [2882/5474] TestM17NComb#test_str_clone = 0.00 s 5171s [2883/5474] TestM17NComb#test_str_assign = 1.53 s 5171s [2884/5474] TestM17NComb#test_str_index = 0.28 s 5171s [2885/5474] TestM17NComb#test_str_each_byte = 0.00 s 5171s [2886/5474] TestM17NComb#test_str_chop = 0.01 s 5171s [2887/5474] TestM17NComb#test_str_split = 0.42 s 5171s [2888/5474] TestM17NComb#test_str_upcase = 0.00 s 5171s [2889/5474] TestM17NComb#test_str_oct = 0.00 s 5171s [2890/5474] TestM17NComb#test_str_hash = 0.02 s 5172s [2891/5474] TestM17NComb#test_str_end_with? = 0.24 s 5172s [2892/5474] TestM17NComb#test_str_delete = 0.49 s 5173s [2893/5474] TestM17NComb#test_str_insert = 0.73 s 5173s [2894/5474] TestM17NComb#test_str_eq_symmetric = 0.03 s 5173s [2895/5474] TestM17NComb#test_str_succ = 0.16 s 5173s [2896/5474] TestM17NComb#test_str_rindex = 0.22 s 5173s [2897/5474] TestM17NComb#test_str_succ2 = 0.00 s 5173s [2898/5474] TestM17NComb#test_tr_sjis = 0.01 s 5173s [2899/5474] TestM17NComb#test_str_chr = 0.00 s 5173s [2900/5474] TestM17NComb#test_str_downcase = 0.01 s 5173s [2901/5474] TestM17NComb#test_str_times = 0.01 s 5174s [2902/5474] TestM17NComb#test_str_aref_substr = 0.26 s 5174s [2903/5474] TestM17NComb#test_str_strip = 0.01 s 5174s [2904/5474] TestM17NComb#test_str_eq = 0.07 s 5174s [2905/5474] TestM17NComb#test_str_dup = 0.00 s 5174s [2906/5474] TestM17NComb#test_str_assign_range2 = 0.38 s 5174s [2907/5474] TestM17NComb#test_str_replace = 0.02 s 5174s [2908/5474] TestM17NComb#test_str_eq_reflexive = 0.00 s 5175s [2909/5474] TestM17NComb#test_str_sub! = 0.99 s 5175s [2910/5474] TestM17NComb#test_str_ord = 0.01 s 5175s [2911/5474] TestM17NComb#test_str_chomp = 0.10 s 5175s [2912/5474] TestM17NComb#test_str_to_f = 0.00 s 5175s [2913/5474] TestM17NComb#test_str_crypt = 0.10 s 5175s [2914/5474] TestM17NComb#test_sprintf_s = 0.00 s 5175s [2915/5474] TestM17NComb#test_str_empty? = 0.00 s 5175s [2916/5474] TestM17NComb#test_str_each_line = 0.23 s 5176s [2917/5474] TestM17NComb#test_str_partition = 0.22 s 5176s [2918/5474] TestM17NComb#test_str_swapcase = 0.01 s 5176s [2919/5474] TestM17NComb#test_str_dump = 0.00 s 5176s [2920/5474] TestM17NComb#test_str_scan = 0.29 s 5176s [2921/5474] TestM17NComb#test_str_cmp = 0.03 s 5176s [2922/5474] TestM17NComb#test_str_plus = 0.21 s 5177s [2923/5474] TestM17NComb#test_tr = 0.39 s 5177s [2924/5474] TestM17NComb#test_str_aref_len = 0.01 s 5177s [2925/5474] TestM17NComb#test_str_clear = 0.00 s 5177s [2926/5474] TestM17NComb#test_str_aref_range3 = 0.02 s 5177s [2927/5474] TestM17NComb#test_str_ljust = 0.25 s 5178s [2928/5474] TestM17NComb#test_str_slice! = 1.36 s 5179s [2929/5474] TestM17NComb#test_str_sub = 1.02 s 5179s [2930/5474] TestM17NComb#test_str_capitalize = 0.01 s 5179s [2931/5474] TestM17NComb#test_str_chars = 0.00 s 5179s [2932/5474] TestM17NComb#test_str_casecmp = 0.02 s 5179s [2933/5474] TestProcKeywords#test_compose_keywords_non_proc = 0.01 s 5179s [2934/5474] TestProcKeywords#test_compose_keywords = 0.00 s 5179s [2935/5474] TestProcKeywords#test_compose_keywords_method = 0.00 s 5180s [2936/5474] TestThreadGroup#test_thread_init = 1.00 s 5180s [2937/5474] TestStruct::TopStruct#test_initialize_with_kw = 0.00 s 5180s [2938/5474] TestStruct::TopStruct#test_deconstruct_keys = 0.00 s 5180s [2939/5474] TestStruct::TopStruct#test_aset = 0.02 s 5180s [2940/5474] TestStruct::TopStruct#test_each_pair = 0.00 s 5180s [2941/5474] TestStruct::TopStruct#test_public_send = 0.00 s 5180s [2942/5474] TestStruct::TopStruct#test_ref = 0.00 s 5180s [2943/5474] TestStruct::TopStruct#test_redefinition_warning = 0.00 s 5180s [2944/5474] TestStruct::TopStruct#test_dig = 0.00 s 5180s [2945/5474] TestStruct::TopStruct#test_hash = 0.00 s 5180s [2946/5474] TestStruct::TopStruct#test_to_h_block = 0.00 s 5180s [2947/5474] TestStruct::TopStruct#test_eql = 0.00 s 5180s [2948/5474] TestStruct::TopStruct#test_small_structs = 0.00 s 5180s [2949/5474] TestStruct::TopStruct#test_inherit = 0.00 s 5180s [2950/5474] TestStruct::TopStruct#test_big_struct = 0.00 s 5180s [2951/5474] TestStruct::TopStruct#test_struct = 0.00 s 5180s [2952/5474] TestStruct::TopStruct#test_values_at = 0.00 s 5180s [2953/5474] TestStruct::TopStruct#test_inspect = 0.01 s 5180s [2954/5474] TestStruct::TopStruct#test_struct_new_with_keyword_init = 0.01 s 5180s [2955/5474] TestStruct::TopStruct#test_comparison_when_recursive = 0.01 s 5180s [2956/5474] TestStruct::TopStruct#test_to_h = 0.00 s 5180s [2957/5474] TestStruct::TopStruct#test_equal = 0.00 s 5180s [2958/5474] TestStruct::TopStruct#test_overridden_aref = 0.00 s 5180s [2959/5474] TestStruct::TopStruct#test_set = 0.00 s 5180s [2960/5474] TestStruct::TopStruct#test_bang_mark_in_member = 0.00 s 5180s [2961/5474] TestStruct::TopStruct#test_struct_new = 0.01 s 5180s [2962/5474] TestStruct::TopStruct#test_aref = 0.01 s 5180s [2963/5474] TestStruct::TopStruct#test_initialize = 0.00 s 5180s [2964/5474] TestStruct::TopStruct#test_new_duplicate = 0.00 s 5180s [2965/5474] TestStruct::TopStruct#test_setter_method_returns_value = 0.00 s 5180s [2966/5474] TestStruct::TopStruct#test_members = 0.00 s 5180s [2967/5474] TestStruct::TopStruct#test_struct_new_with_keyword_init_and_block = 0.00 s 5180s [2968/5474] TestStruct::TopStruct#test_overridden_aset = 0.00 s 5180s [2969/5474] TestStruct::TopStruct#test_init_copy = 0.00 s 5180s [2970/5474] TestStruct::TopStruct#test_each = 0.00 s 5180s [2971/5474] TestStruct::TopStruct#test_error = 0.00 s 5180s [2972/5474] TestStruct::TopStruct#test_filter = 0.00 s 5181s [2973/5474] TestStruct::TopStruct#test_struct_new_with_empty_hash = 0.03 s 5181s [2974/5474] TestStruct::TopStruct#test_junk = 0.00 s 5181s [2975/5474] TestStruct::TopStruct#test_morethan10members = 0.00 s 5181s [2976/5474] TestStruct::TopStruct#test_question_mark_in_member = 0.00 s 5181s [2977/5474] TestStruct::TopStruct#test_size = 0.00 s 5181s [2978/5474] TestStruct::TopStruct#test_select = 0.00 s 5181s [2979/5474] TestIOBuffer#test_file_mapped_invalid = 0.00 s 5181s [2980/5474] TestIOBuffer#test_new_internal = 0.00 s 5181s [2981/5474] TestIOBuffer#test_resize_mapped = 0.00 s 5181s [2982/5474] TestIOBuffer#test_slice_bounds_error = 0.00 s 5181s [2983/5474] TestIOBuffer#test_compare_different_size = 0.00 s 5181s [2984/5474] TestIOBuffer#test_string_mapped_frozen = 0.00 s 5181s [2985/5474] TestIOBuffer#test_get_string = 0.00 s 5181s [2986/5474] TestIOBuffer#test_resize_preserve = 0.00 s 5181s [2987/5474] TestIOBuffer#test_read_with_with_length = 0.00 s 5181s [2988/5474] TestIOBuffer#test_pread = 0.00 s 5181s [2989/5474] TestIOBuffer#test_locked = 0.00 s 5181s [2990/5474] TestIOBuffer#test_invalidation = 0.00 s 5181s [2991/5474] TestIOBuffer#test_get_set_value = 0.00 s 5181s [2992/5474] TestIOBuffer#test_string = 0.00 s 5181s [2993/5474] TestIOBuffer#test_clear = 0.00 s 5181s [2994/5474] TestIOBuffer#test_string_mapped = 0.00 s 5181s [2995/5474] TestIOBuffer#test_pread_offset = 0.00 s 5181s [2996/5474] TestIOBuffer#test_each_byte = 0.00 s 5181s [2997/5474] TestIOBuffer#test_read = 0.00 s 5181s [2998/5474] TestIOBuffer#test_read_with_with_offset = 0.00 s 5181s [2999/5474] TestIOBuffer#test_write = 0.00 s 5181s [3000/5474] TestIOBuffer#test_pwrite = 0.00 s 5181s [3001/5474] TestIOBuffer#test_pwrite_offset = 0.00 s 5181s [3002/5474] TestIOBuffer#test_resize_zero_internal = 0.00 s 5181s [3003/5474] TestIOBuffer#test_string_negative = 0.00 s 5181s [3004/5474] TestIOBuffer#test_inplace_operators = 0.00 s 5181s [3005/5474] TestIOBuffer#test_slice_arguments = 0.00 s 5181s [3006/5474] TestIOBuffer#test_string_mapped_mutable = 0.00 s 5181s [3007/5474] TestIOBuffer#test_shared = 0.00 s 5181s [3008/5474] TestIOBuffer#test_compare_same_size = 0.00 s 5181s [3009/5474] TestIOBuffer#test_slice = 0.00 s 5181s [3010/5474] TestIOBuffer#test_non_string = 0.00 s 5181s [3011/5474] TestIOBuffer#test_default_size = 0.00 s 5181s [3012/5474] TestIOBuffer#test_get_set_values = 0.00 s 5181s [3013/5474] TestIOBuffer#test_flags = 0.00 s 5181s [3014/5474] TestIOBuffer#test_each = 0.01 s 5181s [3015/5474] TestIOBuffer#test_new_mapped = 0.00 s 5181s [3016/5474] TestIOBuffer#test_values = 0.00 s 5181s [3017/5474] TestIOBuffer#test_new_readonly = 0.00 s 5181s [3018/5474] TestIOBuffer#test_endian = 0.00 s 5181s [3019/5474] TestIOBuffer#test_operators = 0.00 s 5182s [3020/5474] TestSprintf#test_rational = 1.32 s 5182s [3021/5474] TestSprintf#test_width_underflow = 0.00 s 5182s [3022/5474] TestSprintf#test_bignum = 0.00 s 5182s [3023/5474] TestSprintf#test_hash = 0.00 s 5182s [3024/5474] TestSprintf#test_star = 0.00 s 5182s [3025/5474] TestSprintf#test_string = 0.00 s 5182s [3026/5474] TestSprintf#test_positional = 0.00 s 5182s [3027/5474] TestSprintf#test_inspect = 0.00 s 5182s [3028/5474] TestSprintf#test_float_prec = 0.00 s 5182s [3029/5474] TestSprintf#test_inf = 0.00 s 5182s [3030/5474] TestSprintf#test_char = 0.00 s 5182s [3031/5474] TestSprintf#test_float2 = 0.00 s 5182s [3032/5474] TestSprintf#test_named_with_nil = 0.00 s 5182s [3033/5474] TestSprintf#test_percent_sign_at_end = 0.00 s 5182s [3034/5474] TestSprintf#test_rational_precision = 0.00 s 5182s [3035/5474] TestSprintf#test_nan = 0.00 s 5182s [3036/5474] TestSprintf#test_integer = 0.00 s 5182s [3037/5474] TestSprintf#test_rb_sprintf = 0.00 s 5182s [3038/5474] TestSprintf#test_negative_hex = 0.00 s 5182s [3039/5474] TestSprintf#test_negative_width_overflow = 0.00 s 5182s [3040/5474] TestSprintf#test_named_default = 0.00 s 5182s [3041/5474] TestSprintf#test_escape = 0.00 s 5182s [3042/5474] TestSprintf#test_named_untyped = 0.00 s 5182s [3043/5474] TestSprintf#test_skip = 0.00 s 5182s [3044/5474] Complex_Test2#test_kumi2 = 0.00 s 5182s [3045/5474] Complex_Test2#test_kumi = 0.01 s 5192s [3046/5474] TestClone#test_user_flags = 10.15 s 5192s [3047/5474] TestClone#test_clone = 0.00 s 5195s [3048/5474] TestRubyOptions#test_syntax_check = 2.39 s 5197s [3049/5474] TestRubyOptions#test_DATA = 2.39 s 5200s [3050/5474] TestRubyOptions#test_rubylib_invalid_encoding = 3.20 s 5200s [3051/5474] TestRubyOptions#test_jit_debug = 0.32 s 5200s [3052/5474] TestRubyOptions#test_setproctitle = 0.00 s 5203s [3053/5474] TestRubyOptions#test_pflag_sub = 2.46 s 5206s [3054/5474] TestRubyOptions#test___dir__encoding = 3.31 s 5208s [3055/5474] TestRubyOptions#test_source_file = 2.26 s 5213s [3056/5474] TestRubyOptions#test_option_variables = 4.56 s 5215s [3057/5474] TestRubyOptions#test_autosplit = 2.39 s 5218s [3058/5474] TestRubyOptions#test_null_script = 2.17 s 5230s [3059/5474] TestRubyOptions#test_enable = 12.43 s 5231s [3060/5474] TestRubyOptions#test_set_program_name = 0.00 s 5233s [3061/5474] TestRubyOptions#test_pflag_gsub = 2.58 s 5237s [3062/5474] TestRubyOptions#test_include = 4.74 s 5237s [3063/5474] TestPipe::WithConversion#test_eof_3 = 0.00 s 5237s [3064/5474] TestPipe::WithConversion#test_eof_2 = 0.00 s 5241s [3065/5474] TestPipe::WithConversion#test_stdout_epipe = 3.44 s 5241s [3066/5474] TestPipe::WithConversion#test_eof_0_rw = 0.00 s 5241s [3067/5474] TestInteger#test_digits_for_negative_numbers = 0.00 s 5241s [3068/5474] TestInteger#test_times = 0.00 s 5241s [3069/5474] TestInteger#test_int_p = 0.00 s 5244s [3070/5474] TestInteger#test_times_bignum_redefine_plus_lt = 3.56 s 5244s [3071/5474] TestInteger#test_digits_for_non_numeric_base_argument = 0.00 s 5244s [3072/5474] TestInteger#test_digits_for_invalid_base_numbers = 0.00 s 5244s [3073/5474] TestInteger#test_bitwise_xor_with_integer_coercion = 0.00 s 5244s [3074/5474] TestInteger#test_Integer_with_invalid_exception = 0.00 s 5244s [3075/5474] TestInteger#test_bitwise_or_with_integer_mimic_object = 0.00 s 5244s [3076/5474] TestInteger#test_fdiv = 0.00 s 5244s [3077/5474] TestInteger#test_succ = 0.00 s 5244s [3078/5474] TestInteger#test_digits_for_non_integral_base_numbers = 0.00 s 5244s [3079/5474] TestInteger#test_obj_fdiv = 0.00 s 5244s [3080/5474] TestInteger#test_chr = 0.00 s 5244s [3081/5474] TestInteger#test_bitwise_and_with_integer_mimic_object = 0.00 s 5244s [3082/5474] TestInteger#test_rshift = 0.00 s 5244s [3083/5474] TestInteger#test_bitwise_xor_with_integer_mimic_object = 0.00 s 5244s [3084/5474] TestInteger#test_truncate = 0.00 s 5244s [3085/5474] TestInteger#test_floor = 0.00 s 5244s [3086/5474] TestInteger#test_downto = 0.00 s 5244s [3087/5474] TestInteger#test_digits = 0.00 s 5244s [3088/5474] TestInteger#test_bitwise_or_with_integer_coercion = 0.00 s 5244s [3089/5474] TestInteger#test_try_convert = 0.00 s 5244s [3090/5474] TestInteger#test_upto = 0.00 s 5244s [3091/5474] TestInteger#test_ceil = 0.00 s 5246s [3092/5474] TestInteger#test_aref = 1.63 s 5246s [3093/5474] TestInteger#test_round = 0.01 s 5246s [3094/5474] TestInteger#test_bitwise_and_with_integer_coercion = 0.00 s 5246s [3095/5474] TestInteger#test_lshift = 0.00 s 5250s [3096/5474] TestInteger#test_Integer_with_exception_keyword = 4.01 s 5250s [3097/5474] TestInteger#test_square_root = 0.09 s 5250s [3098/5474] TestThread#test_uninitialized = 0.00 s 5261s [3099/5474] TestThread#test_local_barrier = 10.65 s 5261s [3100/5474] TestThread#test_thread_local_fetch = 0.00 s 5261s [3101/5474] TestThread#test_mutex_owned2 = 0.00 s 5261s [3102/5474] TestThread#test_select_wait = 0.00 s 5261s [3103/5474] TestThread#test_backtrace = 0.00 s 5264s [3104/5474] TestThread#test_new_symbol_proc = 3.60 s 5264s [3105/5474] TestThread#test_thread_join_current = 0.00 s 5264s [3106/5474] TestThread#test_mutex_illegal_unlock = 0.00 s 5264s [3107/5474] TestThread#test_handle_interrupted? = 0.00 s 5264s [3108/5474] TestThread#test_kill_wrong_argument = 0.00 s 5264s [3109/5474] TestThread#test_join_limit_FIXNUM_MAX = 0.00 s 5264s [3110/5474] TestThread#test_thread_variable? = 0.00 s 5264s [3111/5474] TestThread#test_join_limit_UINT64_MAX = 0.00 s 5264s [3112/5474] TestThread#test_join_argument_conversion = 0.00 s 5264s [3113/5474] TestThread#test_join2 = 0.02 s 5267s [3114/5474] TestThread#test_thread_status_in_trap = 2.51 s 5267s [3115/5474] TestThread#test_recursive_outer = 0.00 s 5269s [3116/5474] TestThread#test_main = 2.31 s 5269s [3117/5474] TestThread#test_kill_thread_subclass = 0.00 s 5269s [3118/5474] TestThread#test_mutex_trylock = 0.00 s 5273s [3119/5474] TestThread#test_thread_timer_and_ensure = 3.38 s 5275s [3120/5474] TestThread#test_stop = 2.38 s 5275s [3121/5474] TestThread#test_thread_invalid_object = 0.00 s 5275s [3122/5474] TestThread#test_join_limit_negative_minus_1 = 0.00 s 5275s [3123/5474] TestThread#test_fork_while_mutex_locked_by_forker = 0.00 s 5275s [3124/5474] TestThread#test_thread_name = 0.00 s 5275s [3125/5474] TestThread#test_join_limit_INFINITY = 0.00 s 5275s [3126/5474] TestThread#test_mutex_synchronize_yields_no_block_params = 0.00 s 5275s [3127/5474] TestThread#test_thread_native_thread_id = 0.01 s 5275s [3128/5474] TestThread#test_handle_interrupt_with_break = 0.00 s 5275s [3129/5474] TestThread#test_mutex_deadlock = 0.00 s 5275s [3130/5474] TestThread#test_mutex_synchronize = 0.04 s 5275s [3131/5474] TestThread#test_exit = 0.00 s 5275s [3132/5474] TestThread#test_thread_local_security = 0.00 s 5278s [3133/5474] TestThread#test_kill_main_thread = 2.45 s 5278s [3134/5474] TestThread#test_thread_variable_strings_and_symbols_are_the_same_key = 0.00 s 5278s [3135/5474] TestThread#test_handle_interrupt_with_return = 0.00 s 5278s [3136/5474] TestThread#test_status_and_stop_p = 0.00 s 5278s [3137/5474] TestThread#test_thread_variable_frozen = 0.00 s 5278s [3138/5474] TestThread#test_thread_local_dynamic_symbol = 0.00 s 5278s [3139/5474] TestThread#test_handle_interrupt = 0.01 s 5278s [3140/5474] TestThread#test_thread_variables = 0.00 s 5280s [3141/5474] TestThread#test_handle_interrupt_and_p = 2.47 s 5280s [3142/5474] TestThread#test_mutex_owned = 0.00 s 5282s [3143/5474] TestThread#test_thread_instance_variable = 2.43 s 5282s [3144/5474] TestThread#test_join_limit_negative_minus_0_1 = 0.00 s 5282s [3145/5474] TestThread#test_handle_interrupt_blocking = 0.00 s 5282s [3146/5474] TestThread#test_handle_interrupt_invalid_argument = 0.00 s 5282s [3147/5474] TestThread#test_fork_while_parent_locked = 0.00 s 5282s [3148/5474] TestThread#test_join_limit_negative_FIXNUM_MIN = 0.00 s 5282s [3149/5474] TestThread#test_mutex_fifo_like_lock = 0.00 s 5282s [3150/5474] TestThread#test_thread_local = 0.00 s 5282s [3151/5474] TestThread#test_subclass_no_initialize = 0.00 s 5282s [3152/5474] TestThread#test_new = 0.00 s 5282s [3153/5474] TestThread#test_join_limit_negative_minus_INFINITY = 0.00 s 5283s [3154/5474] TestThread#test_join = 0.10 s 5283s [3155/5474] TestThread#test_thread_invalid_name = 0.00 s 5283s [3156/5474] TestThread#test_switch_while_busy_loop = 0.10 s 5285s [3157/5474] TestThread#test_handle_interrupt_and_io = 2.38 s 5285s [3158/5474] TestThread#test_thread_status_raise_after_kill = 0.00 s 5285s [3159/5474] TestSprintfComb#test_format_float(% +0.0E) = 0.02 s 5285s [3160/5474] TestSprintfComb#test_format_integer(%#-0b) = 0.03 s 5285s [3161/5474] TestSprintfComb#test_format_float(% #+-00.e) = 0.01 s 5285s [3162/5474] TestSprintfComb#test_format_float(%e) = 0.01 s 5285s [3163/5474] TestSprintfComb#test_format_integer(% +020o) = 0.01 s 5285s [3164/5474] TestSprintfComb#test_format_integer(% #+-00x) = 0.01 s 5285s [3165/5474] TestSprintfComb#test_format_float(%5.0e) = 0.01 s 5285s [3166/5474] TestSprintfComb#test_format_float(%#0.8E) = 0.00 s 5285s [3167/5474] TestSprintfComb#test_format_integer(% #+-0B) = 0.02 s 5285s [3168/5474] TestSprintfComb#test_format_integer(% +00.20o) = 0.01 s 5285s [3169/5474] TestSprintfComb#test_format_float(% #+5e) = 0.01 s 5285s [3170/5474] TestSprintfComb#test_format_integer(%5X) = 0.01 s 5285s [3171/5474] TestSprintfComb#test_format_float(%#05.8E) = 0.01 s 5285s [3172/5474] TestSprintfComb#test_format_integer(%#-0x) = 0.01 s 5285s [3173/5474] TestSprintfComb#test_format_integer(% #+-0.8X) = 0.01 s 5285s [3174/5474] TestSprintfComb#test_format_float(%+05.E) = 0.00 s 5285s [3175/5474] TestSprintfComb#test_format_float(%#-.E) = 0.00 s 5285s [3176/5474] TestSprintfComb#test_format_integer(% #+-0X) = 0.00 s 5285s [3177/5474] TestSprintfComb#test_format_float(%#+-.0e) = 0.00 s 5285s [3178/5474] TestSprintfComb#test_format_float(%#-0E) = 0.00 s 5285s [3179/5474] TestSprintfComb#test_format_integer(%B) = 0.01 s 5285s [3180/5474] TestSprintfComb#test_format_integer(% +020.20b) = 0.00 s 5285s [3181/5474] TestSprintfComb#test_format_integer(% +00x) = 0.00 s 5285s [3182/5474] TestSprintfComb#test_format_integer(%.20B) = 0.00 s 5285s [3183/5474] TestSprintfComb#test_format_integer(%5.20d) = 0.01 s 5285s [3184/5474] TestSprintfComb#test_format_integer(% +00.20x) = 0.00 s 5285s [3185/5474] TestSprintfComb#test_format_integer(%#-05.8b) = 0.01 s 5285s [3186/5474] TestSprintfComb#test_format_integer(%#-0.8x) = 0.00 s 5285s [3187/5474] TestSprintfComb#test_format_float(% 0.8e) = 0.00 s 5285s [3188/5474] TestSprintfComb#test_format_integer(%0.20X) = 0.00 s 5285s [3189/5474] TestSprintfComb#test_format_float(% +05E) = 0.00 s 5285s [3190/5474] TestSprintfComb#test_format_integer(% +00b) = 0.00 s 5285s [3191/5474] TestSprintfComb#test_format_integer(% #+-20d) = 0.01 s 5285s [3192/5474] TestSprintfComb#test_format_integer(%d) = 0.00 s 5285s [3193/5474] TestSprintfComb#test_format_integer(% #+-0x) = 0.00 s 5285s [3194/5474] TestSprintfComb#test_format_integer(% #+-20.8B) = 0.01 s 5285s [3195/5474] TestSprintfComb#test_format_integer(%.20X) = 0.00 s 5285s [3196/5474] TestSprintfComb#test_format_integer(%0B) = 0.00 s 5285s [3197/5474] TestString2#test_gsub = 0.00 s 5285s [3198/5474] TestString2#test_match_p_regexp = 0.00 s 5285s [3199/5474] TestString2#test_each_char = 0.00 s 5285s [3200/5474] TestString2#test_lstrip = 0.00 s 5285s [3201/5474] TestString2#test_strip = 0.00 s 5285s [3202/5474] TestString2#test_gsub! = 0.00 s 5285s [3203/5474] TestString2#test_downcase2 = 0.00 s 5285s [3204/5474] TestString2#test_reverse = 0.00 s 5285s [3205/5474] TestString2#test_VERY_EQUAL = 0.00 s 5285s [3206/5474] TestString2#test_downcase = 0.00 s 5285s [3207/5474] TestString2#test_sub = 0.01 s 5285s [3208/5474] TestString2#test_times = 0.00 s 5285s [3209/5474] TestString2#test_prepend = 0.00 s 5285s [3210/5474] TestString2#test_split_lookbehind = 0.00 s 5285s [3211/5474] TestString2#test_match_method = 0.00 s 5285s [3212/5474] TestString2#test_eql? = 0.00 s 5285s [3213/5474] TestString2#test_dummy_inspect = 0.00 s 5285s [3214/5474] TestString2#test_squeeze = 0.00 s 5285s [3215/5474] TestString2#test_squeeze! = 0.00 s 5285s [3216/5474] TestString2#test_slice! = 0.01 s 5285s [3217/5474] TestString2#test_PLUS = 0.00 s 5285s [3218/5474] TestString2#test_str_new4 = 0.00 s 5285s [3219/5474] TestString2#test_ord = 0.00 s 5285s [3220/5474] TestString2#test_tr! = 0.01 s 5285s [3221/5474] TestString2#test_upcase2 = 0.00 s 5285s [3222/5474] TestString2#test_MUL = 0.00 s 5286s [3223/5474] TestString2#test_split = 0.01 s 5286s [3224/5474] TestString2#test_intern = 0.00 s 5286s [3225/5474] TestString2#test_lines = 0.00 s 5286s [3226/5474] TestString2#test_strip! = 0.00 s 5286s [3227/5474] TestString2#test_empty? = 0.00 s 5286s [3228/5474] TestString2#test_inspect_nul = 0.00 s 5286s [3229/5474] TestString2#test_succ = 0.00 s 5286s [3230/5474] TestString2#test_split_encoding = 0.00 s 5286s [3231/5474] TestString2#test_capitalize = 0.00 s 5286s [3232/5474] TestString2#test_byteslice = 0.01 s 5286s [3233/5474] TestString2#test_delete! = 0.00 s 5286s [3234/5474] TestString2#test_split_invalid_sequence = 0.00 s 5286s [3235/5474] TestString2#test_hash = 0.00 s 5286s [3236/5474] TestString2#test_clear_nonasciicompat = 0.00 s 5290s [3237/5474] TestString2#test_eq_tilde_can_be_overridden = 3.35 s 5290s [3238/5474] TestString2#test_lstrip_bang = 0.00 s 5290s [3239/5474] TestString2#test_concat_literals = 0.00 s 5290s [3240/5474] TestString2#test_tr_s = 0.00 s 5290s [3241/5474] TestString2#test_chr = 0.00 s 5290s [3242/5474] TestString2#test_split_wchar = 0.00 s 5290s [3243/5474] TestString2#test_clear = 0.00 s 5290s [3244/5474] TestString2#test_ljust = 0.00 s 5290s [3245/5474] TestString2#test_substr_code_range = 0.00 s 5290s [3246/5474] TestString2#test_chars = 0.00 s 5290s [3247/5474] TestString2#test_each_codepoint = 0.00 s 5290s [3248/5474] TestString2#test_each_byte = 0.00 s 5290s [3249/5474] TestString2#test_dup = 0.00 s 5290s [3250/5474] TestString2#test_to_s_2 = 0.00 s 5290s [3251/5474] TestString2#test_substr_negative_begin = 0.00 s 5290s [3252/5474] TestString2#test_chop! = 0.00 s 5290s [3253/5474] TestString2#test_tr_s! = 0.00 s 5290s [3254/5474] TestString2#test_unpack = 0.01 s 5290s [3255/5474] TestString2#test_capitalize! = 0.00 s 5290s [3256/5474] TestString2#test_swapcase = 0.00 s 5290s [3257/5474] TestString2#test_count = 0.00 s 5290s [3258/5474] TestString2#test_dump = 0.00 s 5290s [3259/5474] TestString2#test_next! = 0.00 s 5290s [3260/5474] TestString2#test_delete = 0.00 s 5290s [3261/5474] TestString2#test_insert = 0.00 s 5290s [3262/5474] TestString2#test_oct = 0.00 s 5290s [3263/5474] TestString2#test_sub! = 0.00 s 5290s [3264/5474] TestString2#test_to_f = 0.00 s 5290s [3265/5474] TestString2#test_each_grapheme_cluster = 0.28 s 5290s [3266/5474] TestString2#test_rindex = 0.01 s 5290s [3267/5474] TestString2#test_to_str = 0.01 s 5290s [3268/5474] TestString2#test_match_p_string = 0.00 s 5290s [3269/5474] TestString2#test_chomp = 0.01 s 5290s [3270/5474] TestString2#test_split_with_block = 0.01 s 5290s [3271/5474] TestString2#test_upcase = 0.00 s 5290s [3272/5474] TestString2#test_MOD = 0.00 s 5290s [3273/5474] TestString2#test_delete_prefix = 0.01 s 5290s [3274/5474] TestString2#test_sub_hash = 0.00 s 5290s [3275/5474] TestString2#test_scan = 0.00 s 5290s [3276/5474] TestString2#test_rb_str_new4 = 0.00 s 5290s [3277/5474] TestString2#test_mod_check = 0.00 s 5290s [3278/5474] TestString2#test_gsub_encoding = 0.00 s 5290s [3279/5474] TestString2#test_next = 0.00 s 5290s [3280/5474] TestString2#test_sum_long = 0.04 s 5290s [3281/5474] TestString2#test_try_convert = 0.00 s 5290s [3282/5474] TestString2#test_MATCH = 0.00 s 5290s [3283/5474] TestString2#test_upto = 0.01 s 5290s [3284/5474] TestString2#test_to_id = 0.01 s 5290s [3285/5474] TestString2#test_to_i = 0.01 s 5290s [3286/5474] TestString2#test_initialize = 0.01 s 5290s [3287/5474] TestString2#test_upto_numeric = 0.00 s 5290s [3288/5474] TestString2#test_nesting_shared = 0.00 s 5290s [3289/5474] TestString2#test_split_invalid_argument = 0.00 s 5290s [3290/5474] TestString2#test_center = 0.00 s 5290s [3291/5474] TestString2#test_nesting_shared_b = 0.00 s 5290s [3292/5474] TestString2#test_replace = 0.00 s 5290s [3293/5474] TestString2#test_times2 = 0.00 s 5290s [3294/5474] TestString2#test_rb_str_to_str = 0.00 s 5290s [3295/5474] TestString2#test_gsub_hash = 0.00 s 5290s [3296/5474] TestString2#test_to_s = 0.00 s 5290s [3297/5474] TestString2#test_rstrip = 0.00 s 5290s [3298/5474] TestString2#test_delete_suffix = 0.01 s 5290s [3299/5474] TestString2#test_shared_force_encoding = 0.00 s 5290s [3300/5474] TestString2#test_s_new = 0.01 s 5290s [3301/5474] TestString2#test_upto_nonalnum = 0.00 s 5290s [3302/5474] TestString2#test_slice = 0.00 s 5290s [3303/5474] TestString2#test_end_with? = 0.00 s 5290s [3304/5474] TestString2#test_bytes = 0.00 s 5290s [3305/5474] TestString2#test_concat = 0.00 s 5290s [3306/5474] TestString2#test_splice! = 0.00 s 5290s [3307/5474] TestString2#test_respond_to = 0.00 s 5290s [3308/5474] TestString2#test_split_dupped = 0.00 s 5290s [3309/5474] TestString2#test_codepoints = 0.00 s 5290s [3310/5474] TestString2#test_ascii_incomat_inspect = 0.00 s 5293s [3311/5474] TestString2#test_fs = 3.56 s 5293s [3312/5474] TestString2#test_index = 0.01 s 5293s [3313/5474] TestString2#test_downcase! = 0.00 s 5293s [3314/5474] TestString2#test_rstrip_bang = 0.01 s 5293s [3315/5474] TestString2#test_initialize_shared = 0.00 s 5293s [3316/5474] TestString2#test_length = 0.00 s 5293s [3317/5474] TestString2#test_each = 0.00 s 5293s [3318/5474] TestString2#test_chop = 0.00 s 5293s [3319/5474] TestString2#test_delete_suffix_bang = 0.01 s 5293s [3320/5474] TestString2#test_chomp! = 0.01 s 5293s [3321/5474] TestString2#test_each_line_chomp = 0.01 s 5293s [3322/5474] TestString2#test_delete_prefix_bang = 0.01 s 5293s [3323/5474] TestString2#test_tr = 0.00 s 5293s [3324/5474] TestString2#test_unknown_string_option = 0.00 s 5293s [3325/5474] TestString2#test_EQUAL = 0.01 s 5293s [3326/5474] TestString2#test_start_with? = 0.00 s 5293s [3327/5474] TestString2#test_rb_str_shared_replace = 0.00 s 5293s [3328/5474] TestString2#test_initialize_nonstring = 0.00 s 5293s [3329/5474] TestString2#test_size = 0.00 s 5293s [3330/5474] TestString2#test_casecmp = 0.00 s 5293s [3331/5474] TestString2#test_rjust = 0.00 s 5293s [3332/5474] TestString2#test_reverse! = 0.00 s 5293s [3333/5474] TestString2#test_swapcase! = 0.00 s 5293s [3334/5474] TestString2#test_rpartition = 0.01 s 5293s [3335/5474] TestString2#test_CMP = 0.01 s 5293s [3336/5474] TestString2#test_partition = 0.01 s 5293s [3337/5474] TestString2#test_LSHIFT = 0.01 s 5293s [3338/5474] TestString2#test_upcase! = 0.00 s 5293s [3339/5474] TestString2#test_each_line = 0.01 s 5293s [3340/5474] TestString2#test_hex = 0.00 s 5297s [3341/5474] TestString2#test_gsub_enumerator = 3.89 s 5297s [3342/5474] TestString2#test_clone = 0.00 s 5297s [3343/5474] TestString2#test_frozen_check = 0.00 s 5297s [3344/5474] TestString2#test_succ! = 0.01 s 5297s [3345/5474] TestString2#test_regexp_match_subclass = 0.00 s 5297s [3346/5474] TestString2#test_include? = 0.00 s 5297s [3347/5474] TestString2#test_casecmp? = 0.00 s 5297s [3348/5474] TestString2#test_sum = 0.00 s 5297s [3349/5474] TestString2#test_sum_2 = 0.00 s 5297s [3350/5474] TestString2#test_AREF = 0.01 s 5297s [3351/5474] TestKeyError#test_receiver = 0.00 s 5297s [3352/5474] TestKeyError#test_all = 0.00 s 5297s [3353/5474] TestKeyError#test_key = 0.00 s 5297s [3354/5474] TestKeyError#test_message = 0.00 s 5297s [3355/5474] TestKeyError#test_default = 0.00 s 5297s [3356/5474] TestKeyError#test_receiver_and_key = 0.00 s 5297s [3357/5474] TestObjectSpace#test_id2ref_36 = 0.00 s 5297s [3358/5474] TestObjectSpace#test_id2ref_34 = 0.00 s 5297s [3359/5474] TestObjectSpace#test_id2ref_25 = 0.00 s 5297s [3360/5474] TestObjectSpace#test_id2ref_27 = 0.00 s 5300s [3361/5474] TestObjectSpace#test_each_object_singleton_class = 3.34 s 5300s [3362/5474] TestObjectSpace#test_id2ref_21 = 0.00 s 5300s [3363/5474] TestObjectSpace#test_id2ref_23 = 0.00 s 5300s [3364/5474] TestObjectSpace#test_finalizer_thread_raiseAfter GC 5301s = 0.10 s 5307s [3365/5474] TestObjectSpace#test_id2ref_liveness = 6.16 s 5310s [3366/5474] TestObjectSpace#test_each_object_recursive_key = 3.53 s 5313s [3367/5474] TestObjectSpace#test_finalizer_with_super = 2.57 s 5316s [3368/5474] TestObjectSpace#test_each_object_with_allocation = 3.56 s 5316s [3369/5474] TestObjectSpace#test_id2ref_19 = 0.00 s 5316s [3370/5474] TestObjectSpace#test_id2ref_22 = 0.00 s 5316s [3371/5474] TestObjectSpace#test_id2ref_20 = 0.00 s 5316s [3372/5474] TestObjectSpace#test_id2ref_26 = 0.00 s 5316s [3373/5474] TestObjectSpace#test_id2ref_24 = 0.00 s 5316s [3374/5474] TestObjectSpace#test_id2ref_35 = 0.00 s 5316s [3375/5474] TestArithmeticSequence#test_last_bug17218 = 0.00 s 5316s [3376/5474] TestArithmeticSequence#test_range_step_inspect = 0.00 s 5316s [3377/5474] TestArithmeticSequence#test_num_step_size = 0.00 s 5316s [3378/5474] TestArithmeticSequence#test_to_a_bug17218 = 0.00 s 5316s [3379/5474] TestArithmeticSequence#test_peek_values = 0.00 s 5316s [3380/5474] TestArithmeticSequence#test_first_bug15518 = 0.00 s 5316s [3381/5474] TestArithmeticSequence#test_hash = 0.00 s 5316s [3382/5474] TestArithmeticSequence#test_begin = 0.00 s 5316s [3383/5474] TestArithmeticSequence#test_num_step_inspect = 0.00 s 5316s [3384/5474] TestArithmeticSequence#test_exclude_end_p = 0.00 s 5316s [3385/5474] TestArithmeticSequence#test_first = 0.00 s 5316s [3386/5474] TestArithmeticSequence#test_with_object = 0.00 s 5316s [3387/5474] TestArithmeticSequence#test_eq = 0.00 s 5316s [3388/5474] TestArithmeticSequence#test_end = 0.00 s 5316s [3389/5474] TestArithmeticSequence#test_with_index = 0.00 s 5316s [3390/5474] TestArithmeticSequence#test_peek = 0.00 s 5316s [3391/5474] TestArithmeticSequence#test_next_after_stopiteration = 0.01 s 5316s [3392/5474] TestArithmeticSequence#test_next = 0.01 s 5316s [3393/5474] TestArithmeticSequence#test_cons = 0.00 s 5316s [3394/5474] TestArithmeticSequence#test_last_with_float = 0.00 s 5316s [3395/5474] TestArithmeticSequence#test_step = 0.00 s 5316s [3396/5474] TestArithmeticSequence#test_to_a = 0.00 s 5316s [3397/5474] TestArithmeticSequence#test_eqq = 0.00 s 5316s [3398/5474] TestArithmeticSequence#test_eql_p = 0.00 s 5316s [3399/5474] TestArithmeticSequence#test_range_step_size = 0.00 s 5316s [3400/5474] TestArithmeticSequence#test_last_with_rational = 0.00 s 5316s [3401/5474] TestArithmeticSequence#test_slice = 0.00 s 5316s [3402/5474] TestArithmeticSequence#test_to_a_bug15444 = 0.00 s 5316s [3403/5474] TestArithmeticSequence#test_last = 0.00 s 5316s [3404/5474] TestArithmeticSequence#test_complex = 0.00 s 5316s [3405/5474] TestArithmeticSequence#test_next_values = 0.00 s 5316s [3406/5474] TestArithmeticSequence#test_next_bug15444 = 0.00 s 5316s [3407/5474] TestArithmeticSequence#test_new = 0.00 s 5316s [3408/5474] TestArithmeticSequence#test_next_rewind = 0.00 s 5316s [3409/5474] TestArithmeticSequence#test_sum = 0.00 s 5316s [3410/5474] TestArithmeticSequence#test_allocate = 0.00 s 5316s [3411/5474] Complex_Test#test_fixed_bug = 0.00 s 5316s [3412/5474] Complex_Test#test_marshal = 0.00 s 5316s [3413/5474] Complex_Test#test_math = 0.00 s 5316s [3414/5474] Complex_Test#test_sub = 0.00 s 5316s [3415/5474] Complex_Test#test_Complex_with_invalid_exception = 0.00 s 5316s [3416/5474] Complex_Test#test_quo = 0.00 s 5316s [3417/5474] Complex_Test#test_marshal_compatibility = 0.00 s 5316s [3418/5474] Complex_Test#test_freeze = 0.00 s 5316s [3419/5474] Complex_Test#test_rect = 0.00 s 5316s [3420/5474] Complex_Test#test_fdiv = 0.00 s 5316s [3421/5474] Complex_Test#test_attr = 0.00 s 5316s [3422/5474] Complex_Test#test_cmp = 0.00 s 5316s [3423/5474] Complex_Test#test_Complex_without_exception = 0.00 s 5316s [3424/5474] Complex_Test#test_compsub = 0.00 s 5316s [3425/5474] Complex_Test#test_hash = 0.00 s 5316s [3426/5474] Complex_Test#test_respond = 0.01 s 5316s [3427/5474] Complex_Test#test_to_r = 0.00 s 5316s [3428/5474] Complex_Test#test_expt = 0.00 s 5316s [3429/5474] Complex_Test#test_coerce = 0.00 s 5316s [3430/5474] Complex_Test#test_inspect = 0.00 s 5316s [3431/5474] Complex_Test#test_finite_p = 0.00 s 5316s [3432/5474] Complex_Test#test_parse = 0.01 s 5316s [3433/5474] Complex_Test#test_canonicalize_polar = 0.00 s 5319s [3434/5474] Complex_Test#test_sub_with_redefining_rational_minus = 2.47 s 5319s [3435/5474] Complex_Test#test_conv = 0.00 s 5319s [3436/5474] Complex_Test#test_to_f = 0.00 s 5321s [3437/5474] Complex_Test#test_sub_with_redefining_int_minus = 2.47 s 5324s [3438/5474] Complex_Test#test_polar = 2.48 s 5324s [3439/5474] Complex_Test#test_attr2 = 0.00 s 5324s [3440/5474] Complex_Test#test_rationalize = 0.00 s 5324s [3441/5474] Complex_Test#test_coerce2 = 0.00 s 5326s [3442/5474] Complex_Test#test_add_with_redefining_float_plus = 2.55 s 5326s [3443/5474] Complex_Test#test_to_c = 0.00 s 5329s [3444/5474] Complex_Test#test_add_with_redefining_int_plus = 2.21 s 5329s [3445/5474] Complex_Test#test_add = 0.00 s 5329s [3446/5474] Complex_Test#test_ruby19 = 0.00 s 5329s [3447/5474] Complex_Test#test_uplus = 0.00 s 5331s [3448/5474] Complex_Test#test_add_with_redefining_rational_plus = 2.40 s 5331s [3449/5474] Complex_Test#test_to_i = 0.00 s 5331s [3450/5474] Complex_Test#test_eql_p = 0.00 s 5331s [3451/5474] Complex_Test#test_canonicalize_internal = 0.00 s 5331s [3452/5474] Complex_Test#test_to_s = 0.00 s 5331s [3453/5474] Complex_Test#test_infinite_p = 0.00 s 5331s [3454/5474] Complex_Test#test_supp = 0.00 s 5334s [3455/5474] Complex_Test#test_mul_with_redefining_float_mult = 2.49 s 5336s [3456/5474] Complex_Test#test_mul_with_redefining_int_mult = 2.43 s 5336s [3457/5474] Complex_Test#test_negate = 0.00 s 5338s [3458/5474] Complex_Test#test_sub_with_redefining_float_minus = 2.33 s 5341s [3459/5474] Complex_Test#test_mul_with_redefining_rational_mult = 2.23 s 5341s [3460/5474] Complex_Test#test_eqeq = 0.00 s 5341s [3461/5474] Complex_Test#test_known_bug = 0.00 s 5341s [3462/5474] Complex_Test#test_mul = 0.00 s 5341s [3463/5474] Complex_Test#test_div = 0.00 s 5341s [3464/5474] TestEncodingConverter#test_s_new_convpath = 0.00 s 5341s [3465/5474] TestEncodingConverter#test_convert = 0.00 s 5341s [3466/5474] TestEncodingConverter#test_asciicompat_encoding_iso2022jp = 0.00 s 5341s [3467/5474] TestEncodingConverter#test_errinfo_invalid_euc_jp2 = 0.00 s 5341s [3468/5474] TestEncodingConverter#test_invalid_utf32le = 0.00 s 5341s [3469/5474] TestEncodingConverter#test_last_error2 = 0.00 s 5341s [3470/5474] TestEncodingConverter#test_no_universal_newline1 = 0.00 s 5341s [3471/5474] TestEncodingConverter#test_xml_escape_with_charref = 0.00 s 5341s [3472/5474] TestEncodingConverter#test_s_asciicompat_encoding = 0.00 s 5341s [3473/5474] TestEncodingConverter#test_errinfo_invalid_euc_jp = 0.00 s 5341s [3474/5474] TestEncodingConverter#test_invalid_utf16be = 0.00 s 5341s [3475/5474] TestEncodingConverter#test_econv_new_hash = 0.00 s 5341s [3476/5474] TestEncodingConverter#test_crlf_newline = 0.00 s 5341s [3477/5474] TestEncodingConverter#test_exc_incomplete = 0.00 s 5341s [3478/5474] TestEncodingConverter#test_invalid_ignore = 0.00 s 5341s [3479/5474] TestEncodingConverter#test_accumulate_dst1 = 0.00 s 5341s [3480/5474] TestEncodingConverter#test_xml_hasharg = 0.00 s 5341s [3481/5474] TestEncodingConverter#test_s_new_fail = 0.00 s 5341s [3482/5474] TestEncodingConverter#test_after_output = 0.00 s 5341s [3483/5474] TestEncodingConverter#test_invalid_utf32be = 0.00 s 5341s [3484/5474] TestEncodingConverter#test_undef_ignore = 0.00 s 5341s [3485/5474] TestEncodingConverter#test_nil_destination_bytesize = 0.00 s 5341s [3486/5474] TestEncodingConverter#test_invalid_replace2 = 0.00 s 5341s [3487/5474] TestEncodingConverter#test_invalid3 = 0.00 s 5341s [3488/5474] TestEncodingConverter#test_iso2022jp_encode = 0.00 s 5341s [3489/5474] TestEncodingConverter#test_xml_escape_attr_quote = 0.00 s 5341s [3490/5474] TestEncodingConverter#test_errinfo_valid_partial_character = 0.00 s 5341s [3491/5474] TestEncodingConverter#test_88591 = 0.00 s 5341s [3492/5474] TestEncodingConverter#test_eucjp_to_utf8 = 0.00 s 5341s [3493/5474] TestEncodingConverter#test_universal_newline3 = 0.00 s 5341s [3494/5474] TestEncodingConverter#test_universal_newline = 0.00 s 5341s [3495/5474] TestEncodingConverter#test_iso2022jp_invalid_replace = 0.00 s 5341s [3496/5474] TestEncodingConverter#test_iso2022jp = 0.00 s 5341s [3497/5474] TestEncodingConverter#test_undef_replace = 0.00 s 5341s [3498/5474] TestEncodingConverter#test_invalid_utf16le = 0.00 s 5341s [3499/5474] TestEncodingConverter#test_newline_converter_with_ascii_incompatible = 0.00 s 5341s [3500/5474] TestEncodingConverter#test_xml_escape_text = 0.00 s 5341s [3501/5474] TestEncodingConverter#test_invalid_replace = 0.00 s 5341s [3502/5474] TestEncodingConverter#test_putback2 = 0.00 s 5341s [3503/5474] TestEncodingConverter#test_get_encoding = 0.00 s 5341s [3504/5474] TestEncodingConverter#test_universal_newline2 = 0.00 s 5341s [3505/5474] TestEncodingConverter#test_result_encoding = 0.00 s 5341s [3506/5474] TestEncodingConverter#test_finish_incomplete_error = 0.00 s 5341s [3507/5474] TestEncodingConverter#test_cr_newline = 0.00 s 5341s [3508/5474] TestEncodingConverter#test_search_convpath = 0.00 s 5341s [3509/5474] TestEncodingConverter#test_partial_input = 0.00 s 5341s [3510/5474] TestEncodingConverter#test_putback = 0.00 s 5341s [3511/5474] TestEncodingConverter#test_convpath = 0.00 s 5341s [3512/5474] TestEncodingConverter#test_noconv = 0.00 s 5341s [3513/5474] TestEncodingConverter#test_nil_destination_bytesize_with_nonnil_byteoffset = 0.00 s 5341s [3514/5474] TestEncodingConverter#test_invalid2 = 0.00 s 5341s [3515/5474] TestEncodingConverter#test_noconv_insert_output = 0.00 s 5341s [3516/5474] TestEncodingConverter#test_crlf_newline2 = 0.00 s 5341s [3517/5474] TestEncodingConverter#test_finish_iso2022jp = 0.00 s 5341s [3518/5474] TestEncodingConverter#test_errinfo_invalid_utf16be = 0.00 s 5341s [3519/5474] TestEncodingConverter#test_nil_source_buffer = 0.00 s 5341s [3520/5474] TestEncodingConverter#test_invalid4 = 0.00 s 5341s [3521/5474] TestEncodingConverter#test_s_new = 0.00 s 5341s [3522/5474] TestEncodingConverter#test_noconv_partial = 0.00 s 5341s [3523/5474] TestEncodingConverter#test_errors2 = 0.00 s 5341s [3524/5474] TestEncodingConverter#test_exc_invalid = 0.00 s 5341s [3525/5474] TestEncodingConverter#test_cr_newline2 = 0.00 s 5341s [3526/5474] TestEncodingConverter#test_iso2022jp_decode = 0.00 s 5341s [3527/5474] TestEncodingConverter#test_errors = 0.00 s 5341s [3528/5474] TestEncodingConverter#test_errinfo_invalid_partial_character = 0.00 s 5341s [3529/5474] TestEncodingConverter#test_hex_charref = 0.00 s 5341s [3530/5474] TestEncodingConverter#test_us_ascii = 0.00 s 5341s [3531/5474] TestEncodingConverter#test_output_iso2022jp = 0.00 s 5341s [3532/5474] TestEncodingConverter#test_get_replacement = 0.00 s 5341s [3533/5474] TestEncodingConverter#test_nil_destination_bytesize2 = 0.00 s 5341s [3534/5474] TestEncodingConverter#test_xml_escape_attr_content = 0.00 s 5341s [3535/5474] TestEncodingConverter#test_set_replacement = 0.00 s 5341s [3536/5474] TestEncodingConverter#test_accumulate_dst2 = 0.00 s 5341s [3537/5474] TestEncodingConverter#test_errinfo_undefined_hiragana = 0.00 s 5341s [3538/5474] TestEncodingConverter#test_output_region = 0.00 s 5341s [3539/5474] TestEncodingConverter#test_exc_undef = 0.00 s 5341s [3540/5474] TestEncodingConverter#test_invalid = 0.00 s 5341s [3541/5474] TestEncodingConverter#test_errinfo_invalid_utf16le = 0.00 s 5341s [3542/5474] TestEncodingConverter#test_noconv_after_output = 0.00 s 5341s [3543/5474] TestEncodingConverter#test_no_universal_newline2 = 0.00 s 5341s [3544/5474] TestEncodingConverter#test_last_error1 = 0.00 s 5341s [3545/5474] ComplexRational_Test#test_rat_srat = 0.03 s 5341s [3546/5474] ComplexRational_Test#test_comp_srat = 0.01 s 5341s [3547/5474] TestAssignmentGen#test_optimized_aset = 0.00 s 5341s [3548/5474] TestAssignmentGen#test_massign_aref_lhs_splat = 0.00 s 5341s [3549/5474] TestFnmatch#test_char_class = 0.01 s 5341s [3550/5474] TestFnmatch#test_text = 0.00 s 5341s [3551/5474] TestFnmatch#test_recursive = 0.02 s 5341s [3552/5474] TestFnmatch#test_fnm_dotmatch = 0.01 s 5341s [3553/5474] TestFnmatch#test_unmatched_encoding = 0.01 s 5341s [3554/5474] TestFnmatch#test_fnm_casefold = 0.01 s 5341s [3555/5474] TestFnmatch#test_any_one = 0.01 s 5341s [3556/5474] TestFnmatch#test_extglob = 0.01 s 5341s [3557/5474] TestFnmatch#test_fnm_pathname = 0.01 s 5341s [3558/5474] TestFnmatch#test_unicode = 0.00 s 5341s [3559/5474] TestFnmatch#test_any_chars = 0.01 s 5341s [3560/5474] TestFnmatch#test_fnmatch = 0.01 s 5341s [3561/5474] TestFnmatch#test_escape = 0.01 s 5341s [3562/5474] TestFnmatch#test_fnm_escape = 0.01 s 5341s [3563/5474] TestFnmatch#test_nullchar = 0.00 s 5341s [3564/5474] TestWhileuntil#test_until = 0.00 s 5341s [3565/5474] TestWhileuntil#test_while = 0.01 s 5341s [3566/5474] TestMath#test_exp = 0.00 s 5341s [3567/5474] TestMath#test_sinh = 0.00 s 5341s [3568/5474] TestMath#test_bignum_to_f = 0.00 s 5341s [3569/5474] TestMath#test_asin = 0.00 s 5341s [3570/5474] TestMath#test_erfc = 0.00 s 5341s [3571/5474] TestMath#test_acos = 0.00 s 5341s [3572/5474] TestMath#test_cosh = 0.00 s 5341s [3573/5474] TestMath#test_atan2 = 0.00 s 5341s [3574/5474] TestMath#test_frexp = 0.00 s 5341s [3575/5474] TestMath#test_cbrt = 0.00 s 5341s [3576/5474] TestMath#test_override_rational_to_f = 0.00 s 5341s [3577/5474] TestMath#test_hypot = 0.00 s 5341s [3578/5474] TestMath#test_override_integer_to_f = 0.00 s 5341s [3579/5474] TestMath#test_tanh = 0.00 s 5341s [3580/5474] TestMath#test_tan = 0.00 s 5341s [3581/5474] TestMath#test_override_bignum_to_f = 0.00 s 5341s [3582/5474] TestMath#test_cos = 0.00 s 5341s [3583/5474] TestMath#test_ldexp = 0.00 s 5341s [3584/5474] TestMath#test_fixnum_to_f = 0.00 s 5341s [3585/5474] TestMath#test_sqrt = 0.00 s 5341s [3586/5474] TestMath#test_asinh = 0.00 s 5341s [3587/5474] TestMath#test_acosh = 0.00 s 5341s [3588/5474] TestMath#test_log2 = 0.00 s 5341s [3589/5474] TestMath#test_log10 = 0.00 s 5341s [3590/5474] TestMath#test_sin = 0.00 s 5341s [3591/5474] TestMath#test_erf = 0.00 s 5341s [3592/5474] TestMath#test_atan = 0.00 s 5341s [3593/5474] TestMath#test_lgamma = 0.00 s 5341s [3594/5474] TestMath#test_gamma = 0.01 s 5341s [3595/5474] TestMath#test_log = 0.00 s 5341s [3596/5474] TestMath#test_atanh = 0.00 s 5341s [3597/5474] TestMath#test_rational_to_f = 0.00 s 5341s [3598/5474] TestFile#test_realpath_special_symlink = 0.00 s 5341s [3599/5474] TestFile#test_uninitialized = 0.00 s 5344s [3600/5474] TestFile#test_utime_with_minus_time_segv = 2.80 s 5344s [3601/5474] TestFile#test_realpath = 0.00 s 5344s [3602/5474] TestFile#test_chown = 0.00 s 5344s [3603/5474] TestFile#test_getc_extended_file = 0.00 s 5344s [3604/5474] TestFile#test_absolute_path? = 0.00 s 5344s [3605/5474] TestFile#test_eof_0_seek = 0.00 s 5344s [3606/5474] TestFile#test_truncate_beyond_eof = 0.00 s 5344s [3607/5474] TestFile#test_truncate_size = 0.02 s 5344s [3608/5474] TestFile#test_gets_extended_file = 0.01 s 5344s [3609/5474] TestFile#test_getbyte_extended_file = 0.01 s 5344s [3610/5474] TestFile#test_eof_3 = 0.00 s 5344s [3611/5474] TestFile#test_s_chown = 0.00 s 5344s [3612/5474] TestFile#test_eof_1 = 0.00 s 5344s [3613/5474] TestFile#test_file_share_delete = 0.00 s 5344s [3614/5474] TestFile#test_stat_inode = 0.00 s 5344s [3615/5474] TestFile#test_each_byte_extended_file = 0.01 s 5344s [3616/5474] TestFile#test_eof_1_seek = 0.00 s 5344s [3617/5474] TestFile#test_bom_32be = 0.01 s 5344s [3618/5474] TestFile#test_read_all_extended_file = 0.01 s 5344s [3619/5474] TestFile#test_eof_0 = 0.00 s 5344s [3620/5474] TestFile#test_eof_2 = 0.00 s 5344s [3621/5474] TestFile#test_bom_8 = 0.01 s 5344s [3622/5474] TestFile#test_bom_16le = 0.00 s 5344s [3623/5474] TestFile#test_file_open_permissions = 0.00 s 5344s [3624/5474] TestFile#test_file_open_double_mode = 0.00 s 5344s [3625/5474] TestFile#test_conflicting_encodings = 0.00 s 5344s [3626/5474] TestFile#test_gets_para_extended_file = 0.01 s 5344s [3627/5474] TestFile#test_unlink_before_close = 0.00 s 5344s [3628/5474] TestFile#test_chmod_m17n = 0.00 s 5344s [3629/5474] TestFile#test_open_tempfile_path = 0.00 s 5344s [3630/5474] TestFile#test_bom_32le = 0.00 s 5344s [3631/5474] TestFile#test_open_nul = 0.00 s 5344s [3632/5474] TestFile#test_realpath_encoding = 0.01 s 5344s [3633/5474] TestFile#test_truncate_rbuf = 0.00 s 5344s [3634/5474] TestFile#test_eof_0_rw = 0.00 s 5344s [3635/5474] TestFile#test_each_char_extended_file = 0.01 s 5344s [3636/5474] TestFile#test_utime = 0.00 s 5344s [3637/5474] TestFile#test_bom_16be = 0.00 s 5344s [3638/5474] TestFile#test_truncate_wbuf = 0.00 s 5344s [3639/5474] TestFile#test_empty_file_bom = 0.00 s 5344s [3640/5474] TestFile#test_realdirpath = 0.00 s 5344s [3641/5474] TestPatternMatching#test_constant_value_pattern = 0.00 s 5344s [3642/5474] TestPatternMatching#test_basic = 0.01 s 5344s [3643/5474] TestPatternMatching#test_pin_operator_expr_pattern = 0.00 s 5344s [3644/5474] TestPatternMatching#test_experimental_warning = 0.01 s 5344s [3645/5474] TestPatternMatching#test_deconstruct_cache = 0.01 s 5344s [3646/5474] TestPatternMatching#test_deconstruct_keys = 0.00 s 5344s [3647/5474] TestPatternMatching#test_invalid_syntax = 0.00 s 5344s [3648/5474] TestPatternMatching#test_nomatchingpatternerror = 0.00 s 5344s [3649/5474] TestPatternMatching#test_alternative_pattern = 0.01 s 5344s [3650/5474] TestPatternMatching#test_deconstruct = 0.00 s 5344s [3651/5474] TestPatternMatching#test_pin_operator_value_pattern = 0.00 s 5344s [3652/5474] TestPatternMatching#test_struct = 0.00 s 5344s [3653/5474] TestPatternMatching#test_literal_value_pattern = 0.01 s 5344s [3654/5474] TestPatternMatching#test_as_pattern = 0.00 s 5344s [3655/5474] TestPatternMatching#test_one_line = 0.00 s 5344s [3656/5474] TestPatternMatching#test_modifier = 0.00 s 5344s [3657/5474] TestPatternMatching#test_array_pattern = 0.04 s 5344s [3658/5474] TestPatternMatching#test_paren = 0.00 s 5344s [3659/5474] TestRubyLiteral#test_dstring_encoding = 0.00 s 5348s [3660/5474] TestRubyLiteral#test_dsymbol_redefined_intern = 3.50 s 5353s [3661/5474] TestRubyLiteral#test_float = 5.86 s 5353s [3662/5474] TestRubyLiteral#test_special_const = 0.00 s 5353s [3663/5474] TestRubyLiteral#test_regexp = 0.00 s 5353s [3664/5474] TestRubyLiteral#test_hash_frozen_key_id = 0.00 s 5353s [3665/5474] TestRubyLiteral#test_hash = 0.00 s 5353s [3666/5474] TestRubyLiteral#test_self = 0.00 s 5353s [3667/5474] TestRubyLiteral#test_frozen_string = 0.00 s 5353s [3668/5474] TestRubyLiteral#test_array = 0.00 s 5353s [3669/5474] TestRubyLiteral#test_hash_value_omission = 0.00 s 5353s [3670/5474] TestRubyLiteral#test_dsymbol = 0.00 s 5353s [3671/5474] TestRubyLiteral#test_dregexp = 0.00 s 5357s [3672/5474] TestRubyLiteral#test_big_hash_literal = 3.53 s 5357s [3673/5474] TestRubyLiteral#test_hash_key_tampering = 0.00 s 5357s [3674/5474] TestRubyLiteral#test_range = 0.00 s 5357s [3675/5474] TestRubyLiteral#test_xstring = 0.00 s 5357s [3676/5474] TestRubyLiteral#test_frozen_string_in_array_literal = 0.00 s 5357s [3677/5474] TestRubyLiteral#test__LINE__ = 0.00 s 5357s [3678/5474] TestRubyLiteral#test__FILE__ = 0.00 s 5357s [3679/5474] TestRubyLiteral#test_dstring = 0.00 s 5366s [3680/5474] TestRubyLiteral#test_big_array_and_hash_literal = 9.13 s 5368s [3681/5474] TestRange#test_range_bsearch_for_floats = 1.68 s 5368s [3682/5474] TestRange#test_marshal = 0.00 s 5368s [3683/5474] TestRange#test_first_last = 0.00 s 5368s [3684/5474] TestRange#test_bsearch_for_float = 0.03 s 5368s [3685/5474] TestRange#test_range_string = 0.00 s 5368s [3686/5474] TestRange#test_each_no_blockarg = 0.00 s 5368s [3687/5474] TestRange#test_hash = 0.00 s 5368s [3688/5474] TestRange#test_cover = 0.02 s 5368s [3689/5474] TestRange#test_eql = 0.00 s 5368s [3690/5474] TestRange#test_duckrange = 0.00 s 5368s [3691/5474] TestRange#test_range_symbol = 0.00 s 5368s [3692/5474] TestRange#test_minmax = 0.00 s 5368s [3693/5474] TestRange#test_min = 0.00 s 5368s [3694/5474] TestRange#test_inspect = 0.00 s 5368s [3695/5474] TestRange#test_eq = 0.00 s 5368s [3696/5474] TestRange#test_bsearch_typechecks_return_values = 0.01 s 5368s [3697/5474] TestRange#test_range_numeric_string = 0.01 s 5368s [3698/5474] TestRange#test_eqq_non_linear = 0.00 s 5368s [3699/5474] TestRange#test_count = 0.00 s 5368s [3700/5474] TestRange#test_eqq_time = 0.00 s 5368s [3701/5474] TestRange#test_cyclic_range_inspect = 0.00 s 5368s [3702/5474] TestRange#test_beg_len = 0.00 s 5368s [3703/5474] TestRange#test_begin_end = 0.00 s 5368s [3704/5474] TestRange#test_eqq_non_iteratable = 0.00 s 5368s [3705/5474] TestRange#test_bsearch_with_no_block = 0.00 s 5368s [3706/5474] TestRange#test_step_bug15537 = 0.00 s 5368s [3707/5474] TestRange#test_step_ruby_core_35753 = 0.00 s 5368s [3708/5474] TestRange#test_step = 0.02 s 5368s [3709/5474] TestRange#test_eqq_string = 0.00 s 5368s [3710/5474] TestRange#test_to_a = 0.00 s 5368s [3711/5474] TestRange#test_eqq = 0.00 s 5368s [3712/5474] TestRange#test_bad_value = 0.00 s 5368s [3713/5474] TestRange#test_initialize_twice = 0.00 s 5368s [3714/5474] TestRange#test_percent_step = 0.00 s 5368s [3715/5474] TestRange#test_exclude_end = 0.00 s 5368s [3716/5474] TestRange#test_evaluation_order = 0.00 s 5368s [3717/5474] TestRange#test_to_s = 0.00 s 5370s [3718/5474] TestRange#test_last_with_redefine_each = 2.28 s 5370s [3719/5474] TestRange#test_max = 0.00 s 5370s [3720/5474] TestRange#test_each = 0.01 s 5370s [3721/5474] TestRange#test_size = 0.00 s 5370s [3722/5474] TestRange#test_bsearch_for_fixnum = 0.02 s 5370s [3723/5474] TestRange#test_beginless_range_iteration = 0.00 s 5370s [3724/5474] TestRange#test_new = 0.01 s 5370s [3725/5474] TestRange#test_frozen_initialize = 0.00 s 5370s [3726/5474] TestRange#test_bsearch_for_bignum = 0.02 s 5370s [3727/5474] TestRange#test_include = 0.00 s 5370s [3728/5474] TestEncoding#test_enc_names = 0.01 s 5370s [3729/5474] TestEncoding#test_marshal = 0.00 s 5370s [3730/5474] TestEncoding#test_ascii_compatible_p = 0.00 s 5374s [3731/5474] TestEncoding#test_nonascii_library_path = 3.75 s 5374s [3732/5474] TestEncoding#test_name_list = 0.00 s 5374s [3733/5474] TestEncoding#test_compatible_p = 0.00 s 5374s [3734/5474] TestEncoding#test_encoding = 0.00 s 5374s [3735/5474] TestEncoding#test_singleton = 0.05 s 5377s [3736/5474] TestEncoding#test_errinfo_after_autoload = 3.35 s 5377s [3737/5474] TestEncoding#test_dummy_p = 0.00 s 5377s [3738/5474] TestEncoding#test_aliases = 0.02 s 5381s [3739/5474] TestEncoding#test_find = 3.66 s 5381s [3740/5474] TestEnumerable#test_cycle = 0.01 s 5385s [3741/5474] TestEnumerable#test_inject_op_private = 3.58 s 5385s [3742/5474] TestEnumerable#test_each_with_object = 0.00 s 5385s [3743/5474] TestEnumerable#test_each_cons = 0.00 s 5385s [3744/5474] TestEnumerable#test_grep_v = 0.00 s 5385s [3745/5474] TestEnumerable#test_member = 0.00 s 5385s [3746/5474] TestEnumerable#test_grep = 0.00 s 5385s [3747/5474] TestEnumerable#test_zip = 0.01 s 5395s [3748/5474] TestEnumerable#test_any_with_unused_block = 9.82 s 5395s [3749/5474] TestEnumerable#test_drop_while = 0.00 s 5404s [3750/5474] TestEnumerable#test_none_with_unused_block = 9.24 s 5404s [3751/5474] TestEnumerable#test_all = 0.00 s 5404s [3752/5474] TestEnumerable#test_take_while = 0.00 s 5404s [3753/5474] TestEnumerable#test_uniq = 0.01 s 5404s [3754/5474] TestEnumerable#test_find_index = 0.00 s 5404s [3755/5474] TestEnumerable#test_find_all = 0.00 s 5404s [3756/5474] TestEnumerable#test_inject = 0.00 s 5404s [3757/5474] TestEnumerable#test_to_h_block = 0.00 s 5404s [3758/5474] TestEnumerable#test_each_slice = 0.00 s 5404s [3759/5474] TestEnumerable#test_drop = 0.00 s 5404s [3760/5474] TestEnumerable#test_chunk_while_contiguously_increasing_integers = 0.00 s 5404s [3761/5474] TestEnumerable#test_hash_sum = 0.00 s 5404s [3762/5474] TestEnumerable#test_minmax = 0.00 s 5407s [3763/5474] TestEnumerable#test_inject_array_op_private = 3.67 s 5407s [3764/5474] TestEnumerable#test_min = 0.01 s 5407s [3765/5474] TestEnumerable#test_to_a_size_symbol = 0.00 s 5407s [3766/5474] TestEnumerable#test_filter_map = 0.00 s 5407s [3767/5474] TestEnumerable#test_sort_by = 0.00 s 5408s [3768/5474] TestEnumerable#test_count = 0.01 s 5408s [3769/5474] TestEnumerable#test_slice_before_empty_line = 0.00 s 5408s [3770/5474] TestEnumerable#test_slice_when_3 = 0.01 s 5408s [3771/5474] TestEnumerable#test_one = 0.01 s 5408s [3772/5474] TestEnumerable#test_transient_heap_sort_by = 0.00 s 5408s [3773/5474] TestEnumerable#test_slice_when_1 = 0.00 s 5408s [3774/5474] TestEnumerable#test_to_h = 0.00 s 5408s [3775/5474] TestEnumerable#test_slice_before = 0.01 s 5408s [3776/5474] TestEnumerable#test_each_entry = 0.00 s 5408s [3777/5474] TestEnumerable#test_slice_after0 = 0.00 s 5408s [3778/5474] TestEnumerable#test_grep_optimization = 0.00 s 5408s [3779/5474] TestEnumerable#test_sort = 0.00 s 5408s [3780/5474] TestEnumerable#test_slice_when_0 = 0.00 s 5408s [3781/5474] TestEnumerable#test_slice_when_2 = 0.00 s 5408s [3782/5474] TestEnumerable#test_flat_map = 0.01 s 5408s [3783/5474] TestEnumerable#test_to_a = 0.00 s 5408s [3784/5474] TestEnumerable#test_slice_after1 = 0.00 s 5408s [3785/5474] TestEnumerable#test_tally = 0.00 s 5408s [3786/5474] TestEnumerable#test_slice_when_contiguously_increasing_integers = 0.00 s 5408s [3787/5474] TestEnumerable#test_to_a_size_infinity = 0.00 s 5411s [3788/5474] TestEnumerable#test_reverse_each_memory_corruption = 3.34 s 5411s [3789/5474] TestEnumerable#test_group_by = 0.00 s 5421s [3790/5474] TestEnumerable#test_one_with_unused_block = 9.98 s 5421s [3791/5474] TestEnumerable#test_compact = 0.00 s 5421s [3792/5474] TestEnumerable#test_find = 0.00 s 5421s [3793/5474] TestEnumerable#test_inject_array_plus = 0.00 s 5421s [3794/5474] TestEnumerable#test_to_a_keywords = 0.00 s 5421s [3795/5474] TestEnumerable#test_any = 0.00 s 5430s [3796/5474] TestEnumerable#test_all_with_unused_block = 9.48 s 5434s [3797/5474] TestEnumerable#test_inject_op_redefined = 3.78 s 5434s [3798/5474] TestEnumerable#test_detect = 0.01 s 5434s [3799/5474] TestEnumerable#test_max = 0.00 s 5434s [3800/5474] TestEnumerable#test_range_sum = 0.00 s 5434s [3801/5474] TestEnumerable#test_slice_after_continuation_lines = 0.00 s 5434s [3802/5474] TestEnumerable#test_chunk = 0.01 s 5434s [3803/5474] TestEnumerable#test_map = 0.01 s 5434s [3804/5474] TestEnumerable#test_min_by = 0.01 s 5438s [3805/5474] TestEnumerable#test_refine_Enumerable_then_include = 3.59 s 5438s [3806/5474] TestEnumerable#test_none = 0.00 s 5438s [3807/5474] TestEnumerable#test_inject_array_mul = 0.00 s 5438s [3808/5474] TestEnumerable#test_each_with_index = 0.01 s 5438s [3809/5474] TestEnumerable#test_reverse_each = 0.00 s 5443s [3810/5474] TestEnumerable#test_inject_array_op_redefined = 3.38 s 5443s [3811/5474] TestEnumerable#test_slice_when_noblock = 0.00 s 5443s [3812/5474] TestEnumerable#test_partition = 0.00 s 5443s [3813/5474] TestEnumerable#test_slice_after_both_pattern_and_block = 0.00 s 5443s [3814/5474] TestEnumerable#test_reject = 0.00 s 5443s [3815/5474] TestEnumerable#test_take = 0.00 s 5443s [3816/5474] TestEnumerable#test_select = 0.01 s 5443s [3817/5474] TestEnumerable#test_max_by = 0.01 s 5443s [3818/5474] TestEnumerable#test_sum = 0.01 s 5443s [3819/5474] TestEnumerable#test_minmax_by = 0.00 s 5443s [3820/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_inside_lambda_outside_method = 0.00 s 5443s [3821/5474] TestLambdaParameters#test_not_orphan_return = 0.00 s 5443s [3822/5474] TestLambdaParameters#test_lambda_as_iterator = 0.00 s 5443s [3823/5474] TestLambdaParameters#test_instance_exec_return = 0.00 s 5443s [3824/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_outside_lambda_outside_method = 0.00 s 5443s [3825/5474] TestLambdaParameters#test_call_rest_args = 0.00 s 5443s [3826/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_outside_lambda_inside_method = 0.00 s 5443s [3827/5474] TestLambdaParameters#test_in_basic_object = 0.00 s 5443s [3828/5474] TestLambdaParameters#test_break = 0.00 s 5443s [3829/5474] TestLambdaParameters#test_call_simple = 0.00 s 5443s [3830/5474] TestLambdaParameters#test_proc_inside_lambda2_inside_method_return_outside_lambda1_inside_method = 0.00 s 5443s [3831/5474] TestLambdaParameters#test_call_opt_args = 0.00 s 5443s [3832/5474] TestLambdaParameters#test_instance_eval_return = 0.00 s 5443s [3833/5474] TestLambdaParameters#test_not_orphan_next = 0.00 s 5443s [3834/5474] TestLambdaParameters#test_instance_exec = 0.00 s 5443s [3835/5474] TestLambdaParameters#test_proc_inside_lambda_inside_method_return_inside_lambda_inside_method = 0.00 s 5443s [3836/5474] TestLambdaParameters#test_arity_error = 0.00 s 5443s [3837/5474] TestLambdaParameters#test_call_rest_and_opt = 0.00 s 5445s [3838/5474] TestLambdaParameters#test_proc_inside_lambda_toplevel = 3.49 s 5445s [3839/5474] TestLambdaParameters#test_not_orphan_break = 0.00 s 5445s [3840/5474] TestLambdaParameters#test_call_with_block = 0.00 s 5445s [3841/5474] TestLambdaParameters#test_exact_parameter = 0.00 s 5445s [3842/5474] TestLambdaParameters#test_return = 0.00 s 5445s [3843/5474] TestLambdaParameters#test_call_block_from_lambda = 0.00 s 5445s [3844/5474] TestWeakMap#test_frozen_object = 0.00 s 5445s [3845/5474] TestWeakMap#test_member? = 0.00 s 5445s [3846/5474] TestWeakMap#test_key? = 0.00 s 5445s [3847/5474] TestWeakMap#test_inspect = 0.00 s 5445s [3848/5474] TestWeakMap#test_each_value = 0.00 s 5445s [3849/5474] TestWeakMap#test_each_key = 0.00 s 5445s [3850/5474] TestWeakMap#test_aset_const = 0.00 s 5445s [3851/5474] TestWeakMap#test_length = 0.00 s 5445s [3852/5474] TestWeakMap#test_each = 0.00 s 5445s [3853/5474] TestWeakMap#test_map = 0.00 s 5445s [3854/5474] TestWeakMap#test_size = 0.00 s 5445s [3855/5474] TestWeakMap#test_inspect_garbage = 0.18 s 5445s [3856/5474] TestWeakMap#test_include? = 0.00 s 5445s [3857/5474] TestDir#test_glob_recursive_directory = 0.03 s 5445s [3858/5474] TestDir#test_symlink = 0.03 s 5445s [3859/5474] TestDir#test_glob_order = 0.01 s 5445s [3860/5474] TestDir#test_set_pos = 0.02 s 5445s [3861/5474] TestDir#test_children = 0.02 s 5445s [3862/5474] TestDir#test_glob_metachar = 0.01 s 5445s [3863/5474] TestDir#test_empty? = 0.03 s 5445s [3864/5474] TestDir#test_glob_array_with_destructive_element = 0.03 s 5445s [3865/5474] TestDir#test_symlinks_not_resolved = 0.01 s 5445s [3866/5474] TestDir#test_inspect = 0.01 s 5445s [3867/5474] TestDir#test_nodir = 0.02 s 5445s [3868/5474] TestDir#test_foreach = 0.01 s 5445s [3869/5474] TestDir#test_chroot_nodir = 0.01 s 5445s [3870/5474] TestDir#test_glob_recursive = 0.02 s 5445s [3871/5474] TestDir#test_unknown_keywords = 0.01 s 5445s [3872/5474] TestDir#test_close = 0.01 s 5445s [3873/5474] TestDir#test_glob_base_dir = 0.02 s 5445s [3874/5474] TestDir#test_each_child = 0.02 s 5445s [3875/5474] TestDir#test_glob_super_root = 0.01 s 5445s [3876/5474] TestDir#test_glob_base = 0.03 s 5445s [3877/5474] TestDir#test_glob_cases = 0.02 s 5445s [3878/5474] TestDir#test_glob_starts_with_brace = 0.01 s 5445s [3879/5474] TestDir#test_fileno = 0.01 s 5445s [3880/5474] TestDir#test_seek = 0.02 s 5445s [3881/5474] TestDir#test_dir_enc = 0.01 s 5445s [3882/5474] TestDir#test_rewind = 0.01 s 5445s [3883/5474] TestDir#test_entries = 0.01 s 5445s [3884/5474] TestDir#test_path = 0.01 s 5445s [3885/5474] TestTime#test_marshal_broken_month = 0.00 s 5445s [3886/5474] TestTime#test_sec_str = 0.00 s 5445s [3887/5474] TestTime#test_marshal_zone = 0.00 s 5445s [3888/5474] TestTime#test_utc_subsecond = 0.00 s 5445s [3889/5474] TestTime#test_minus = 0.00 s 5445s [3890/5474] TestTime#test_strftime_zone = 0.00 s 5445s [3891/5474] TestTime#test_marshal_to_s = 0.00 s 5445s [3892/5474] TestTime#test_time_interval = 0.00 s 5445s [3893/5474] TestTime#test_strftime_sec = 0.00 s 5445s [3894/5474] TestTime#test_cmp = 0.00 s 5445s [3895/5474] TestTime#test_hash = 0.00 s 5445s [3896/5474] TestTime#test_at_with_unit = 0.00 s 5445s [3897/5474] TestTime#test_plus_minus = 0.00 s 5445s [3898/5474] TestTime#test_eql = 0.00 s 5445s [3899/5474] TestTime#test_1970 = 0.00 s 5445s [3900/5474] TestTime#test_marshal_broken_zone = 0.00 s 5445s [3901/5474] TestTime#test_marshal_nsec = 0.00 s 5445s [3902/5474] TestTime#test_to_r = 0.00 s 5445s [3903/5474] TestTime#test_readers = 0.00 s 5445s [3904/5474] TestTime#test_time_subt = 0.00 s 5445s [3905/5474] TestTime#test_memsize = 0.00 s 5445s [3906/5474] TestTime#test_strftime_subsec = 0.00 s 5445s [3907/5474] TestTime#test_time_time = 0.00 s 5445s [3908/5474] TestTime#test_getlocal_utc_offset = 0.00 s 5445s [3909/5474] TestTime#test_marshal_timezone = 0.00 s 5445s [3910/5474] TestTime#test_to_f = 0.00 s 5445s [3911/5474] TestTime#test_floor = 0.00 s 5445s [3912/5474] TestTime#test_strftime_too_wide = 0.00 s 5445s [3913/5474] TestTime#test_at3 = 0.00 s 5445s [3914/5474] TestTime#test_strftime_weekflags = 0.00 s 5446s [3915/5474] TestTime#test_at_splat = 0.00 s 5446s [3916/5474] TestTime#test_strftime_far_future = 0.00 s 5446s [3917/5474] TestTime#test_1901 = 0.00 s 5446s [3918/5474] TestTime#test_strftime_invalid_modifier = 0.00 s 5446s [3919/5474] TestTime#test_eq_nsec = 0.00 s 5446s [3920/5474] TestTime#test_strftime_padding = 0.00 s 5446s [3921/5474] TestTime#test_at_rational = 0.00 s 5446s [3922/5474] TestTime#test_at2 = 0.00 s 5446s [3923/5474] TestTime#test_ceil = 0.00 s 5446s [3924/5474] TestTime#test_strftime_weeknum = 0.00 s 5446s [3925/5474] TestTime#test_asctime = 0.00 s 5446s [3926/5474] TestTime#test_utc_p = 0.00 s 5446s [3927/5474] TestTime#test_strtime = 0.00 s 5446s [3928/5474] TestTime#test_to_s = 0.00 s 5446s [3929/5474] TestTime#test_getlocal_dont_share_eigenclass = 0.00 s 5446s [3930/5474] TestTime#test_getlocal_nil = 0.00 s 5446s [3931/5474] TestTime#test_strftime_yearday_on_last_day_of_year = 0.00 s 5449s [3932/5474] TestTime#test_marshal_zone_gc = 3.54 s 5449s [3933/5474] TestTime#test_round = 0.01 s 5449s [3934/5474] TestTime#test_delegate = 0.00 s 5449s [3935/5474] TestTime#test_localtime_gmtime = 0.00 s 5449s [3936/5474] TestTime#test_init_copy = 0.00 s 5449s [3937/5474] TestTime#test_strftime_ctrlchar = 0.00 s 5449s [3938/5474] TestTime#test_huge_difference = 0.00 s 5449s [3939/5474] TestTime#test_time_add = 0.00 s 5449s [3940/5474] TestTime#test_marshal_ivar = 0.00 s 5449s [3941/5474] TestTime#test_to_f_accuracy = 0.00 s 5449s [3942/5474] TestTime#test_big_minus = 0.00 s 5449s [3943/5474] TestTime#test_timegm = 0.00 s 5449s [3944/5474] TestTime#test_marshal_broken_offset = 0.00 s 5449s [3945/5474] TestTime#test_marshal_rational = 0.00 s 5449s [3946/5474] TestUndef#test_undef = 0.00 s 5449s [3947/5474] TestUndef#test_singleton_undef = 0.00 s 5449s [3948/5474] TestNot#test_not_with_empty_grouped_expression = 0.00 s 5449s [3949/5474] TestNot#test_not_with_grouped_expression = 0.00 s 5449s [3950/5474] TestThreadConditionVariable#test_condvar_nolock_2 = 0.00 s 5449s [3951/5474] TestThreadConditionVariable#test_initialized = 0.00 s 5449s [3952/5474] TestThreadConditionVariable#test_condvar_wait_and_broadcast = 0.11 s 5449s [3953/5474] TestThreadConditionVariable#test_dup = 0.00 s 5449s [3954/5474] TestThreadConditionVariable#test_condvar_signal_and_wait = 0.00 s 5449s [3955/5474] TestThreadConditionVariable#test_condvar_wait_deadlock_2 = 0.11 s 5449s [3956/5474] TestThreadConditionVariable#test_condvar_empty_broadcast = 0.00 s 5449s [3957/5474] TestThreadConditionVariable#test_condvar_empty_signal = 0.00 s 5449s [3958/5474] TestThreadConditionVariable#test_condvar_wait_exception_handling = 0.00 s 5449s [3959/5474] TestThreadConditionVariable#test_condvar_nolock_3 = 0.00 s 5449s [3960/5474] TestThreadConditionVariable#test_condvar_nolock = 0.00 s 5449s [3961/5474] TestHash::TestSubHash#test_recursive_hash_value_array = 0.00 s 5449s [3962/5474] TestHash::TestSubHash#test_dig_with_respond_to = 0.00 s 5449s [3963/5474] TestHash::TestSubHash#test_s_AREF_frozen_key_id = 0.00 s 5449s [3964/5474] TestHash::TestSubHash#test_reject_on_identhash = 0.00 s 5449s [3965/5474] TestHash::TestSubHash#test_initialize_wrong_arguments = 0.00 s 5449s [3966/5474] TestHash::TestSubHash#test_clear_initialize_copy = 0.00 s 5449s [3967/5474] TestHash::TestSubHash#test_except_on_identhash = 0.00 s 5449s [3968/5474] TestHash::TestSubHash#test_dup_equality = 0.00 s 5449s [3969/5474] TestHash::TestSubHash#test_rehash = 0.00 s 5449s [3970/5474] TestHash::TestSubHash#test_update = 0.00 s 5449s [3971/5474] TestHash::TestSubHash#test_member? = 0.00 s 5449s [3972/5474] TestHash::TestSubHash#test_rehash2 = 0.00 s 5449s [3973/5474] TestHash::TestSubHash#test_to_h_default_proc = 0.00 s 5449s [3974/5474] TestHash::TestSubHash#test_inverse_hash = 0.00 s 5449s [3975/5474] TestHash::TestSubHash#test_each_pair = 0.00 s 5449s [3976/5474] TestHash::TestSubHash#test_threaded_iter_level = 0.00 s 5449s [3977/5474] TestHash::TestSubHash#test_empty? = 0.00 s 5449s [3978/5474] TestHash::TestSubHash#test_select_on_identhash = 0.00 s 5449s [3979/5474] TestHash::TestSubHash#test_fetch2 = 0.00 s 5449s [3980/5474] TestHash::TestSubHash#test_cmp = 0.00 s 5449s [3981/5474] TestHash::TestSubHash#test_update2 = 0.00 s 5449s [3982/5474] TestHash::TestSubHash#test_dig = 0.00 s 5449s [3983/5474] TestHash::TestSubHash#test_slice_on_identhash = 0.00 s 5449s [3984/5474] TestHash::TestSubHash#test_flatten_arity = 0.00 s 5449s [3985/5474] TestHash::TestSubHash#test_bad_initialize_copy = 0.00 s 5449s [3986/5474] TestHash::TestSubHash#test_hash = 0.00 s 5449s [3987/5474] TestHash::TestSubHash#test_ruby2_keywords_hash? = 0.00 s 5449s [3988/5474] TestHash::TestSubHash#test_select! = 0.00 s 5449s [3989/5474] TestHash::TestSubHash#test_update4 = 0.00 s 5449s [3990/5474] TestHash::TestSubHash#test_delete_if = 0.01 s 5449s [3991/5474] TestHash::TestSubHash#test_to_h_block = 0.00 s 5449s [3992/5474] TestHash::TestSubHash#test_transform_values_bang = 0.00 s 5449s [3993/5474] TestHash::TestSubHash#test_NEWHASH_fstring_key = 0.00 s 5449s [3994/5474] TestHash::TestSubHash#test_shift2 = 0.00 s 5449s [3995/5474] TestHash::TestSubHash#test_key? = 0.00 s 5449s [3996/5474] TestHash::TestSubHash#test_assoc = 0.00 s 5449s [3997/5474] TestHash::TestSubHash#test_hash2 = 0.00 s 5449s [3998/5474] TestHash::TestSubHash#test_ASET = 0.00 s 5449s [3999/5474] TestHash::TestSubHash#test_clear = 0.00 s 5449s [4000/5474] TestHash::TestSubHash#test_merge! = 0.00 s 5449s [4001/5474] TestHash::TestSubHash#test_except = 0.00 s 5449s [4002/5474] TestHash::TestSubHash#test_hash_aset_fstring_identity = 0.00 s 5449s [4003/5474] TestHash::TestSubHash#test_merge = 0.00 s 5449s [4004/5474] TestHash::TestSubHash#test_hash_popped = 0.00 s 5449s [4005/5474] TestHash::TestSubHash#test_ar2st = 0.00 s 5449s [4006/5474] TestHash::TestSubHash#test_dup = 0.00 s 5449s [4007/5474] TestHash::TestSubHash#test_values_at = 0.00 s 5449s [4008/5474] TestHash::TestSubHash#test_default= = 0.00 s 5449s [4009/5474] TestHash::TestSubHash#test_each_value = 0.00 s 5449s [4010/5474] TestHash::TestSubHash#test_huge_iter_level = 0.02 s 5449s [4011/5474] TestHash::TestSubHash#test_transform_keys = 0.01 s 5449s [4012/5474] TestHash::TestSubHash#test_to_proc = 0.00 s 5449s [4013/5474] TestHash::TestSubHash#test_value? = 0.00 s 5449s [4014/5474] TestHash::TestSubHash#test_size2 = 0.00 s 5449s [4015/5474] TestHash::TestSubHash#test_reject_bang2 = 0.00 s 5449s [4016/5474] TestHash::TestSubHash#test_clear2 = 0.00 s 5449s [4017/5474] TestHash::TestSubHash#test_delete = 0.00 s 5449s [4018/5474] TestHash::TestSubHash#test_transform_keys_on_identhash = 0.00 s 5449s [4019/5474] TestHash::TestSubHash#test_cmp_samekeys = 0.00 s 5449s [4020/5474] TestHash::TestSubHash#test_wrapper = 0.01 s 5449s [4021/5474] TestHash::TestSubHash#test_reject! = 0.00 s 5449s [4022/5474] TestHash::TestSubHash#test_select_reject_will_not_rehash = 0.00 s 5449s [4023/5474] TestHash::TestSubHash#test_label_syntax = 0.00 s 5449s [4024/5474] TestHash::TestSubHash#test_to_h = 0.00 s 5449s [4025/5474] TestHash::TestSubHash#test_hash_bignum_hash = 0.00 s 5449s [4026/5474] TestHash::TestSubHash#test_flatten = 0.00 s 5449s [4027/5474] TestHash::TestSubHash#test_key = 0.00 s 5449s [4028/5474] TestHash::TestSubHash#test_invert = 0.00 s 5449s [4029/5474] TestHash::TestSubHash#test_same_key = 0.00 s 5449s [4030/5474] TestHash::TestSubHash#test_create = 0.00 s 5449s [4031/5474] TestHash::TestSubHash#test_key2? = 0.00 s 5449s [4032/5474] TestHash::TestSubHash#test_s_AREF_from_list = 0.00 s 5449s [4033/5474] TestHash::TestSubHash#test_sort = 0.00 s 5449s [4034/5474] TestHash::TestSubHash#test_compare_by_identity = 0.00 s 5449s [4035/5474] TestHash::TestSubHash#test_dup_will_not_rehash = 0.00 s 5449s [4036/5474] TestHash::TestSubHash#test_s_AREF_from_hash = 0.00 s 5449s [4037/5474] TestHash::TestSubHash#test_filter! = 0.00 s 5449s [4038/5474] TestHash::TestSubHash#test_merge_on_identhash = 0.00 s 5449s [4039/5474] TestHash::TestSubHash#test_ASET_fstring_key = 0.00 s 5449s [4040/5474] TestHash::TestSubHash#test_to_a = 0.00 s 5449s [4041/5474] TestHash::TestSubHash#test_replace_bug15358 = 0.00 s 5449s [4042/5474] TestHash::TestSubHash#test_each_key = 0.00 s 5449s [4043/5474] TestHash::TestSubHash#test_transform_keys_bang = 0.00 s 5449s [4044/5474] TestHash::TestSubHash#test_try_convert = 0.00 s 5449s [4045/5474] TestHash::TestSubHash#test_s_AREF_key_tampering = 0.00 s 5449s [4046/5474] TestHash::TestSubHash#test_value2? = 0.00 s 5449s [4047/5474] TestHash::TestSubHash#test_to_hash = 0.00 s 5449s [4048/5474] TestHash::TestSubHash#test_nil_to_h = 0.00 s 5449s [4049/5474] TestHash::TestSubHash#test_self_initialize_copy = 0.00 s 5449s [4050/5474] TestHash::TestSubHash#test_default = 0.00 s 5449s [4051/5474] TestHash::TestSubHash#test_ruby2_keywords_hash = 0.00 s 5449s [4052/5474] TestHash::TestSubHash#test_to_h_default_value = 0.00 s 5449s [4053/5474] TestHash::TestSubHash#test_keep_if = 0.00 s 5449s [4054/5474] TestHash::TestSubHash#test_replace2 = 0.00 s 5449s [4055/5474] TestHash::TestSubHash#test_replace = 0.00 s 5450s [4056/5474] TestHash::TestSubHash#test_broken_hash_value = 0.85 s 5450s [4057/5474] TestHash::TestSubHash#test_assoc_compare_by_identity = 0.00 s 5450s [4058/5474] TestHash::TestSubHash#test_ASET_fstring_non_literal_key = 0.01 s 5450s [4059/5474] TestHash::TestSubHash#test_to_s = 0.00 s 5450s [4060/5474] TestHash::TestSubHash#test_hash_hash = 0.00 s 5450s [4061/5474] TestHash::TestSubHash#test_recursive_hash_value_array_hash = 0.00 s 5450s [4062/5474] TestHash::TestSubHash#test_s_new = 0.00 s 5450s [4063/5474] TestHash::TestSubHash#test_hash_aref_fstring_identity = 0.00 s 5450s [4064/5474] TestHash::TestSubHash#test_slice = 0.00 s 5450s [4065/5474] TestHash::TestSubHash#test_recursive_key = 0.00 s 5450s [4066/5474] TestHash::TestSubHash#test_fetch = 0.00 s 5450s [4067/5474] TestHash::TestSubHash#test_compact = 0.00 s 5450s [4068/5474] TestHash::TestSubHash#test_keys = 0.00 s 5450s [4069/5474] TestHash::TestSubHash#test_recursive_hash_value_struct = 0.00 s 5450s [4070/5474] TestHash::TestSubHash#test_shift = 0.00 s 5450s [4071/5474] TestHash::TestSubHash#test_length = 0.00 s 5450s [4072/5474] TestHash::TestSubHash#test_each = 0.00 s 5450s [4073/5474] TestHash::TestSubHash#test_reserved_hash_val = 0.00 s 5450s [4074/5474] TestHash::TestSubHash#test_update5 = 0.00 s 5450s [4075/5474] TestHash::TestSubHash#test_shift_none = 0.00 s 5450s [4076/5474] TestHash::TestSubHash#test_default_proc = 0.00 s 5450s [4077/5474] TestHash::TestSubHash#test_filter = 0.00 s 5450s [4078/5474] TestHash::TestSubHash#test_update3 = 0.00 s 5450s [4079/5474] TestHash::TestSubHash#test_store = 0.00 s 5450s [4080/5474] TestHash::TestSubHash#test_values = 0.00 s 5450s [4081/5474] TestHash::TestSubHash#test_EQUAL = 0.00 s 5450s [4082/5474] TestHash::TestSubHash#test_fetch_values = 0.00 s 5450s [4083/5474] TestHash::TestSubHash#test_s_AREF_from_pairs = 0.00 s 5450s [4084/5474] TestHash::TestSubHash#test_equal2 = 0.00 s 5450s [4085/5474] TestHash::TestSubHash#test_replace_bug9230 = 0.00 s 5450s [4086/5474] TestHash::TestSubHash#test_transform_values_on_identhash = 0.00 s 5450s [4087/5474] TestHash::TestSubHash#test_size = 0.00 s 5450s [4088/5474] TestHash::TestSubHash#test_transform_values = 0.00 s 5450s [4089/5474] TestHash::TestSubHash#test_s_AREF_duplicated_key = 0.00 s 5450s [4090/5474] TestHash::TestSubHash#test_rassoc = 0.00 s 5450s [4091/5474] TestHash::TestSubHash#test_to_h_instance_variable = 0.00 s 5450s [4092/5474] TestHash::TestSubHash#test_reject = 0.00 s 5450s [4093/5474] TestHash::TestSubHash#test_recursive_hash_value_hash_array = 0.00 s 5450s [4094/5474] TestHash::TestSubHash#test_bug_12706 = 0.00 s 5450s [4095/5474] TestHash::TestSubHash#test_clone = 0.00 s 5450s [4096/5474] TestHash::TestSubHash#test_select = 0.00 s 5450s [4097/5474] TestHash::TestSubHash#test_include? = 0.00 s 5450s [4098/5474] TestHash::TestSubHash#test_AREF = 0.00 s 5450s [4099/5474] TestLazyEnumerator#test_cycle = 0.01 s 5450s [4100/5474] TestLazyEnumerator#test_grep_v = 0.01 s 5450s [4101/5474] TestLazyEnumerator#test_grep = 0.01 s 5450s [4102/5474] TestLazyEnumerator#test_zip = 0.01 s 5450s [4103/5474] TestLazyEnumerator#test_zip_short_arg = 0.01 s 5450s [4104/5474] TestLazyEnumerator#test_drop_while = 0.01 s 5450s [4105/5474] TestLazyEnumerator#test_select_multiple_values = 0.00 s 5450s [4106/5474] TestLazyEnumerator#test_take_while = 0.00 s 5450s [4107/5474] TestLazyEnumerator#test_flat_map_hash = 0.00 s 5450s [4108/5474] TestLazyEnumerator#test_uniq = 0.00 s 5450s [4109/5474] TestLazyEnumerator#test_grep_with_block = 0.00 s 5450s [4110/5474] TestLazyEnumerator#test_drop_nested = 0.01 s 5450s [4111/5474] TestLazyEnumerator#test_with_index_size = 0.00 s 5450s [4112/5474] TestLazyEnumerator#test_grep_multiple_values = 0.00 s 5450s [4113/5474] TestLazyEnumerator#test_map_packed_nested = 0.00 s 5450s [4114/5474] TestLazyEnumerator#test_drop = 0.00 s 5450s [4115/5474] TestLazyEnumerator#test_each_slice_limit = 0.00 s 5450s [4116/5474] TestLazyEnumerator#test_zip_lazy_on_args = 0.00 s 5450s [4117/5474] TestLazyEnumerator#test_inspect = 0.01 s 5450s [4118/5474] TestLazyEnumerator#test_filter_map = 0.00 s 5450s [4119/5474] TestLazyEnumerator#test_drop_and_take = 0.00 s 5450s [4120/5474] TestLazyEnumerator#test_no_warnings = 0.01 s 5451s [4121/5474] TestLazyEnumerator#test_reject_multiple_values = 0.01 s 5451s [4122/5474] TestLazyEnumerator#test_each_args = 0.00 s 5451s [4123/5474] TestLazyEnumerator#test_require_block = 0.01 s 5451s [4124/5474] TestLazyEnumerator#test_grep_v_multiple_values = 0.01 s 5451s [4125/5474] TestLazyEnumerator#test_flat_map = 0.00 s 5451s [4126/5474] TestLazyEnumerator#test_cycle_with_block = 0.00 s 5451s [4127/5474] TestLazyEnumerator#test_take_nested = 0.00 s 5451s [4128/5474] TestLazyEnumerator#test_force = 0.00 s 5451s [4129/5474] TestLazyEnumerator#test_lazy_to_enum = 0.00 s 5451s [4130/5474] TestLazyEnumerator#test_flat_map_non_array = 0.00 s 5451s [4131/5474] TestLazyEnumerator#test_initialize = 0.00 s 5451s [4132/5474] TestLazyEnumerator#test_zip_nested = 0.00 s 5457s [4133/5474] TestLazyEnumerator#test_map_zip = 6.78 s 5457s [4134/5474] TestLazyEnumerator#test_zip_bad_arg = 0.00 s 5457s [4135/5474] TestLazyEnumerator#test_cycle_chain = 0.01 s 5457s [4136/5474] TestLazyEnumerator#test_lazy_eager = 0.00 s 5457s [4137/5474] TestLazyEnumerator#test_grep_v_with_block = 0.00 s 5457s [4138/5474] TestLazyEnumerator#test_take_bad_arg = 0.00 s 5457s [4139/5474] TestLazyEnumerator#test_take_recycle = 0.00 s 5457s [4140/5474] TestLazyEnumerator#test_zip_efficient_on_array_args = 0.00 s 5457s [4141/5474] TestLazyEnumerator#test_zip_without_arg = 0.00 s 5457s [4142/5474] TestLazyEnumerator#test_map = 0.00 s 5457s [4143/5474] TestLazyEnumerator#test_drop_while_nested = 0.00 s 5457s [4144/5474] TestLazyEnumerator#test_laziness_conservation = 0.00 s 5457s [4145/5474] TestLazyEnumerator#test_zip_nonsingle = 0.00 s 5457s [4146/5474] TestLazyEnumerator#test_size = 0.03 s 5457s [4147/5474] TestLazyEnumerator#test_flat_map_take = 0.00 s 5457s [4148/5474] TestLazyEnumerator#test_zip_with_block = 0.00 s 5457s [4149/5474] TestLazyEnumerator#test_flat_map_nested = 0.00 s 5457s [4150/5474] TestLazyEnumerator#test_each_line = 0.01 s 5457s [4151/5474] TestLazyEnumerator#test_reject = 0.00 s 5457s [4152/5474] TestLazyEnumerator#test_take_rewound = 0.00 s 5457s [4153/5474] TestLazyEnumerator#test_flat_map_to_ary = 0.00 s 5457s [4154/5474] TestLazyEnumerator#test_take = 0.00 s 5457s [4155/5474] TestLazyEnumerator#test_select = 0.00 s 5457s [4156/5474] TestLazyEnumerator#test_symbol_chain = 0.00 s 5457s [4157/5474] TestLazyEnumerator#test_each_cons_limit = 0.00 s 5457s [4158/5474] TestCase#test_case = 0.00 s 5457s [4159/5474] TestCase#test_nomethoderror = 0.00 s 5457s [4160/5474] TestCase#test_optimization = 0.00 s 5457s [4161/5474] TestCase#test_method_missing = 0.00 s 5457s [4162/5474] TestDefined#test_autoloaded_noload = 0.01 s 5457s [4163/5474] TestDefined#test_method_by_respond_to_missing = 0.00 s 5457s [4164/5474] TestDefined#test_define_method = 0.00 s 5461s [4165/5474] TestDefined#test_super_toplevel = 3.49 s 5461s [4166/5474] TestDefined#test_exception = 0.00 s 5461s [4167/5474] TestDefined#test_defined_private_method = 0.00 s 5461s [4168/5474] TestDefined#test_defined_constant = 0.00 s 5461s [4169/5474] TestDefined#test_autoloaded_subclass = 0.00 s 5461s [4170/5474] TestDefined#test_defined_public_method = 0.00 s 5461s [4171/5474] TestDefined#test_defined_literal = 0.00 s 5461s [4172/5474] TestDefined#test_super_in_included_method = 0.00 s 5461s [4173/5474] TestDefined#test_defined_empty_paren_arg = 0.00 s 5461s [4174/5474] TestDefined#test_defined_yield = 0.00 s 5461s [4175/5474] TestDefined#test_defined_undefined_method = 0.00 s 5461s [4176/5474] TestDefined#test_defined_operator = 0.00 s 5461s [4177/5474] TestDefined#test_defined_refined_call_without_using = 0.00 s 5461s [4178/5474] TestDefined#test_super_in_block = 0.00 s 5461s [4179/5474] TestDefined#test_defined_method = 0.00 s 5461s [4180/5474] TestDefined#test_defined_global_variable = 0.00 s 5461s [4181/5474] TestDefined#test_defined_local_variable = 0.00 s 5461s [4182/5474] TestDefined#test_defined_undef = 0.00 s 5461s [4183/5474] TestDefined#test_defined_attrasgn = 0.00 s 5461s [4184/5474] TestDefined#test_defined_refined_vcall_without_using = 0.00 s 5461s [4185/5474] TestDefined#test_top_level_constant_not_defined = 0.00 s 5461s [4186/5474] TestM17N#test_gsub = 0.00 s 5461s [4187/5474] TestM17N#test_utf_16_32_ord(UTF-16LE) = 0.00 s 5461s [4188/5474] TestM17N#test_nil_inspect = 0.00 s 5461s [4189/5474] TestM17N#test_each_char = 0.00 s 5461s [4190/5474] TestM17N#test_utf_16_32_inspect(UTF-32LE-BOM) = 0.00 s 5461s [4191/5474] TestM17N#test_valid_encoding = 0.00 s 5461s [4192/5474] TestM17N#test_dup_aref = 0.00 s 5461s [4193/5474] TestM17N#test_dynamic_eucjp_regexp = 0.01 s 5461s [4194/5474] TestM17N#test_regexp_ascii = 0.02 s 5461s [4195/5474] TestM17N#test_reverse = 0.00 s 5461s [4196/5474] TestM17N#test_marshal = 0.00 s 5461s [4197/5474] TestM17N#test_dynamic_ascii_regexp = 0.01 s 5461s [4198/5474] TestM17N#test_sub = 0.00 s 5461s [4199/5474] TestM17N#test_quote = 0.01 s 5461s [4200/5474] TestM17N#test_empty_string = 0.00 s 5461s [4201/5474] TestM17N#test_count_sjis_trailing_byte = 0.00 s 5465s [4202/5474] TestM17N#test_utf_16_32_inspect(UTF-32BE) = 3.60 s 5465s [4203/5474] TestM17N#test_squeeze = 0.00 s 5465s [4204/5474] TestM17N#test_scrub_replace_argument = 0.00 s 5465s [4205/5474] TestM17N#test_utf_16_32_ord(UTF-32LE) = 0.00 s 5465s [4206/5474] TestM17N#test_regexp_source = 0.00 s 5465s [4207/5474] TestM17N#test_magic_comment_at_various_positions = 0.00 s 5465s [4208/5474] TestM17N#test_utf_16_32_inspect(UTF-32BE-BOM) = 0.00 s 5465s [4209/5474] TestM17N#test_validate_redundant_utf8 = 0.01 s 5465s [4210/5474] TestM17N#test_aset = 0.00 s 5465s [4211/5474] TestM17N#test_symbol_op = 0.00 s 5465s [4212/5474] TestM17N#test_split = 0.01 s 5465s [4213/5474] TestM17N#test_sprintf_p = 0.02 s 5465s [4214/5474] TestM17N#test_str_lt = 0.00 s 5468s [4215/5474] TestM17N#test_utf_16_32_inspect(UTF-16BE) = 3.41 s 5468s [4216/5474] TestM17N#test_str_aref = 0.00 s 5468s [4217/5474] TestM17N#test_regexp_embed = 0.00 s 5468s [4218/5474] TestM17N#test_hash_to_s = 0.00 s 5468s [4219/5474] TestM17N#test_escaped_metachar = 0.00 s 5468s [4220/5474] TestM17N#test_object_inspect_external = 0.00 s 5468s [4221/5474] TestM17N#test_tr_s = 0.00 s 5468s [4222/5474] TestM17N#test_str_String = 0.00 s 5468s [4223/5474] TestM17N#test_str_concat = 0.00 s 5468s [4224/5474] TestM17N#test_utf_16_32_codepoints(UTF-16LE) = 0.00 s 5468s [4225/5474] TestM17N#test_euc_tw = 0.00 s 5468s [4226/5474] TestM17N#test_chr = 0.01 s 5468s [4227/5474] TestM17N#test_scrub_widechar = 0.00 s 5468s [4228/5474] TestM17N#test_combchar_codepoint = 0.00 s 5468s [4229/5474] TestM17N#test_nil_to_s = 0.00 s 5468s [4230/5474] TestM17N#test_sub3 = 0.00 s 5468s [4231/5474] TestM17N#test_regexp_unicode = 0.00 s 5468s [4232/5474] TestM17N#test_union_1_nonascii_string = 0.01 s 5468s [4233/5474] TestM17N#test_env = 0.01 s 5468s [4234/5474] TestM17N#test_getbyte = 0.00 s 5468s [4235/5474] TestM17N#test_magic_comment_vim = 0.00 s 5468s [4236/5474] TestM17N#test_utf_16_32_inspect(UTF-16BE-BOM) = 0.00 s 5468s [4237/5474] TestM17N#test_str_multiply = 0.00 s 5468s [4238/5474] TestM17N#test_regexp_embed_preprocess = 0.00 s 5468s [4239/5474] TestM17N#test_str_allocate = 0.00 s 5468s [4240/5474] TestM17N#test_scrub_bang = 0.00 s 5468s [4241/5474] TestM17N#test_str_center = 0.00 s 5468s [4242/5474] TestM17N#test_fixnum_to_s = 0.00 s 5468s [4243/5474] TestM17N#test_string_eucjp_literal = 0.00 s 5468s [4244/5474] TestM17N#test_utf_16_32_codepoints(UTF-32LE) = 0.00 s 5468s [4245/5474] TestM17N#test_setbyte = 0.00 s 5468s [4246/5474] TestM17N#test_array_to_s = 0.00 s 5468s [4247/5474] TestM17N#test_count = 0.00 s 5468s [4248/5474] TestM17N#test_regexp_generic = 0.00 s 5468s [4249/5474] TestM17N#test_dynamic_utf8_regexp = 0.01 s 5468s [4250/5474] TestM17N#test_delete = 0.00 s 5468s [4251/5474] TestM17N#test_insert = 0.00 s 5468s [4252/5474] TestM17N#test_string_inspect_invalid = 0.00 s 5468s [4253/5474] TestM17N#test_chomp = 0.00 s 5468s [4254/5474] TestM17N#test_regexp_property = 0.00 s 5468s [4255/5474] TestM17N#test_utf_16_32_inspect(UTF-16LE-BOM) = 0.00 s 5468s [4256/5474] TestM17N#test_regexp_ascii_none = 0.00 s 5468s [4257/5474] TestM17N#test_gbk = 0.00 s 5468s [4258/5474] TestM17N#test_regexp_too_short_multibyte_character = 0.01 s 5468s [4259/5474] TestM17N#test_dynamic_sjis_regexp = 0.01 s 5468s [4260/5474] TestM17N#test_scan = 0.00 s 5468s [4261/5474] TestM17N#test_setbyte_range = 0.00 s 5468s [4262/5474] TestM17N#test_plus = 0.00 s 5468s [4263/5474] TestM17N#test_string_ascii_literal = 0.00 s 5468s [4264/5474] TestM17N#test_scrub_replace_block = 0.00 s 5468s [4265/5474] TestM17N#test_next = 0.01 s 5468s [4266/5474] TestM17N#test_str_aref_force_encoding = 0.00 s 5468s [4267/5474] TestM17N#test_utf_16_32_codepoints(UTF-32BE) = 0.00 s 5468s [4268/5474] TestM17N#test_regexp_match = 0.00 s 5468s [4269/5474] TestM17N#test_greek_capital_gap = 0.00 s 5468s [4270/5474] TestM17N#test_utf8str_aref = 0.00 s 5468s [4271/5474] TestM17N#test_upto = 0.00 s 5468s [4272/5474] TestM17N#test_string_inspect_encoding = 0.00 s 5468s [4273/5474] TestM17N#test_regexp_usascii = 0.01 s 5468s [4274/5474] TestM17N#test_reverse_bang = 0.00 s 5468s [4275/5474] TestM17N#test_sub2 = 0.00 s 5468s [4276/5474] TestM17N#test_utf_16_32_codepoints(UTF-16BE) = 0.00 s 5468s [4277/5474] TestM17N#test_union_1_regexp = 0.00 s 5468s [4278/5474] TestM17N#test_scrub_dummy_encoding = 0.00 s 5468s [4279/5474] TestM17N#test_encoding_find = 0.00 s 5468s [4280/5474] TestM17N#test_str_aref_substr = 0.00 s 5468s [4281/5474] TestM17N#test_compatible = 0.00 s 5468s [4282/5474] TestM17N#test_union_1_asciionly_string = 0.00 s 5468s [4283/5474] TestM17N#test_magic_comment = 0.00 s 5468s [4284/5474] TestM17N#test_begin_end_offset = 0.00 s 5468s [4285/5474] TestM17N#test_encoding_to_s = 0.00 s 5468s [4286/5474] TestM17N#test_scrub_replace_default = 0.00 s 5468s [4287/5474] TestM17N#test_index = 0.01 s 5468s [4288/5474] TestM17N#test_inspect_with_default_internal = 0.00 s 5468s [4289/5474] TestM17N#test_utf8_literal = 0.00 s 5468s [4290/5474] TestM17N#test_sprintf_s = 0.00 s 5468s [4291/5474] TestM17N#test_validate_surrogate = 0.00 s 5468s [4292/5474] TestM17N#test_utf_16_32_ord(UTF-32BE) = 0.00 s 5468s [4293/5474] TestM17N#test_regexp_mixed_unicode = 0.01 s 5468s [4294/5474] TestM17N#test_bignum_to_s = 0.00 s 5468s [4295/5474] TestM17N#test_force_encoding = 0.00 s 5472s [4296/5474] TestM17N#test_utf_16_32_inspect(UTF-16LE) = 3.53 s 5472s [4297/5474] TestM17N#test_tr = 0.00 s 5472s [4298/5474] TestM17N#test_utf_without_bom_valid = 0.01 s 5472s [4299/5474] TestM17N#test_false_to_s = 0.00 s 5472s [4300/5474] TestM17N#test_str_aref_len = 0.00 s 5472s [4301/5474] TestM17N#test_regexp_windows_31j = 0.00 s 5472s [4302/5474] TestM17N#test_true_to_s = 0.00 s 5472s [4303/5474] TestM17N#test_sprintf_c = 0.00 s 5472s [4304/5474] TestM17N#test_string_mixed_unicode = 0.01 s 5472s [4305/5474] TestM17N#test_regexp_named_class = 0.00 s 5472s [4306/5474] TestM17N#test_dup_scan = 0.00 s 5472s [4307/5474] TestM17N#test_casecmp = 0.00 s 5472s [4308/5474] TestM17N#test_str_b = 0.00 s 5472s [4309/5474] TestM17N#test_float_to_s = 0.00 s 5472s [4310/5474] TestM17N#test_end_with = 0.19 s 5472s [4311/5474] TestM17N#test_utf_16_32_ord(UTF-16BE) = 0.00 s 5472s [4312/5474] TestM17N#test_each_line = 0.00 s 5472s [4313/5474] TestM17N#test_regexp_sjis = 0.00 s 5472s [4314/5474] TestM17N#test_begin_end_offset_sjis = 0.00 s 5472s [4315/5474] TestM17N#test_regexp_euc = 0.01 s 5476s [4316/5474] TestM17N#test_utf_16_32_inspect(UTF-32LE) = 3.56 s 5476s [4317/5474] TestM17N#test_scrub_valid_string = 0.00 s 5476s [4318/5474] TestM17N#test_union_0 = 0.00 s 5476s [4319/5474] TestM17N#test_include? = 0.00 s 5476s [4320/5474] TestM17N#test_utf_without_bom_asciionly = 0.00 s 5476s [4321/5474] TestM17N#test_object_utf16_32_inspect = 0.00 s 5476s [4322/5474] TestM17N#test_union_2 = 0.05 s 5476s [4323/5474] TestModule#test_prepend_private_super = 0.00 s 5476s [4324/5474] TestModule#test_nested_get_symbol = 0.01 s 5476s [4325/5474] TestModule#test_prepend_singleton_methods = 0.00 s 5476s [4326/5474] TestModule#test_method_added = 0.00 s 5476s [4327/5474] TestModule#test_prepend_CMP = 0.00 s 5476s [4328/5474] TestModule#test_GT_0 = 0.00 s 5476s [4329/5474] TestModule#test_private_constant_in_module = 0.00 s 5476s [4330/5474] TestModule#test_const_set = 0.00 s 5476s [4331/5474] TestModule#test_prepend_included_modules = 0.00 s 5476s [4332/5474] TestModule#test_extend_module_with_protected_bmethod = 0.00 s 5476s [4333/5474] TestModule#test_const_get = 0.00 s 5476s [4334/5474] TestModule#test_frozen_visibility = 0.00 s 5476s [4335/5474] TestModule#test_uninitialized_attr = 0.00 s 5476s [4336/5474] TestModule#test_VERY_EQUAL = 0.00 s 5476s [4337/5474] TestModule#test_LT = 0.00 s 5476s [4338/5474] TestModule#test_append_features = 0.00 s 5476s [4339/5474] TestModule#test_instance_methods = 0.00 s 5479s [4340/5474] TestModule#test_include_toplevel = 3.51 s 5479s [4341/5474] TestModule#test_leading_colons = 0.00 s 5479s [4342/5474] TestModule#test_prepend = 0.00 s 5479s [4343/5474] TestModule#test_alias_method = 0.00 s 5483s [4344/5474] TestModule#test_inspect_segfault = 3.37 s 5483s [4345/5474] TestModule#test_private_constant_const_missing = 0.00 s 5483s [4346/5474] TestModule#test_prepend_class_ancestors = 0.00 s 5483s [4347/5474] TestModule#test_send = 0.00 s 5483s [4348/5474] TestModule#test_freeze = 0.00 s 5485s [4349/5474] TestModule#test_constant_lookup_in_method_defined_by_class_eval = 2.38 s 5487s [4350/5474] TestModule#test_toplevel_private_constant = 2.22 s 5487s [4351/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_with_superclass = 0.00 s 5487s [4352/5474] TestModule#test_singleton_constants = 0.00 s 5487s [4353/5474] TestModule#test_prepend_instance_methods = 0.00 s 5487s [4354/5474] TestModule#test_cyclic_include = 0.00 s 5487s [4355/5474] TestModule#test_included_modules = 0.00 s 5487s [4356/5474] TestModule#test_return_value_of_define_singleton_method = 0.00 s 5487s [4357/5474] TestModule#test_public_include = 0.00 s 5487s [4358/5474] TestModule#test_GT = 0.00 s 5487s [4359/5474] TestModule#test_public_instance_methods = 0.00 s 5487s [4360/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_with_origin_class = 0.00 s 5487s [4361/5474] TestModule#test_public_methods = 0.00 s 5487s [4362/5474] TestModule#test_append_features_type_error = 0.00 s 5487s [4363/5474] TestModule#test_prepend_remove_method = 0.00 s 5487s [4364/5474] TestModule#test_prepend_each_classes = 0.00 s 5487s [4365/5474] TestModule#test_clone_freeze = 0.00 s 5487s [4366/5474] TestModule#test_private_class_method = 0.00 s 5487s [4367/5474] TestModule#test_class_eval = 0.00 s 5487s [4368/5474] TestModule#test_accidental_singleton_naming_with_class = 0.00 s 5487s [4369/5474] TestModule#test_nested_get_bad_class = 0.00 s 5489s [4370/5474] TestModule#test_constant_lookup_in_toplevel_class_eval = 2.27 s 5493s [4371/5474] TestModule#test_alias = 2.27 s 5494s [4372/5474] TestModule#test_constant_lookup_in_module_in_class_eval = 2.35 s 5494s [4373/5474] TestModule#test_public_class_method = 0.00 s 5494s [4374/5474] TestModule#test_prepend_after_include = 0.01 s 5498s [4375/5474] TestModule#test_refine_module_then_include = 3.42 s 5498s [4376/5474] TestModule#test_attr_inherited_visibility = 0.00 s 5498s [4377/5474] TestModule#test_method_defined? = 0.01 s 5498s [4378/5474] TestModule#test_s_protected = 0.01 s 5498s [4379/5474] TestModule#test_s_nesting = 0.00 s 5498s [4380/5474] TestModule#test_private_constant_in_class = 0.00 s 5498s [4381/5474] TestModule#test_nonascii_name = 0.00 s 5498s [4382/5474] TestModule#test_dup = 0.00 s 5498s [4383/5474] TestModule#test_bad_constants_defined = 0.01 s 5498s [4384/5474] TestModule#test_uninitialized_toplevel_constant = 0.02 s 5500s [4385/5474] TestModule#test_const_get_no_inherited = 2.26 s 5502s [4386/5474] TestModule#test_private_constants_clear_inlinecache = 2.57 s 5502s [4387/5474] TestModule#test_visibility_by_public_class_method = 0.00 s 5502s [4388/5474] TestModule#test_include_into_module_already_included = 0.01 s 5516s [4389/5474] TestModule#test_private_top_methods = 13.61 s 5516s [4390/5474] TestModule#test_prepend_inheritance = 0.00 s 5516s [4391/5474] TestModule#test_module_exec = 0.00 s 5516s [4392/5474] TestModule#test_nested_get_const_missing = 0.00 s 5518s [4393/5474] TestModule#test_s_constants = 2.20 s 5518s [4394/5474] TestModule#test_prepend_in_superclass = 0.00 s 5518s [4395/5474] TestModule#test_append_features_raise = 0.00 s 5518s [4396/5474] TestModule#test_remove_class_variable = 0.00 s 5518s [4397/5474] TestModule#test_class_variable_defined = 0.00 s 5518s [4398/5474] TestModule#test_const_defined? = 0.00 s 5518s [4399/5474] TestModule#test_nested_defined_symbol = 0.00 s 5518s [4400/5474] TestModule#test_s_public = 0.00 s 5518s [4401/5474] TestModule#test_remove_const = 0.00 s 5518s [4402/5474] TestModule#test_class_variables = 0.00 s 5518s [4403/5474] TestModule#test_prepend_self = 0.00 s 5518s [4404/5474] TestModule#test_visibility_after_refine_and_visibility_change_with_superclass = 0.00 s 5518s [4405/5474] TestModule#test_const_source_location = 0.00 s 5518s [4406/5474] TestModule#test_CMP_0 = 0.00 s 5518s [4407/5474] TestModule#test_const_get_evaled = 0.00 s 5518s [4408/5474] TestModule#test_method_defined = 0.01 s 5518s [4409/5474] TestModule#test_define_method_with_unbound_method = 0.00 s 5518s [4410/5474] TestModule#test_name = 0.00 s 5518s [4411/5474] TestModule#test_frozen_module = 0.00 s 5518s [4412/5474] TestModule#test_nested_defined_inheritance = 0.00 s 5518s [4413/5474] TestModule#test_prepend_visibility = 0.00 s 5518s [4414/5474] TestModule#test_constants_with_private_constant = 0.00 s 5518s [4415/5474] TestModule#test_extend_module_with_protected_method = 0.00 s 5518s [4416/5474] TestModule#test_method_undefined = 0.00 s 5518s [4417/5474] TestModule#test_singleton_class_ancestors = 0.00 s 5521s [4418/5474] TestModule#test_private_extended_module = 3.07 s 5521s [4419/5474] TestModule#test_prepend_module_with_no_args = 0.00 s 5521s [4420/5474] TestModule#test_nested_defined_bad_class = 0.00 s 5521s [4421/5474] TestModule#test_visibility_after_multiple_refine_and_visibility_change_without_origin_class = 0.00 s 5524s [4422/5474] TestModule#test_prepend_visibility_inherited = 3.12 s 5529s [4423/5474] TestModule#test_gc_prepend_chain = 4.06 s 5529s [4424/5474] TestModule#test_protected_instance_methods = 0.00 s 5529s [4425/5474] TestModule#test_public_constant = 0.00 s 5532s [4426/5474] TestModule#test_prepend_optmethod = 3.53 s 5532s [4427/5474] TestModule#test_prepend_super_in_alias = 0.00 s 5532s [4428/5474] TestModule#test_frozen_class = 0.00 s 5540s [4429/5474] TestModule#test_undef = 7.47 s 5540s [4430/5474] TestModule#test_s_new = 0.00 s 5540s [4431/5474] TestModule#test_export_method = 0.00 s 5540s [4432/5474] TestModule#test_ancestors = 0.00 s 5540s [4433/5474] TestModule#test_prepend_no_duplication = 0.00 s 5543s [4434/5474] TestModule#test_prepend_call_super = 3.52 s 5543s [4435/5474] TestModule#test_uninitialized_attr_class = 0.00 s 5543s [4436/5474] TestModule#test_include_super_in_alias = 0.00 s 5543s [4437/5474] TestModule#test_dup_anonymous = 0.00 s 5543s [4438/5474] TestModule#test_included = 0.00 s 5543s [4439/5474] TestModule#test_private_constant2 = 0.00 s 5543s [4440/5474] TestModule#test_LE = 0.00 s 5543s [4441/5474] TestModule#test_public_prepend = 0.00 s 5543s [4442/5474] TestModule#test_uninitialized_instance_variable = 0.00 s 5543s [4443/5474] TestModule#test_module_eval = 0.00 s 5543s [4444/5474] TestModule#test_private_instance_methods = 0.00 s 5543s [4445/5474] TestModule#test_visibility_after_refine_and_visibility_change_with_origin_class = 0.00 s 5543s [4446/5474] TestModule#test_uninitialized_attr_non_object = 0.00 s 5543s [4447/5474] TestModule#test_cyclic_prepend = 0.00 s 5543s [4448/5474] TestModule#test_module_name_in_singleton_method = 0.00 s 5543s [4449/5474] TestModule#test_include_with_no_args = 0.00 s 5543s [4450/5474] TestModule#test_s_private = 0.00 s 5547s [4451/5474] TestModule#test_redefine_optmethod_after_prepend = 3.45 s 5549s [4452/5474] TestModule#test_const_get_inherited = 2.34 s 5549s [4453/5474] TestModule#test_const_defined_invalid_name = 0.00 s 5549s [4454/5474] TestModule#test_mod_constants = 0.00 s 5549s [4455/5474] TestModule#test_attr_public_at_toplevel = 0.00 s 5549s [4456/5474] TestModule#test_include_p = 0.00 s 5549s [4457/5474] TestModule#test_method_removed = 0.00 s 5549s [4458/5474] TestModule#test_module_subclass_initialize = 0.00 s 5549s [4459/5474] TestModule#test_method_defined_without_include_super = 0.00 s 5549s [4460/5474] TestModule#test_visibility_after_refine_and_visibility_change_without_origin_class = 0.00 s 5549s [4461/5474] TestModule#test_GE = 0.00 s 5549s [4462/5474] TestModule#test_LT_0 = 0.00 s 5549s [4463/5474] TestModule#test_prepend_instance_methods_false = 0.00 s 5549s [4464/5474] TestModule#test_attr_writer_with_no_arguments = 0.00 s 5549s [4465/5474] TestModule#test_extend_module_with_no_args = 0.00 s 5549s [4466/5474] TestModule#test_return_value_of_define_method = 0.00 s 5549s [4467/5474] TestModule#test_constants = 0.00 s 5549s [4468/5474] TestModule#test_CMP = 0.00 s 5549s [4469/5474] TestModule#test_frozen_singleton_class = 0.00 s 5549s [4470/5474] TestModule#test_bad_constants_get = 0.01 s 5554s [4471/5474] TestModule#test_const_in_module = 4.70 s 5554s [4472/5474] TestModule#test_prepend_module_ancestors = 0.00 s 5554s [4473/5474] TestModule#test_attr_obsoleted_flag = 0.00 s 5554s [4474/5474] TestModule#test_class_variable_set = 0.00 s 5554s [4475/5474] TestModule#test_included_modules_with_prepend = 0.00 s 5556s [4476/5474] TestModule#test_top_public_private = 2.51 s 5559s [4477/5474] TestModule#test_override_optmethod_after_prepend = 3.21 s 5559s [4478/5474] TestModule#test_visibility_method_return_value = 0.00 s 5559s [4479/5474] TestModule#test_accidental_singleton_naming_with_module = 0.00 s 5563s [4480/5474] TestModule#test_prepend_gc = 3.67 s 5563s [4481/5474] TestModule#test_class_variable_get = 0.00 s 5563s [4482/5474] TestHash#test_recursive_hash_value_array = 0.00 s 5563s [4483/5474] TestHash#test_dig_with_respond_to = 0.00 s 5563s [4484/5474] TestHash#test_s_AREF_frozen_key_id = 0.00 s 5563s [4485/5474] TestHash#test_reject_on_identhash = 0.00 s 5563s [4486/5474] TestHash#test_initialize_wrong_arguments = 0.00 s 5563s [4487/5474] TestHash#test_clear_initialize_copy = 0.00 s 5563s [4488/5474] TestHash#test_except_on_identhash = 0.00 s 5563s [4489/5474] TestHash#test_dup_equality = 0.00 s 5563s [4490/5474] TestHash#test_rehash = 0.00 s 5563s [4491/5474] TestHash#test_update = 0.00 s 5563s [4492/5474] TestHash#test_member? = 0.00 s 5563s [4493/5474] TestHash#test_rehash2 = 0.00 s 5563s [4494/5474] TestHash#test_to_h_default_proc = 0.00 s 5563s [4495/5474] TestHash#test_inverse_hash = 0.00 s 5563s [4496/5474] TestHash#test_each_pair = 0.00 s 5563s [4497/5474] TestHash#test_threaded_iter_level = 0.00 s 5563s [4498/5474] TestHash#test_empty? = 0.00 s 5563s [4499/5474] TestHash#test_select_on_identhash = 0.00 s 5563s [4500/5474] TestHash#test_fetch2 = 0.00 s 5563s [4501/5474] TestHash#test_cmp = 0.00 s 5563s [4502/5474] TestHash#test_update2 = 0.00 s 5563s [4503/5474] TestHash#test_dig = 0.00 s 5563s [4504/5474] TestHash#test_slice_on_identhash = 0.00 s 5563s [4505/5474] TestHash#test_flatten_arity = 0.00 s 5563s [4506/5474] TestHash#test_bad_initialize_copy = 0.00 s 5563s [4507/5474] TestHash#test_hash = 0.01 s 5563s [4508/5474] TestHash#test_ruby2_keywords_hash? = 0.00 s 5563s [4509/5474] TestHash#test_select! = 0.00 s 5563s [4510/5474] TestHash#test_update4 = 0.00 s 5563s [4511/5474] TestHash#test_delete_if = 0.01 s 5563s [4512/5474] TestHash#test_to_h_block = 0.00 s 5563s [4513/5474] TestHash#test_transform_values_bang = 0.01 s 5563s [4514/5474] TestHash#test_shift2 = 0.00 s 5563s [4515/5474] TestHash#test_key? = 0.00 s 5563s [4516/5474] TestHash#test_assoc = 0.00 s 5563s [4517/5474] TestHash#test_hash2 = 0.00 s 5563s [4518/5474] TestHash#test_ASET = 0.00 s 5563s [4519/5474] TestHash#test_clear = 0.00 s 5563s [4520/5474] TestHash#test_merge! = 0.00 s 5563s [4521/5474] TestHash#test_except = 0.00 s 5563s [4522/5474] TestHash#test_hash_aset_fstring_identity = 0.00 s 5563s [4523/5474] TestHash#test_merge = 0.00 s 5563s [4524/5474] TestHash#test_hash_popped = 0.00 s 5563s [4525/5474] TestHash#test_ar2st = 0.01 s 5563s [4526/5474] TestHash#test_dup = 0.00 s 5563s [4527/5474] TestHash#test_values_at = 0.00 s 5563s [4528/5474] TestHash#test_default= = 0.00 s 5563s [4529/5474] TestHash#test_each_value = 0.00 s 5563s [4530/5474] TestHash#test_huge_iter_level = 0.01 s 5563s [4531/5474] TestHash#test_transform_keys = 0.00 s 5563s [4532/5474] TestHash#test_to_proc = 0.00 s 5563s [4533/5474] TestHash#test_value? = 0.00 s 5563s [4534/5474] TestHash#test_size2 = 0.00 s 5563s [4535/5474] TestHash#test_reject_bang2 = 0.00 s 5563s [4536/5474] TestHash#test_clear2 = 0.00 s 5563s [4537/5474] TestHash#test_delete = 0.00 s 5563s [4538/5474] TestHash#test_transform_keys_on_identhash = 0.00 s 5563s [4539/5474] TestHash#test_cmp_samekeys = 0.00 s 5563s [4540/5474] TestHash#test_wrapper = 0.00 s 5563s [4541/5474] TestHash#test_reject! = 0.00 s 5563s [4542/5474] TestHash#test_select_reject_will_not_rehash = 0.00 s 5563s [4543/5474] TestHash#test_label_syntax = 0.00 s 5563s [4544/5474] TestHash#test_to_h = 0.00 s 5563s [4545/5474] TestHash#test_hash_bignum_hash = 0.00 s 5563s [4546/5474] TestHash#test_flatten = 0.00 s 5563s [4547/5474] TestHash#test_key = 0.00 s 5563s [4548/5474] TestHash#test_invert = 0.00 s 5563s [4549/5474] TestHash#test_same_key = 0.00 s 5563s [4550/5474] TestHash#test_create = 0.00 s 5563s [4551/5474] TestHash#test_key2? = 0.00 s 5563s [4552/5474] TestHash#test_s_AREF_from_list = 0.00 s 5563s [4553/5474] TestHash#test_sort = 0.00 s 5563s [4554/5474] TestHash#test_compare_by_identity = 0.00 s 5563s [4555/5474] TestHash#test_dup_will_not_rehash = 0.00 s 5563s [4556/5474] TestHash#test_s_AREF_from_hash = 0.00 s 5563s [4557/5474] TestHash#test_filter! = 0.01 s 5563s [4558/5474] TestHash#test_merge_on_identhash = 0.00 s 5563s [4559/5474] TestHash#test_ASET_fstring_key = 0.00 s 5563s [4560/5474] TestHash#test_to_a = 0.00 s 5563s [4561/5474] TestHash#test_replace_bug15358 = 0.00 s 5563s [4562/5474] TestHash#test_each_key = 0.00 s 5563s [4563/5474] TestHash#test_transform_keys_bang = 0.01 s 5563s [4564/5474] TestHash#test_try_convert = 0.00 s 5563s [4565/5474] TestHash#test_s_AREF_key_tampering = 0.00 s 5563s [4566/5474] TestHash#test_value2? = 0.00 s 5563s [4567/5474] TestHash#test_to_hash = 0.00 s 5563s [4568/5474] TestHash#test_nil_to_h = 0.00 s 5563s [4569/5474] TestHash#test_self_initialize_copy = 0.00 s 5563s [4570/5474] TestHash#test_default = 0.00 s 5563s [4571/5474] TestHash#test_ruby2_keywords_hash = 0.00 s 5563s [4572/5474] TestHash#test_to_h_default_value = 0.00 s 5563s [4573/5474] TestHash#test_keep_if = 0.00 s 5563s [4574/5474] TestHash#test_replace2 = 0.01 s 5563s [4575/5474] TestHash#test_replace = 0.00 s 5564s [4576/5474] TestHash#test_broken_hash_value = 0.64 s 5564s [4577/5474] TestHash#test_assoc_compare_by_identity = 0.00 s 5564s [4578/5474] TestHash#test_ASET_fstring_non_literal_key = 0.00 s 5564s [4579/5474] TestHash#test_to_s = 0.00 s 5564s [4580/5474] TestHash#test_hash_hash = 0.00 s 5564s [4581/5474] TestHash#test_recursive_hash_value_array_hash = 0.00 s 5564s [4582/5474] TestHash#test_s_new = 0.00 s 5564s [4583/5474] TestHash#test_hash_aref_fstring_identity = 0.00 s 5564s [4584/5474] TestHash#test_slice = 0.00 s 5564s [4585/5474] TestHash#test_recursive_key = 0.00 s 5564s [4586/5474] TestHash#test_fetch = 0.00 s 5564s [4587/5474] TestHash#test_compact = 0.00 s 5564s [4588/5474] TestHash#test_keys = 0.00 s 5564s [4589/5474] TestHash#test_recursive_hash_value_struct = 0.00 s 5564s [4590/5474] TestHash#test_shift = 0.00 s 5564s [4591/5474] TestHash#test_length = 0.00 s 5564s [4592/5474] TestHash#test_each = 0.00 s 5564s [4593/5474] TestHash#test_reserved_hash_val = 0.00 s 5564s [4594/5474] TestHash#test_update5 = 0.01 s 5564s [4595/5474] TestHash#test_shift_none = 0.00 s 5564s [4596/5474] TestHash#test_default_proc = 0.00 s 5564s [4597/5474] TestHash#test_filter = 0.01 s 5564s [4598/5474] TestHash#test_update3 = 0.00 s 5564s [4599/5474] TestHash#test_store = 0.00 s 5564s [4600/5474] TestHash#test_values = 0.00 s 5564s [4601/5474] TestHash#test_EQUAL = 0.00 s 5564s [4602/5474] TestHash#test_fetch_values = 0.00 s 5564s [4603/5474] TestHash#test_s_AREF_from_pairs = 0.00 s 5564s [4604/5474] TestHash#test_equal2 = 0.00 s 5564s [4605/5474] TestHash#test_replace_bug9230 = 0.00 s 5564s [4606/5474] TestHash#test_transform_values_on_identhash = 0.00 s 5564s [4607/5474] TestHash#test_size = 0.00 s 5564s [4608/5474] TestHash#test_transform_values = 0.00 s 5564s [4609/5474] TestHash#test_s_AREF_duplicated_key = 0.00 s 5564s [4610/5474] TestHash#test_rassoc = 0.00 s 5564s [4611/5474] TestHash#test_to_h_instance_variable = 0.00 s 5564s [4612/5474] TestHash#test_reject = 0.01 s 5564s [4613/5474] TestHash#test_recursive_hash_value_hash_array = 0.00 s 5564s [4614/5474] TestHash#test_bug_12706 = 0.00 s 5564s [4615/5474] TestHash#test_clone = 0.00 s 5564s [4616/5474] TestHash#test_select = 0.00 s 5564s [4617/5474] TestHash#test_include? = 0.00 s 5564s [4618/5474] TestHash#test_AREF = 0.00 s 5564s [4619/5474] TestVMDump#test_darwin_invalid_access = 0.00 s 5564s [4620/5474] TestVMDump#test_darwin_segv_in_syscall = 0.00 s 5564s [4621/5474] TestVMDump#test_darwin_invalid_call = 0.00 s 5569s [4622/5474] TestSleep#test_sleep_5sec = 5.00 s 5569s [4623/5474] TestSystem#test_empty_evstr = 0.00 s 5569s [4624/5474] TestSystem#test_system_at = 0.00 s 5569s [4625/5474] TestSystem#test_system_redirect_win = 0.00 s 5569s [4626/5474] TestTrace#test_trace = 0.00 s 5569s [4627/5474] TestTrace#test_trace_proc_that_raises_exception = 0.00 s 5569s Finished tests in 1325.564226s, 3.4906 tests/s, 1394.1392 assertions/s. 5569s 4627 tests, 1848021 assertions, 0 failures, 0 errors, 19 skips 5569s 5569s 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 [x86_64-linux] 5570s autopkgtest [09:11:39]: test mri-core: -----------------------] 5570s autopkgtest [09:11:39]: test mri-core: - - - - - - - - - - results - - - - - - - - - - 5570s mri-core PASS 5570s autopkgtest [09:11:39]: test mri-extra: preparing testbed 5573s Reading package lists... 5573s Building dependency tree... 5573s Reading state information... 5574s Starting pkgProblemResolver with broken count: 0 5574s Starting 2 pkgProblemResolver with broken count: 0 5574s Done 5574s The following NEW packages will be installed: 5574s autopkgtest-satdep 5574s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 5574s Need to get 0 B/760 B of archives. 5574s After this operation, 0 B of additional disk space will be used. 5574s Get:1 /tmp/autopkgtest.mg4W0U/11-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [760 B] 5575s Selecting previously unselected package autopkgtest-satdep. 5575s (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 ... 81125 files and directories currently installed.) 5575s Preparing to unpack .../11-autopkgtest-satdep.deb ... 5575s Unpacking autopkgtest-satdep (0) ... 5575s Setting up autopkgtest-satdep (0) ... 5577s (Reading database ... 81125 files and directories currently installed.) 5577s Removing autopkgtest-satdep (0) ... 5577s autopkgtest [09:11:46]: test mri-extra: [----------------------- 5577s installing system gems into jruby: 5577s * diff-lcs-1.5.1 5577s * minitest-5.15.0 5577s * power_assert-2.0.1 5577s * rake-13.0.6 5577s * rexml-3.2.5 5577s * rspec-3.13.0 5577s * rspec-core-3.13.0 5577s * rspec-expectations-3.13.0 5577s * rspec-mocks-3.13.0 5577s * rspec-support-3.13.1 5577s * test-unit-3.5.3 5583s /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 5588s Run options: 5588s --seed=63150 5588s --color=never 5588s --tty=no 5588s --excludes=test/mri/excludes:test/mri/excludes_wip 5588s -q 5588s -- 5588s 5588s # Running tests: 5588s 5599s org/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 5599s from org/jruby/RubyIO.java:1479:in `write' 5599s from org/jruby/RubyIO.java:2853:in `write' 5599s from org/jruby/RubyIO.java:1855:in `print' 5599s from org/jruby/RubyKernel.java:753:in `print' 5599s from -e:1:in `
' 5643s org/jruby/RubyIO.java:1590:in `write': Broken pipe - (Errno::EPIPE) 5643s from org/jruby/RubyIO.java:1479:in `write' 5643s from org/jruby/RubyIO.java:2853:in `write' 5643s from org/jruby/RubyIO.java:1855:in `print' 5643s from org/jruby/RubyKernel.java:753:in `print' 5643s from -e:1:in `
' 6266s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/ruby/test_syntax.rb:149: warning: key :a is duplicated and overwritten on line 149 6266s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/ruby/test_syntax.rb:150: warning: key :a is duplicated and overwritten on line 150 6420s sh: 1: cd: can't cd to /tmp/d20240327-26971-qm2umq/vd 6547s sh: 1: exec: /tmp/d20240327-26971-9wbl21/notexist: not found 6593s 6593s 1) Failure: 6593s TestOpen3#test_pipeline_r [/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_open3.rb:270]: 6593s <"12"> expected but was 6593s <"2">. 6593s 6593s 2) Failure: 6593s TestOpen3#test_capture3_flip [/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_open3.rb:190]: 6593s <"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"> expected but was 6593s <"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooorake aborted! 6593s Command failed with status (5): [/usr/share/jruby/bin/jruby test/mri/runner...] 6593s oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo">. 6593s 6593s 3) Failure: 6593s TestOpen3#test_pipeline [/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_open3.rb:330]: 6593s Failed assertion, no message given. 6593s 6593s 4) Failure: 6593s TestOpen3#test_pipeline_start [/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_open3.rb:305]: 6593s expected but was 6593s . 6593s 6593s 5) Failure: 6593s TestOpen3#test_pipeline_w [/tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_open3.rb:288]: 6593s expected but was 6593s . 6593s 6593s Finished tests in 1004.615609s, 0.3434 tests/s, 20.9194 assertions/s. 6593s 345 tests, 21016 assertions, 5 failures, 0 errors, 2 skips 6593s 6593s 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 [x86_64-linux] 6593s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/rakelib/test.rake:118:in `block in
' 6593s /usr/lib/ruby/gems/3.1.0/gems/rake-13.0.6/exe/rake:27:in `
' 6593s Tasks: TOP => test:mri:extra => test:mri:extra:int 6593s (See full trace by running task with --trace) 6593s autopkgtest [09:28:42]: test mri-extra: -----------------------] 6594s autopkgtest [09:28:43]: test mri-extra: - - - - - - - - - - results - - - - - - - - - - 6594s mri-extra FLAKY non-zero exit status 1 6594s autopkgtest [09:28:43]: test mri-stdlib: preparing testbed 6595s Reading package lists... 6595s Building dependency tree... 6595s Reading state information... 6595s Starting pkgProblemResolver with broken count: 0 6595s Starting 2 pkgProblemResolver with broken count: 0 6595s Done 6596s The following NEW packages will be installed: 6596s autopkgtest-satdep 6596s 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. 6596s Need to get 0 B/760 B of archives. 6596s After this operation, 0 B of additional disk space will be used. 6596s Get:1 /tmp/autopkgtest.mg4W0U/12-autopkgtest-satdep.deb autopkgtest-satdep amd64 0 [760 B] 6596s Selecting previously unselected package autopkgtest-satdep. 6596s (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 ... 81125 files and directories currently installed.) 6596s Preparing to unpack .../12-autopkgtest-satdep.deb ... 6596s Unpacking autopkgtest-satdep (0) ... 6596s Setting up autopkgtest-satdep (0) ... 6598s (Reading database ... 81125 files and directories currently installed.) 6598s Removing autopkgtest-satdep (0) ... 6598s autopkgtest [09:28:47]: test mri-stdlib: [----------------------- 6599s installing system gems into jruby: 6599s * diff-lcs-1.5.1 6599s * minitest-5.15.0 6599s * power_assert-2.0.1 6599s * rake-13.0.6 6599s * rexml-3.2.5 6599s * rspec-3.13.0 6599s * rspec-core-3.13.0 6599s * rspec-expectations-3.13.0 6599s * rspec-mocks-3.13.0 6599s * rspec-support-3.13.1 6599s * test-unit-3.5.3 6599s ** debugging mode enabled ** 6599s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_success 6599s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_failure 6599s excluded test: test/mri/excludes/TestOpenURISSL.rb::test_validation_noverify 6599s excluded test: test/mri/excludes/TestNetHTTP_v1_2.rb::test_get__break 6599s excluded test: test/mri/excludes/TestRelineAsReadline.rb::test_interrupt_in_other_thread 6605s /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 6615s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/matrix/test_matrix.rb: no such file to load -- matrix 6616s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/net/ftp/test_buffered_socket.rb: no such file to load -- net/ftp 6618s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/net/pop/test_pop.rb: no such file to load -- net/pop 6618s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/net/smtp/test_response.rb: no such file to load -- net/smtp 6619s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6619s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6619s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6619s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s /tmp/autopkgtest.mg4W0U/autopkgtest_tmp/test/mri/test_prime.rb: no such file to load -- prime 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s !!!! Missing jruby-win32ole gem: jruby -S gem install jruby-win32ole 6620s Run options: 6620s --seed=18014 6620s --color=never 6620s -v 6620s --excludes=test/mri/excludes:test/mri/excludes_wip 6620s -q 6620s -- 6620s 6620s # Running tests: 6620s 6620s [ 1/8505] PStoreTest#test_changes_are_not_written_on_abort = 0.04 s 6620s [ 2/8505] PStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.07 s 6620s [ 3/8505] PStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.01 s 6620s [ 4/8505] PStoreTest#test_changes_after_commit_are_discarded = 0.01 s 6620s [ 5/8505] PStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.01 s 6620s [ 6/8505] PStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 6620s [ 7/8505] PStoreTest#test_nested_transaction_raises_error = 0.02 s 6620s [ 8/8505] PStoreTest#test_thread_safe = 0.12 s 6620s [ 9/8505] PStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 6620s [ 10/8505] TestDigest::TestMD5#test_eq = 0.01 s 6620s [ 11/8505] TestDigest::TestMD5#test_s_base64digest = 0.01 s 6620s [ 12/8505] TestDigest::TestMD5#test_alignment = 0.00 s 6620s [ 13/8505] TestDigest::TestMD5#test_bubblebabble_class = 0.00 s 6620s [ 14/8505] TestDigest::TestMD5#test_s_hexdigest = 0.00 s 6620s [ 15/8505] TestDigest::TestMD5#test_bubblebabble = 0.00 s 6620s [ 16/8505] TestDigest::TestMD5#test_update = 0.00 s 6620s [ 17/8505] TestDigest::TestMD5#test_instance_eval = 0.01 s 6620s [ 18/8505] TestDigest::TestMD5#test_s_file = 0.00 s 6620s [ 19/8505] TestDigest::TestMD5#test_bubblebabble_instance = 0.00 s 6620s [ 20/8505] TestDigest::TestMD5#test_s_digest = 0.01 s 6620s [ 21/8505] TestDigest::TestMD5#test_s_new = 0.01 s 6624s [ 22/8505] TestExtLibs#test_existence_of_stringio = 3.67 s 6628s [ 23/8505] TestExtLibs#test_existence_of_digest/sha2 = 3.60 s 6631s [ 24/8505] TestExtLibs#test_existence_of_rbconfig/sizeof = 3.45 s 6634s [ 25/8505] TestExtLibs#test_existence_of_nkf = 3.36 s 6638s [ 26/8505] TestExtLibs#test_existence_of_thread = 3.38 s 6641s [ 27/8505] TestExtLibs#test_existence_of_date = 3.46 s 6645s [ 28/8505] TestExtLibs#test_existence_of_pathname = 3.43 s 6648s [ 29/8505] TestExtLibs#test_existence_of_json = 3.22 s 6651s [ 30/8505] TestExtLibs#test_existence_of_objspace = 3.23 s 6655s [ 31/8505] TestExtLibs#test_existence_of_zlib = 3.33 s 6658s [ 32/8505] TestExtLibs#test_existence_of_io/wait = 3.17 s 6661s [ 33/8505] TestExtLibs#test_existence_of_io/nonblock = 3.07 s 6664s [ 34/8505] TestExtLibs#test_existence_of_coverage = 3.50 s 6668s [ 35/8505] TestExtLibs#test_existence_of_fcntl = 3.37 s 6671s [ 36/8505] TestExtLibs#test_existence_of_etc = 3.43 s 6675s [ 37/8505] TestExtLibs#test_existence_of_digest = 3.59 s 6678s [ 38/8505] TestExtLibs#test_existence_of_io/console = 3.39 s 6681s [ 39/8505] TestExtLibs#test_existence_of_syslog = 3.23 s 6685s [ 40/8505] TestExtLibs#test_existence_of_continuation = 3.63 s 6688s [ 41/8505] TestExtLibs#test_existence_of_digest/md5 = 3.22 s 6691s [ 42/8505] TestExtLibs#test_existence_of_digest/sha1 = 3.24 s 6695s [ 43/8505] TestExtLibs#test_existence_of_bigdecimal = 3.26 s 6698s [ 44/8505] TestExtLibs#test_existence_of_strscan = 3.63 s 6702s [ 45/8505] TestExtLibs#test_existence_of_socket = 3.49 s 6705s [ 46/8505] TestExtLibs#test_existence_of_fiddle = 3.48 s 6708s [ 47/8505] TestExtLibs#test_existence_of_digest/bubblebabble = 3.13 s 6712s [ 48/8505] TestExtLibs#test_existence_of_fiber = 3.22 s 6715s [ 49/8505] TestExtLibs#test_existence_of_ripper = 3.70 s 6715s [ 50/8505] TestMonitor#test_cond = 0.00 s 6715s [ 51/8505] TestMonitor#test_enter_second_after_killed_thread = 0.01 s 6715s [ 52/8505] TestMonitor#test_try_enter = 0.00 s 6715s [ 53/8505] TestMonitor#test_enter_in_different_fibers = 0.01 s 6715s [ 54/8505] TestMonitor#test_synchronize = 0.01 s 6715s [ 55/8505] TestMonitor#test_initialize_with_keyword_arg = 0.00 s 6715s [ 56/8505] TestMonitor#test_new_cond_before_initialize = 0.01 s 6715s [ 57/8505] TestMonitor#test_enter = 0.00 s 6715s [ 58/8505] TestMonitor#test_mon_locked_and_owned = 0.00 s 6715s [ 59/8505] TestMonitor#test_try_enter_second_after_killed_thread = 0.00 s 6715s [ 60/8505] TestMonitor#test_exit = 0.00 s 6715s [ 61/8505] TestERBEncoding#test_literal_encoding = 0.06 s 6715s [ 62/8505] TestERBEncoding#test_generate_magic_comment = 0.00 s 6715s [ 63/8505] TestERBEncoding#test_method_with_encoding = 0.02 s 6715s [ 64/8505] TestERBEncoding#test___ENCODING__ = 0.01 s 6715s [ 65/8505] TestERBEncoding#test_result_encoding = 0.01 s 6715s [ 66/8505] TestERBEncoding#test_recognize_magic_comment = 0.00 s 6715s [ 67/8505] TestIRB::TestInit#test_rc_file_in_subdir = 0.05 s 6716s [ 68/8505] TestIRB::TestInit#test_setup_with_argv_preserves_global_argv = 0.04 s 6720s [ 69/8505] TestIRB::TestInit#test_recovery_sigint = 4.45 s 6720s [ 70/8505] TestIRB::TestInit#test_no_color_environment_variable = 0.08 s 6720s [ 71/8505] TestIRB::TestInit#test_setup_with_minimum_argv_does_not_change_dollar0 = 0.00 s 6720s [ 72/8505] TestIRB::TestInit#test_rc_file = 0.01 s 6720s [ 73/8505] TestRDocServlet#test_documentation_source = 0.22 s 6720s [ 74/8505] TestRDocServlet#test_show_documentation_page = 0.15 s 6720s [ 75/8505] TestRDocServlet#test_not_found = 0.06 s 6721s [ 76/8505] TestRDocServlet#test_store_for_home = 0.01 s 6721s [ 77/8505] TestRDocServlet#test_documentation_page_page = 0.20 s 6721s [ 78/8505] TestRDocServlet#test_installed_docs = 0.04 s 6721s [ 79/8505] TestRDocServlet#test_ri_paths = 0.02 s 6721s [ 80/8505] TestRDocServlet#test_generator_for = 0.02 s 6721s [ 81/8505] TestRDocServlet#test_asset = 0.02 s 6721s [ 82/8505] TestRDocServlet#test_documentation_page_class = 0.14 s 6721s [ 83/8505] TestRDocServlet#test_store_for_extra = 0.01 s 6721s [ 84/8505] TestRDocServlet#test_root_search = 0.03 s 6721s [ 85/8505] TestRDocServlet#test_store_for_gem = 0.02 s 6721s [ 86/8505] TestRDocServlet#test_do_GET_root_search = 0.02 s 6721s [ 87/8505] TestRDocServlet#test_show_documentation_index = 0.02 s 6721s [ 88/8505] TestRDocServlet#test_do_GET_error = 0.01 s 6721s [ 89/8505] TestRDocServlet#test_if_modified_since = 0.02 s 6721s [ 90/8505] TestRDocServlet#test_do_GET_not_modified = 0.03 s 6721s [ 91/8505] TestRDocServlet#test_store_for_missing_gem = 0.01 s 6721s [ 92/8505] TestRDocServlet#test_if_modified_since_not_modified = 0.01 s 6721s [ 93/8505] TestRDocServlet#test_store_for_site = 0.01 s 6721s [ 94/8505] TestRDocServlet#test_documentation_page_page_with_nesting = 0.03 s 6721s [ 95/8505] TestRDocServlet#test_root = 0.02 s 6721s [ 96/8505] TestRDocServlet#test_not_found_message = 0.02 s 6721s [ 97/8505] TestRDocServlet#test_documentation_source_cached = 0.01 s 6721s [ 98/8505] TestRDocServlet#test_do_GET_root = 0.04 s 6721s [ 99/8505] TestRDocServlet#test_error = 0.02 s 6721s [ 100/8505] TestRDocServlet#test_show_documentation_table_of_contents = 0.03 s 6721s [ 101/8505] TestRDocServlet#test_store_for_missing_documentation = 0.01 s 6721s [ 102/8505] TestRDocServlet#test_do_GET_asset_darkfish = 0.02 s 6721s [ 103/8505] TestRDocServlet#test_documentation_page_not_found = 0.01 s 6721s [ 104/8505] TestRDocServlet#test_show_documentation_search_index = 0.01 s 6721s [ 105/8505] TestRDocServlet#test_do_GET_asset_json_index = 0.01 s 6721s [ 106/8505] TestRDocServlet#test_store_for_ruby = 0.01 s 6721s [ 107/8505] TestRDocServlet#test_do_GET_mount_path = 0.01 s 6721s [ 108/8505] TestRDocServlet#test_do_GET = 0.02 s 6721s [ 109/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_double_default = 0.02 s 6721s [ 110/8505] TestCSVWriteQuoteEmptyGenerateLine#test_quote_empty_default = 0.03 s 6721s [ 111/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_default = 0.00 s 6721s [ 112/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_only_false = 0.00 s 6722s [ 113/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_double_false = 0.00 s 6722s [ 114/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_only_default = 0.00 s 6722s [ 115/8505] TestCSVWriteQuoteEmptyGenerateLine#test_empty_false = 0.00 s 6722s [ 116/8505] TestCSVWriteQuoteEmptyGenerateLine#test_quote_empty_false = 0.00 s 6722s [ 117/8505] TestDigestExtend#test_digest = 0.00 s 6722s [ 118/8505] TestDigestExtend#test_digest_s_hexencode = 0.00 s 6722s [ 119/8505] TestDigestExtend#test_digest_length = 0.00 s 6722s [ 120/8505] TestDigestExtend#test_length = 0.00 s 6722s [ 121/8505] TestDigestExtend#test_block_length = 0.00 s 6722s [ 122/8505] TestDigestExtend#test_new = 0.00 s 6722s [ 123/8505] TestDigestExtend#test_hexdigest = 0.00 s 6722s [ 124/8505] TestDigestExtend#test_context = 0.00 s 6722s [ 125/8505] TestDigestExtend#test_class_reset = 0.00 s 6722s [ 126/8505] TestDigestExtend#test_digest_hexdigest = 0.00 s 6722s [ 127/8505] TestDigestExtend#test_to_s = 0.00 s 6722s [ 128/8505] TestDigestExtend#test_digest_hexdigest_bang = 0.00 s 6722s [ 129/8505] TestDigestRactor::TestSHA512Ractor#test_s_hexdigest = 0.00 s 6722s [ 130/8505] TestIRB::TestRubyLex#test_mixed_rescue = 0.34 s 6722s [ 131/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_do_in_class = 0.13 s 6722s [ 132/8505] TestIRB::TestRubyLex#test_incomplete_vim_coding_magic_comment = 0.00 s 6722s [ 133/8505] TestIRB::TestRubyLex#test_do_corresponding_to_loop = 0.01 s 6722s [ 134/8505] TestIRB::TestRubyLex#test_dyanmic_prompt_with_blank_line = 0.02 s 6722s [ 135/8505] TestIRB::TestRubyLex#test_oneliner_method_definition = 0.18 s 6722s [ 136/8505] TestIRB::TestRubyLex#test_symbols = 0.03 s 6722s [ 137/8505] TestIRB::TestRubyLex#test_incomplete_emacs_coding_magic_comment = 0.00 s 6722s [ 138/8505] TestIRB::TestRubyLex#test_braces_on_their_own_line = 0.02 s 6722s [ 139/8505] TestIRB::TestRubyLex#test_oneliner_def_in_multiple_lines = 0.03 s 6722s [ 140/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_in = 0.03 s 6722s [ 141/8505] TestIRB::TestRubyLex#test_broken_percent_literal = 0.00 s 6722s [ 142/8505] TestIRB::TestRubyLex#test_do_corresponding_to_times = 0.01 s 6722s [ 143/8505] TestIRB::TestRubyLex#test_bracket_corresponding_to_times = 0.02 s 6722s [ 144/8505] TestIRB::TestRubyLex#test_incomplete_coding_magic_comment = 0.00 s 6723s [ 145/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_do = 0.48 s 6723s [ 146/8505] TestIRB::TestRubyLex#test_a_closed_brace_and_not_closed_brace_in_a_line = 0.00 s 6723s [ 147/8505] TestIRB::TestRubyLex#test_auto_indent = 0.17 s 6723s [ 148/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_for_with_do = 0.02 s 6723s [ 149/8505] TestIRB::TestRubyLex#test_bracket_corresponding_to_loop = 0.01 s 6723s [ 150/8505] TestIRB::TestRubyLex#test_tlambda = 0.01 s 6723s [ 151/8505] TestIRB::TestRubyLex#test_broken_percent_literal_in_method = 0.01 s 6723s [ 152/8505] TestIRB::TestRubyLex#test_incomplete_encoding_magic_comment = 0.00 s 6723s [ 153/8505] TestIRB::TestRubyLex#test_endless_range_at_end_of_line = 0.01 s 6723s [ 154/8505] TestIRB::TestRubyLex#test_corresponding_syntax_to_keyword_for = 0.01 s 6723s [ 155/8505] Psych::TestException#test_psych_parse_stream_takes_file = 0.05 s 6723s [ 156/8505] Psych::TestException#test_load_file_exception = 0.01 s 6723s [ 157/8505] Psych::TestException#test_convert = 0.13 s 6723s [ 158/8505] Psych::TestException#test_parse_file_exception = 0.01 s 6723s [ 159/8505] Psych::TestException#test_attributes = 0.01 s 6723s [ 160/8505] Psych::TestException#test_psych_parse_takes_file = 0.00 s 6723s [ 161/8505] Psych::TestException#test_load_stream_takes_file = 0.01 s 6723s [ 162/8505] Psych::TestException#test_load_takes_file = 0.00 s 6723s [ 163/8505] Psych::TestException#test_psych_syntax_error = 0.01 s 6723s [ 164/8505] Psych::TestException#test_safe_load_file_exception = 0.00 s 6724s [ 165/8505] Psych::TestException#test_naming_exception = 0.25 s 6724s [ 166/8505] TestKconv#test_eucjp = 0.07 s 6724s [ 167/8505] TestKconv#test_kconv = 0.01 s 6724s [ 168/8505] TestKconv#test_utf8 = 0.02 s 6724s [ 169/8505] TestKconv#test_jis = 0.00 s 6724s [ 170/8505] TestKconv#test_shiftjis = 0.01 s 6724s [ 171/8505] TestFileUtilsNoWrite#test_singleton_visibility_identical? = 0.00 s 6724s [ 172/8505] TestFileUtilsNoWrite#test_visibility_fu_windows? = 0.00 s 6724s [ 173/8505] TestFileUtilsNoWrite#test_visibility_chdir = 0.00 s 6724s [ 174/8505] TestFileUtilsNoWrite#test_visibility_move = 0.00 s 6724s [ 175/8505] TestFileUtilsNoWrite#test_visibility_cp = 0.00 s 6724s [ 176/8505] TestFileUtilsNoWrite#test_visibility_mkpath = 0.00 s 6724s [ 177/8505] TestFileUtilsNoWrite#test_singleton_visibility_cd = 0.00 s 6724s [ 178/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_f = 0.00 s 6724s [ 179/8505] TestFileUtilsNoWrite#test_visibility_fu_stream_blksize = 0.00 s 6724s [ 180/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkpath = 0.00 s 6724s [ 181/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_blksize = 0.00 s 6724s [ 182/8505] TestFileUtilsNoWrite#test_singleton_visibility_getwd = 0.00 s 6724s [ 183/8505] TestFileUtilsNoWrite#test_visibility_safe_unlink = 0.00 s 6724s [ 184/8505] TestFileUtilsNoWrite#test_visibility_install = 0.00 s 6724s [ 185/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_stream = 0.00 s 6724s [ 186/8505] TestFileUtilsNoWrite#test_visibility_rm_rf = 0.00 s 6724s [ 187/8505] TestFileUtilsNoWrite#test_visibility_cd = 0.00 s 6724s [ 188/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_default_blksize = 0.00 s 6724s [ 189/8505] TestFileUtilsNoWrite#test_singleton_visibility_chown = 0.00 s 6724s [ 190/8505] TestFileUtilsNoWrite#test_visibility_copy = 0.00 s 6724s [ 191/8505] TestFileUtilsNoWrite#test_singleton_visibility_chown_R = 0.00 s 6724s [ 192/8505] TestFileUtilsNoWrite#test_visibility_symlink = 0.00 s 6724s [ 193/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_file = 0.00 s 6724s [ 194/8505] TestFileUtilsNoWrite#test_visibility_touch = 0.00 s 6724s [ 195/8505] TestFileUtilsNoWrite#test_visibility_link = 0.00 s 6724s [ 196/8505] TestFileUtilsNoWrite#test_singleton_visibility_compare_file = 0.00 s 6724s [ 197/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_r = 0.00 s 6724s [ 198/8505] TestFileUtilsNoWrite#test_singleton_visibility_makedirs = 0.00 s 6724s [ 199/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp = 0.00 s 6724s [ 200/8505] TestFileUtilsNoWrite#test_visibility_link_entry = 0.00 s 6724s [ 201/8505] TestFileUtilsNoWrite#test_singleton_visibility_link = 0.00 s 6724s [ 202/8505] TestFileUtilsNoWrite#test_visibility_rm_r = 0.00 s 6724s [ 203/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_file = 0.00 s 6724s [ 204/8505] TestFileUtilsNoWrite#test_visibility_copy_entry = 0.00 s 6724s [ 205/8505] TestFileUtilsNoWrite#test_visibility_uptodate? = 0.00 s 6724s [ 206/8505] TestFileUtilsNoWrite#test_visibility_makedirs = 0.00 s 6724s [ 207/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy = 0.00 s 6724s [ 208/8505] TestFileUtilsNoWrite#test_visibility_mv = 0.00 s 6724s [ 209/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkdir_p = 0.00 s 6724s [ 210/8505] TestFileUtilsNoWrite#test_visibility_chmod = 0.00 s 6724s [ 211/8505] TestFileUtilsNoWrite#test_visibility_fu_default_blksize = 0.00 s 6724s [ 212/8505] TestFileUtilsNoWrite#test_singleton_visibility_mv = 0.00 s 6724s [ 213/8505] TestFileUtilsNoWrite#test_visibility_remove = 0.00 s 6724s [ 214/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp_lr = 0.00 s 6724s [ 215/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln_sf = 0.00 s 6724s [ 216/8505] TestFileUtilsNoWrite#test_visibility_chmod_R = 0.00 s 6724s [ 217/8505] TestFileUtilsNoWrite#test_visibility_rm_f = 0.00 s 6724s [ 218/8505] TestFileUtilsNoWrite#test_visibility_compare_file = 0.00 s 6724s [ 219/8505] TestFileUtilsNoWrite#test_visibility_mkdir = 0.00 s 6724s [ 220/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove = 0.00 s 6724s [ 221/8505] TestFileUtilsNoWrite#test_singleton_visibility_move = 0.00 s 6724s [ 222/8505] TestFileUtilsNoWrite#test_visibility_remove_dir = 0.00 s 6724s [ 223/8505] TestFileUtilsNoWrite#test_singleton_visibility_rmdir = 0.00 s 6724s [ 224/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_dir = 0.00 s 6724s [ 225/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm = 0.00 s 6724s [ 226/8505] TestFileUtilsNoWrite#test_singleton_visibility_compare_stream = 0.00 s 6724s [ 227/8505] TestFileUtilsNoWrite#test_visibility_pwd = 0.00 s 6724s [ 228/8505] TestFileUtilsNoWrite#test_visibility_getwd = 0.00 s 6724s [ 229/8505] TestFileUtilsNoWrite#test_visibility_copy_stream = 0.00 s 6724s [ 230/8505] TestFileUtilsNoWrite#test_singleton_visibility_cmp = 0.00 s 6724s [ 231/8505] TestFileUtilsNoWrite#test_singleton_visibility_symlink = 0.00 s 6724s [ 232/8505] TestFileUtilsNoWrite#test_visibility_chown_R = 0.00 s 6724s [ 233/8505] TestFileUtilsNoWrite#test_singleton_visibility_pwd = 0.00 s 6724s [ 234/8505] TestFileUtilsNoWrite#test_visibility_ln_s = 0.00 s 6724s [ 235/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln = 0.00 s 6724s [ 236/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_entry = 0.00 s 6724s [ 237/8505] TestFileUtilsNoWrite#test_singleton_visibility_chdir = 0.00 s 6724s [ 238/8505] TestFileUtilsNoWrite#test_singleton_visibility_remove_entry_secure = 0.00 s 6724s [ 239/8505] TestFileUtilsNoWrite#test_visibility_remove_file = 0.00 s 6724s [ 240/8505] TestFileUtilsNoWrite#test_visibility_cmp = 0.00 s 6724s [ 241/8505] TestFileUtilsNoWrite#test_visibility_ln = 0.00 s 6724s [ 242/8505] TestFileUtilsNoWrite#test_singleton_visibility_touch = 0.00 s 6724s [ 243/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_windows? = 0.00 s 6724s [ 244/8505] TestFileUtilsNoWrite#test_visibility_chown = 0.00 s 6724s [ 245/8505] TestFileUtilsNoWrite#test_singleton_visibility_safe_unlink = 0.00 s 6724s [ 246/8505] TestFileUtilsNoWrite#test_visibility_rm = 0.00 s 6724s [ 247/8505] TestFileUtilsNoWrite#test_singleton_visibility_rm_rf = 0.00 s 6724s [ 248/8505] TestFileUtilsNoWrite#test_singleton_visibility_copy_entry = 0.00 s 6724s [ 249/8505] TestFileUtilsNoWrite#test_singleton_visibility_install = 0.00 s 6724s [ 250/8505] TestFileUtilsNoWrite#test_visibility_cp_r = 0.00 s 6724s [ 251/8505] TestFileUtilsNoWrite#test_singleton_visibility_link_entry = 0.00 s 6724s [ 252/8505] TestFileUtilsNoWrite#test_visibility_remove_entry = 0.00 s 6724s [ 253/8505] TestFileUtilsNoWrite#test_visibility_rmtree = 0.00 s 6724s [ 254/8505] TestFileUtilsNoWrite#test_singleton_visibility_cp_r = 0.00 s 6724s [ 255/8505] TestFileUtilsNoWrite#test_singleton_visibility_chmod = 0.00 s 6724s [ 256/8505] TestFileUtilsNoWrite#test_singleton_visibility_chmod_R = 0.00 s 6724s [ 257/8505] TestFileUtilsNoWrite#test_visibility_copy_file = 0.00 s 6724s [ 258/8505] TestFileUtilsNoWrite#test_singleton_visibility_uptodate? = 0.00 s 6724s [ 259/8505] TestFileUtilsNoWrite#test_singleton_visibility_rmtree = 0.00 s 6724s [ 260/8505] TestFileUtilsNoWrite#test_visibility_remove_entry_secure = 0.00 s 6724s [ 261/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_copy_stream0 = 0.00 s 6724s [ 262/8505] TestFileUtilsNoWrite#test_visibility_fu_blksize = 0.00 s 6724s [ 263/8505] TestFileUtilsNoWrite#test_visibility_rmdir = 0.00 s 6724s [ 264/8505] TestFileUtilsNoWrite#test_singleton_visibility_ln_s = 0.00 s 6724s [ 265/8505] TestFileUtilsNoWrite#test_visibility_compare_stream = 0.00 s 6724s [ 266/8505] TestFileUtilsNoWrite#test_singleton_visibility_fu_stream_blksize = 0.00 s 6724s [ 267/8505] TestFileUtilsNoWrite#test_singleton_visibility_mkdir = 0.00 s 6724s [ 268/8505] TestFileUtilsNoWrite#test_visibility_ln_sf = 0.00 s 6724s [ 269/8505] TestFileUtilsNoWrite#test_visibility_cp_lr = 0.00 s 6724s [ 270/8505] TestFileUtilsNoWrite#test_visibility_fu_copy_stream0 = 0.00 s 6724s [ 271/8505] TestFileUtilsNoWrite#test_visibility_identical? = 0.00 s 6724s [ 272/8505] TestFileUtilsNoWrite#test_visibility_mkdir_p = 0.00 s 6724s [ 273/8505] URI::TestLDAP#test_parse = 0.08 s 6724s [ 274/8505] URI::TestLDAP#test_parse_invalid_uri = 0.00 s 6724s [ 275/8505] URI::TestLDAP#test_select = 0.01 s 6724s [ 276/8505] TestCSVParseQuoteCharNil#test_space_no_ascii = 0.01 s 6724s [ 277/8505] TestCSVParseQuoteCharNil#test_line = 0.06 s 6724s [ 278/8505] TestCSVParseQuoteCharNil#test_unquoted_value_multiple_characters_col_sep = 0.01 s 6724s [ 279/8505] TestCSVParseQuoteCharNil#test_multiple_space = 0.00 s 6724s [ 280/8505] TestCSVParseQuoteCharNil#test_nil_nil = 0.00 s 6724s [ 281/8505] TestCSVParseQuoteCharNil#test_comma = 0.00 s 6724s [ 282/8505] TestCSVParseQuoteCharNil#test_multiple_characters_leading_empty_fields = 0.00 s 6724s [ 283/8505] TestCSVParseQuoteCharNil#test_csv_header_string = 0.02 s 6724s [ 284/8505] TestCSVParseQuoteCharNil#test_full = 0.00 s 6724s [ 285/8505] TestCSVParseQuoteCharNil#test_end_with_nil = 0.00 s 6724s [ 286/8505] TestCSVParseQuoteCharNil#test_space = 0.00 s 6724s [ 287/8505] TestCSVParseLiberalParsing::DifferentOFS#test_space_quote = 0.02 s 6724s [ 288/8505] TestCSVParseLiberalParsing::DifferentOFS#test_middle_quote_end = 0.02 s 6724s [ 289/8505] TestCSVParseLiberalParsing::DifferentOFS#test_double_quote_outside_quote = 0.02 s 6724s [ 290/8505] TestCSVParseLiberalParsing::DifferentOFS#test_middle_quote_start = 0.00 s 6724s [ 291/8505] TestCSVParseLiberalParsing::DifferentOFS#test_quote_after_column_separator = 0.00 s 6724s [ 292/8505] TestCSVParseLiberalParsing::DifferentOFS#test_backslash_quote = 0.00 s 6724s [ 293/8505] TestCSVParseLiberalParsing::DifferentOFS#test_quote_before_column_separator = 0.00 s 6724s [ 294/8505] Net::TestBufferedIO#test_eof? = 0.00 s 6724s [ 295/8505] TestIOWaitUncommon#test_wait_readable_random = 0.00 s 6724s [ 296/8505] TestIOWaitUncommon#test_wait_writable_null = 0.00 s 6724s [ 297/8505] TestIOWaitUncommon#test_wait_readable_urandom = 0.00 s 6724s [ 298/8505] TestIOWaitUncommon#test_wait_readable_zero = 0.00 s 6724s [ 299/8505] TestIOWaitUncommon#test_tty_wait = 0.01 s 6724s [ 300/8505] TestIOWaitUncommon#test_fifo_wait = 0.01 s 6724s [ 301/8505] TestDigestRactor::TestMD5Ractor#test_s_hexdigest = 0.00 s 6724s [ 302/8505] CGIUtilTest#test_cgi_escapeHTML:GB18030 = 0.00 s 6724s [ 303/8505] CGIUtilTest#test_cgi_escape:UTF8-KDDI = 0.00 s 6724s [ 304/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-2022-JP-KDDI = 0.00 s 6724s [ 305/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-JP = 0.00 s 6724s [ 306/8505] CGIUtilTest#test_cgi_escapeHTML:IBM866 = 0.00 s 6724s [ 307/8505] CGIUtilTest#test_cgi_escape_html_preserve_encoding = 0.00 s 6724s [ 308/8505] CGIUtilTest#test_cgi_unescapeHTML:macRoman = 0.00 s 6724s [ 309/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-JIS-2004 = 0.00 s 6724s [ 310/8505] CGIUtilTest#test_cgi_unescape:EUC-JIS-2004 = 0.00 s 6724s [ 311/8505] CGIUtilTest#test_cgi_escapeHTML:IBM864 = 0.00 s 6724s [ 312/8505] CGIUtilTest#test_cgi_unescape:GB18030 = 0.00 s 6724s [ 313/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM869 = 0.00 s 6724s [ 314/8505] CGIUtilTest#test_cgi_unescapeHTML:stateless-ISO-2022-JP = 0.00 s 6724s [ 315/8505] CGIUtilTest#test_cgi_unescape:UTF8-SoftBank = 0.00 s 6724s [ 316/8505] CGIUtilTest#test_cgi_escapeHTML:IBM862 = 0.00 s 6724s [ 317/8505] CGIUtilTest#test_cgi_unescape:KOI8-R = 0.00 s 6724s [ 318/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-9 = 0.00 s 6724s [ 319/8505] CGIUtilTest#test_cgi_unescape:macCyrillic = 0.00 s 6724s [ 320/8505] CGIUtilTest#test_cgi_unescape:SJIS-KDDI = 0.00 s 6724s [ 321/8505] CGIUtilTest#test_cgi_escapeHTML:IBM860 = 0.00 s 6724s [ 322/8505] CGIUtilTest#test_cgi_unescapeHTML:macCentEuro = 0.00 s 6724s [ 323/8505] CGIUtilTest#test_cgi_escape:ISO-8859-11 = 0.00 s 6724s [ 324/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM863 = 0.00 s 6724s [ 325/8505] CGIUtilTest#test_cgi_escapeHTML:macGreek = 0.00 s 6724s [ 326/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-16 = 0.00 s 6724s [ 327/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16LE = 0.01 s 6724s [ 328/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-7 = 0.00 s 6724s [ 329/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM861 = 0.00 s 6724s [ 330/8505] CGIUtilTest#test_cgi_escape:ISO-8859-13 = 0.00 s 6724s [ 331/8505] CGIUtilTest#test_cgi_escape:IBM775 = 0.00 s 6724s [ 332/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5-UAO = 0.00 s 6724s [ 333/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-SoftBank = 0.00 s 6724s [ 334/8505] CGIUtilTest#test_cgi_unescapeHTML:CP950 = 0.00 s 6724s [ 335/8505] CGIUtilTest#test_cgi_unescape:IBM852 = 0.00 s 6724s [ 336/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16BE = 0.00 s 6724s [ 337/8505] CGIUtilTest#test_cgi_escapeHTML:Big5-HKSCS = 0.00 s 6724s [ 338/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-5 = 0.00 s 6724s [ 339/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-14 = 0.00 s 6724s [ 340/8505] CGIUtilTest#test_cgi_escape:ISO-8859-15 = 0.00 s 6724s [ 341/8505] CGIUtilTest#test_cgi_escapeHTML:GB1988 = 0.00 s 6724s [ 342/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-8 = 0.00 s 6724s [ 343/8505] CGIUtilTest#test_cgi_escape = 0.00 s 6724s [ 344/8505] CGIUtilTest#test_cgi_escapeHTML:eucJP-ms = 0.00 s 6724s [ 345/8505] CGIUtilTest#test_cgi_unescape:CP852 = 0.00 s 6724s [ 346/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-3 = 0.00 s 6724s [ 347/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-MAC = 0.00 s 6724s [ 348/8505] CGIUtilTest#test_cgi_unescapeHTML:macTurkish = 0.00 s 6724s [ 349/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM737 = 0.00 s 6724s [ 350/8505] CGIUtilTest#test_cgi_unescapeHTML:GB12345 = 0.00 s 6724s [ 351/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM865 = 0.00 s 6724s [ 352/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-TW = 0.00 s 6724s [ 353/8505] CGIUtilTest#test_cgi_unescape:IBM437 = 0.00 s 6724s [ 354/8505] CGIUtilTest#test_cgi_include_unescapeHTML = 0.00 s 6724s [ 355/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-10 = 0.00 s 6724s [ 356/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-1 = 0.00 s 6724s [ 357/8505] CGIUtilTest#test_cgi_unescape:CP850 = 0.00 s 6724s [ 358/8505] CGIUtilTest#test_cgi_unescape:stateless-ISO-2022-JP-KDDI = 0.00 s 6724s [ 359/8505] CGIUtilTest#test_cgi_unescapeHTML:CP50221 = 0.01 s 6724s [ 360/8505] CGIUtilTest#test_cgi_escape:Windows-1256 = 0.00 s 6724s [ 361/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32BE = 0.00 s 6724s [ 362/8505] CGIUtilTest#test_cgi_escapeHTML:GB2312 = 0.00 s 6724s [ 363/8505] CGIUtilTest#test_cgi_escape:CP951 = 0.00 s 6724s [ 364/8505] CGIUtilTest#test_cgi_escape:Windows-1254 = 0.00 s 6724s [ 365/8505] CGIUtilTest#test_cgi_escape:CESU-8 = 0.00 s 6724s [ 366/8505] CGIUtilTest#test_cgi_escape:ISO-8859-2 = 0.00 s 6724s [ 367/8505] CGIUtilTest#test_cgi_escape:KOI8-U = 0.00 s 6724s [ 368/8505] CGIUtilTest#test_cgi_escapeHTML:Emacs-Mule = 0.00 s 6724s [ 369/8505] CGIUtilTest#test_cgi_escape:ASCII-8BIT = 0.00 s 6724s [ 370/8505] CGIUtilTest#test_cgi_escape:GB12345 = 0.00 s 6724s [ 371/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32LE = 0.00 s 6724s [ 372/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-9 = 0.00 s 6724s [ 373/8505] CGIUtilTest#test_cgi_escape:Windows-1252 = 0.00 s 6724s [ 374/8505] CGIUtilTest#test_cgi_escape:ISO-8859-4 = 0.00 s 6724s [ 375/8505] CGIUtilTest#test_cgi_unescapeHTML:CP949 = 0.00 s 6724s [ 376/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-JIS-2004 = 0.00 s 6724s [ 377/8505] CGIUtilTest#test_cgi_escape:ISO-8859-6 = 0.00 s 6724s [ 378/8505] CGIUtilTest#test_cgi_escape:Windows-1250 = 0.00 s 6724s [ 379/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-KDDI = 0.00 s 6724s [ 380/8505] CGIUtilTest#test_cgi_escapeHTML:CP855 = 0.00 s 6724s [ 381/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-13 = 0.00 s 6724s [ 382/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16 = 0.00 s 6724s [ 383/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-KR = 0.00 s 6724s [ 384/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-874 = 0.00 s 6724s [ 385/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-5 = 0.00 s 6724s [ 386/8505] CGIUtilTest#test_cgi_escape:ISO-8859-8 = 0.00 s 6724s [ 387/8505] CGIUtilTest#test_cgi_escape:macCentEuro = 0.00 s 6724s [ 388/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-11 = 0.00 s 6724s [ 389/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-7 = 0.00 s 6724s [ 390/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM720 = 0.00 s 6724s [ 391/8505] CGIUtilTest#test_cgi_unescape:CP51932 = 0.00 s 6724s [ 392/8505] CGIUtilTest#test_cgi_unescapeHTML:stateless-ISO-2022-JP-KDDI = 0.00 s 6724s [ 393/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-1 = 0.00 s 6724s [ 394/8505] CGIUtilTest#test_cgi_unescape:Windows-31J = 0.00 s 6724s [ 395/8505] CGIUtilTest#test_cgi_escapeHTML:US-ASCII = 0.00 s 6724s [ 396/8505] CGIUtilTest#test_cgi_unescapeHTML_uppercasecharacter = 0.00 s 6724s [ 397/8505] CGIUtilTest#test_cgi_escape:IBM857 = 0.00 s 6724s [ 398/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-15 = 0.00 s 6724s [ 399/8505] CGIUtilTest#test_cgi_unescape_preserve_encoding = 0.00 s 6724s [ 400/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-3 = 0.00 s 6724s [ 401/8505] CGIUtilTest#test_cgi_escape:Windows-1258 = 0.00 s 6724s [ 402/8505] CGIUtilTest#test_cgi_escapeHTML:CP51932 = 0.00 s 6724s [ 403/8505] CGIUtilTest#test_cgi_unescape:macTurkish = 0.00 s 6724s [ 404/8505] CGIUtilTest#test_cgi_escape:IBM855 = 0.00 s 6724s [ 405/8505] CGIUtilTest#test_cgi_escape:IBM860 = 0.00 s 6724s [ 406/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-5 = 0.00 s 6724s [ 407/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5-HKSCS = 0.00 s 6724s [ 408/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-SoftBank = 0.00 s 6724s [ 409/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-DoCoMo = 0.00 s 6724s [ 410/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-16BE = 0.01 s 6724s [ 411/8505] CGIUtilTest#test_cgi_escapeHTML:Big5-UAO = 0.00 s 6724s [ 412/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-31J = 0.00 s 6724s [ 413/8505] CGIUtilTest#test_cgi_unescape:EUC-KR = 0.00 s 6724s [ 414/8505] CGIUtilTest#test_cgi_escape:IBM862 = 0.00 s 6724s [ 415/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-7 = 0.00 s 6724s [ 416/8505] CGIUtilTest#test_cgi_escape:macIceland = 0.00 s 6724s [ 417/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16LE = 0.00 s 6724s [ 418/8505] CGIUtilTest#test_cgi_unescape:UTF8-KDDI = 0.00 s 6724s [ 419/8505] CGIUtilTest#test_cgi_unescapeHTML:macGreek = 0.00 s 6724s [ 420/8505] CGIUtilTest#test_cgi_escapeElement = 0.01 s 6724s [ 421/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1258 = 0.00 s 6724s [ 422/8505] CGIUtilTest#test_cgi_unescape:GBK = 0.00 s 6724s [ 423/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-1 = 0.00 s 6724s [ 424/8505] CGIUtilTest#test_cgi_escape:IBM864 = 0.00 s 6724s [ 425/8505] CGIUtilTest#test_cgi_unescape:IBM720 = 0.00 s 6724s [ 426/8505] CGIUtilTest#test_cgi_pretty = 0.01 s 6724s [ 427/8505] CGIUtilTest#test_cgi_escape:SJIS-KDDI = 0.00 s 6724s [ 428/8505] CGIUtilTest#test_cgi_unescape:Windows-874 = 0.00 s 6724s [ 429/8505] CGIUtilTest#test_cgi_escapeHTML:macTurkish = 0.00 s 6724s [ 430/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-MAC = 0.00 s 6724s [ 431/8505] CGIUtilTest#test_cgi_escape:EUC-JP = 0.00 s 6724s [ 432/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-3 = 0.00 s 6724s [ 433/8505] CGIUtilTest#test_cgi_escape:IBM866 = 0.00 s 6724s [ 434/8505] CGIUtilTest#test_cgi_unescapeHTML:eucJP-ms = 0.00 s 6724s [ 435/8505] CGIUtilTest#test_cgi_unescape:Big5 = 0.00 s 6724s [ 436/8505] CGIUtilTest#test_cgi_escape:CP850 = 0.00 s 6724s [ 437/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1252 = 0.00 s 6724s [ 438/8505] CGIUtilTest#test_cgi_escape:EUC-JIS-2004 = 0.00 s 6724s [ 439/8505] CGIUtilTest#test_cgi_escapeHTML:CP950 = 0.00 s 6725s [ 440/8505] CGIUtilTest#test_cgi_escapeHTML:macRoman = 0.00 s 6725s [ 441/8505] CGIUtilTest#test_cgi_escape:EUC-TW = 0.00 s 6725s [ 442/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1250 = 0.00 s 6725s [ 443/8505] CGIUtilTest#test_cgi_escape:CP852 = 0.00 s 6725s [ 444/8505] CGIUtilTest#test_cgi_unescape:Emacs-Mule = 0.00 s 6725s [ 445/8505] CGIUtilTest#test_cgi_escape:UTF8-DoCoMo = 0.00 s 6725s [ 446/8505] CGIUtilTest#test_cgi_escapeHTML:CP50220 = 0.00 s 6725s [ 447/8505] CGIUtilTest#test_cgi_escape:stateless-ISO-2022-JP-KDDI = 0.00 s 6725s [ 448/8505] CGIUtilTest#test_cgi_escape:GB1988 = 0.00 s 6725s [ 449/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1256 = 0.00 s 6725s [ 450/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-9 = 0.00 s 6725s [ 451/8505] CGIUtilTest#test_cgi_escapeHTML:IBM775 = 0.00 s 6725s [ 452/8505] CGIUtilTest#test_cgi_unescapeHTML:macCroatian = 0.00 s 6725s [ 453/8505] CGIUtilTest#test_cgi_unescape:SJIS-SoftBank = 0.00 s 6725s [ 454/8505] CGIUtilTest#test_cgi_unescapeHTML_invalid = 0.00 s 6725s [ 455/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-8 = 0.00 s 6725s [ 456/8505] CGIUtilTest#test_cgi_escape_with_invalid_byte_sequence = 0.00 s 6725s [ 457/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1254 = 0.00 s 6725s [ 458/8505] CGIUtilTest#test_cgi_escape:MacJapanese = 0.00 s 6725s [ 459/8505] CGIUtilTest#test_cgi_escape:TIS-620 = 0.00 s 6725s [ 460/8505] CGIUtilTest#test_cgi_unescape:IBM863 = 0.00 s 6725s [ 461/8505] CGIUtilTest#test_cgi_unescape:stateless-ISO-2022-JP = 0.00 s 6725s [ 462/8505] CGIUtilTest#test_cgi_escape_html_dont_freeze = 0.01 s 6725s [ 463/8505] CGIUtilTest#test_cgi_unescapeHTML:TIS-620 = 0.00 s 6725s [ 464/8505] CGIUtilTest#test_cgi_escapeHTML = 0.00 s 6725s [ 465/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32 = 0.00 s 6725s [ 466/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-KDDI = 0.00 s 6725s [ 467/8505] CGIUtilTest#test_cgi_unescape:IBM861 = 0.00 s 6725s [ 468/8505] CGIUtilTest#test_cgi_include_escapeHTML = 0.00 s 6725s [ 469/8505] CGIUtilTest#test_cgi_unescape:Big5-HKSCS = 0.00 s 6725s [ 470/8505] CGIUtilTest#test_cgi_escape:SJIS-DoCoMo = 0.00 s 6725s [ 471/8505] CGIUtilTest#test_cgi_unescapeHTML:Shift_JIS = 0.00 s 6725s [ 472/8505] CGIUtilTest#test_cgi_escape:macUkraine = 0.00 s 6725s [ 473/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-10 = 0.00 s 6725s [ 474/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM852 = 0.00 s 6725s [ 475/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1258 = 0.00 s 6725s [ 476/8505] CGIUtilTest#test_cgi_unescape:Windows-1258 = 0.00 s 6725s [ 477/8505] CGIUtilTest#test_cgi_escapeHTML:KOI8-U = 0.00 s 6725s [ 478/8505] CGIUtilTest#test_cgi_unescape:IBM737 = 0.00 s 6725s [ 479/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-16 = 0.00 s 6725s [ 480/8505] CGIUtilTest#test_cgi_unescape:CP951 = 0.00 s 6725s [ 481/8505] CGIUtilTest#test_cgi_unescapeHTML:CP855 = 0.00 s 6725s [ 482/8505] CGIUtilTest#test_cgi_escapeHTML:CESU-8 = 0.00 s 6725s [ 483/8505] CGIUtilTest#test_cgi_include_escape = 0.00 s 6725s [ 484/8505] CGIUtilTest#test_cgi_escape:GB2312 = 0.00 s 6725s [ 485/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM437 = 0.00 s 6725s [ 486/8505] CGIUtilTest#test_cgi_unescapeHTML:US-ASCII = 0.00 s 6725s [ 487/8505] CGIUtilTest#test_cgi_unescape:IBM865 = 0.00 s 6725s [ 488/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-14 = 0.00 s 6725s [ 489/8505] CGIUtilTest#test_cgi_escapeHTML:CP949 = 0.00 s 6725s [ 490/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM037 = 0.00 s 6725s [ 491/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-2022-JP = 0.00 s 6725s [ 492/8505] CGIUtilTest#test_cgi_escapeHTML:IBM855 = 0.00 s 6725s [ 493/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF-32LE = 0.00 s 6725s [ 494/8505] CGIUtilTest#test_cgi_include_unescape = 0.00 s 6725s [ 495/8505] CGIUtilTest#test_cgi_unescape:macThai = 0.00 s 6725s [ 496/8505] CGIUtilTest#test_cgi_unescapeHTML:GBK = 0.00 s 6725s [ 497/8505] CGIUtilTest#test_cgi_unescapeHTML:Emacs-Mule = 0.00 s 6725s [ 498/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-DoCoMo = 0.00 s 6725s [ 499/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1254 = 0.00 s 6725s [ 500/8505] CGIUtilTest#test_cgi_unescape:Windows-1254 = 0.00 s 6725s [ 501/8505] CGIUtilTest#test_cgi_escape:macRomania = 0.00 s 6725s [ 502/8505] CGIUtilTest#test_cgi_escapeHTML:IBM857 = 0.00 s 6725s [ 503/8505] CGIUtilTest#test_cgi_escape:stateless-ISO-2022-JP = 0.00 s 6725s [ 504/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32BE = 0.00 s 6725s [ 505/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1256 = 0.00 s 6725s [ 506/8505] CGIUtilTest#test_cgi_escapeHTML:macCyrillic = 0.00 s 6725s [ 507/8505] CGIUtilTest#test_cgi_escapeHTML:macThai = 0.00 s 6725s [ 508/8505] CGIUtilTest#test_cgi_unescape:Windows-1256 = 0.00 s 6725s [ 509/8505] CGIUtilTest#test_cgi_unescape:IBM869 = 0.00 s 6725s [ 510/8505] CGIUtilTest#test_cgi_unescapeHTML:MacJapanese = 0.00 s 6725s [ 511/8505] CGIUtilTest#test_cgi_unescape:Windows-1250 = 0.00 s 6725s [ 512/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1250 = 0.00 s 6725s [ 513/8505] CGIUtilTest#test_cgi_unescapeHTML:KOI8-R = 0.00 s 6725s [ 514/8505] CGIUtilTest#test_cgi_unescape:Windows-1252 = 0.00 s 6725s [ 515/8505] CGIUtilTest#test_cgi_escape:macCroatian = 0.00 s 6725s [ 516/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1252 = 0.00 s 6725s [ 517/8505] CGIUtilTest#test_cgi_escape:macGreek = 0.00 s 6725s [ 518/8505] CGIUtilTest#test_cgi_unescape:macRomania = 0.00 s 6725s [ 519/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM857 = 0.00 s 6725s [ 520/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-15 = 0.00 s 6725s [ 521/8505] CGIUtilTest#test_cgi_escapeHTML:GB12345 = 0.00 s 6725s [ 522/8505] CGIUtilTest#test_cgi_unescape:IBM864 = 0.00 s 6725s [ 523/8505] CGIUtilTest#test_cgi_escape:Big5 = 0.00 s 6725s [ 524/8505] CGIUtilTest#test_cgi_escape:IBM720 = 0.00 s 6725s [ 525/8505] CGIUtilTest#test_cgi_unescape:GB12345 = 0.00 s 6725s [ 526/8505] CGIUtilTest#test_cgi_unescape:CP950 = 0.00 s 6725s [ 527/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-DoCoMo = 0.00 s 6725s [ 528/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM855 = 0.00 s 6725s [ 529/8505] CGIUtilTest#test_cgi_unescape:eucJP-ms = 0.00 s 6725s [ 530/8505] CGIUtilTest#test_cgi_unescape:EUC-JP = 0.00 s 6725s [ 531/8505] CGIUtilTest#test_cgi_unescape:IBM866 = 0.00 s 6725s [ 532/8505] CGIUtilTest#test_cgi_unescape:UTF8-MAC = 0.00 s 6725s [ 533/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-31J = 0.00 s 6725s [ 534/8505] CGIUtilTest#test_cgi_escape:eucJP-ms = 0.00 s 6725s [ 535/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-11 = 0.00 s 6725s [ 536/8505] CGIUtilTest#test_cgi_escape:EUC-KR = 0.00 s 6725s [ 537/8505] CGIUtilTest#test_cgi_escapeHTML:KOI8-R = 0.00 s 6725s [ 538/8505] CGIUtilTest#test_cgi_escape:UTF8-MAC = 0.00 s 6725s [ 539/8505] CGIUtilTest#test_cgi_unescapeHTML:CP852 = 0.00 s 6725s [ 540/8505] CGIUtilTest#test_cgi_unescape:UTF-8 = 0.00 s 6725s [ 541/8505] CGIUtilTest#test_cgi_unescape:IBM860 = 0.00 s 6725s [ 542/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-13 = 0.00 s 6725s [ 543/8505] CGIUtilTest#test_cgi_unescapeHTML:CP850 = 0.00 s 6725s [ 544/8505] CGIUtilTest#test_cgi_unescapeElement = 0.00 s 6725s [ 545/8505] CGIUtilTest#test_cgi_unescape:macGreek = 0.00 s 6725s [ 546/8505] CGIUtilTest#test_cgi_unescape:IBM862 = 0.00 s 6725s [ 547/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1253 = 0.00 s 6725s [ 548/8505] CGIUtilTest#test_cgi_unescape:Windows-1253 = 0.00 s 6725s [ 549/8505] CGIUtilTest#test_cgi_escape:Big5-HKSCS = 0.00 s 6725s [ 550/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-SoftBank = 0.00 s 6725s [ 551/8505] CGIUtilTest#test_cgi_unescape:macUkraine = 0.00 s 6725s [ 552/8505] CGIUtilTest#test_cgi_escapeHTML:IBM852 = 0.00 s 6725s [ 553/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1251 = 0.00 s 6725s [ 554/8505] CGIUtilTest#test_cgi_unescape:Windows-1251 = 0.00 s 6725s [ 555/8505] CGIUtilTest#test_cgi_unescapeHTML:macIceland = 0.00 s 6725s [ 556/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-32 = 0.00 s 6725s [ 557/8505] CGIUtilTest#test_cgi_escape:macCyrillic = 0.00 s 6725s [ 558/8505] CGIUtilTest#test_cgi_unescapeHTML:SJIS-KDDI = 0.00 s 6725s [ 559/8505] CGIUtilTest#test_cgi_unescape:Windows-1257 = 0.00 s 6725s [ 560/8505] CGIUtilTest#test_cgi_unescapeHTML = 0.00 s 6725s [ 561/8505] CGIUtilTest#test_cgi_unescape:EUC-TW = 0.00 s 6725s [ 562/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1257 = 0.00 s 6725s [ 563/8505] CGIUtilTest#test_cgi_escapeHTML:IBM437 = 0.00 s 6725s [ 564/8505] CGIUtilTest#test_cgi_unescapeHTML:GB18030 = 0.00 s 6725s [ 565/8505] CGIUtilTest#test_cgi_escapeHTML:stateless-ISO-2022-JP = 0.00 s 6725s [ 566/8505] CGIUtilTest#test_cgi_escapeHTML:IBM037 = 0.00 s 6725s [ 567/8505] CGIUtilTest#test_cgi_escape:CP51932 = 0.00 s 6725s [ 568/8505] CGIUtilTest#test_cgi_unescape:Windows-1255 = 0.00 s 6725s [ 569/8505] CGIUtilTest#test_cgi_unescape:GB1988 = 0.00 s 6725s [ 570/8505] CGIUtilTest#test_cgi_escapeHTML:Windows-1255 = 0.00 s 6725s [ 571/8505] CGIUtilTest#test_cgi_unescapeHTML:CESU-8 = 0.00 s 6725s [ 572/8505] CGIUtilTest#test_cgi_escapeHTML:macCroatian = 0.00 s 6725s [ 573/8505] CGIUtilTest#test_cgi_unescapeHTML:KOI8-U = 0.00 s 6725s [ 574/8505] CGIUtilTest#test_cgi_escapeHTML:ASCII-8BIT = 0.00 s 6725s [ 575/8505] CGIUtilTest#test_cgi_escape:Emacs-Mule = 0.00 s 6725s [ 576/8505] CGIUtilTest#test_cgi_escape_html_duplicated = 0.00 s 6725s [ 577/8505] CGIUtilTest#test_cgi_escape:IBM737 = 0.00 s 6725s [ 578/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-2 = 0.00 s 6725s [ 579/8505] CGIUtilTest#test_cgi_escape:Windows-31J = 0.00 s 6725s [ 580/8505] CGIUtilTest#test_cgi_escape:GB18030 = 0.00 s 6725s [ 581/8505] CGIUtilTest#test_cgi_unescapeHTML:macRomania = 0.00 s 6725s [ 582/8505] CGIUtilTest#test_cgi_escape:IBM865 = 0.00 s 6725s [ 583/8505] CGIUtilTest#test_cgi_unescapeHTML:CP51932 = 0.00 s 6725s [ 584/8505] CGIUtilTest#test_cgi_unescape:US-ASCII = 0.00 s 6725s [ 585/8505] CGIUtilTest#test_cgi_unescape:GB2312 = 0.00 s 6725s [ 586/8505] CGIUtilTest#test_cgi_escape:US-ASCII = 0.00 s 6725s [ 587/8505] CGIUtilTest#test_cgi_escape:IBM863 = 0.00 s 6725s [ 588/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-6 = 0.00 s 6725s [ 589/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-2022-JP = 0.00 s 6725s [ 590/8505] CGIUtilTest#test_cgi_unescape:macCentEuro = 0.00 s 6725s [ 591/8505] CGIUtilTest#test_cgi_escape:IBM861 = 0.00 s 6725s [ 592/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-4 = 0.00 s 6725s [ 593/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM775 = 0.00 s 6725s [ 594/8505] CGIUtilTest#test_cgi_unescape:macIceland = 0.00 s 6725s [ 595/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1255 = 0.00 s 6725s [ 596/8505] CGIUtilTest#test_cgi_unescapeHTML:macCyrillic = 0.00 s 6725s [ 597/8505] CGIUtilTest#test_cgi_escape:GBK = 0.00 s 6725s [ 598/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-8 = 0.00 s 6725s [ 599/8505] CGIUtilTest#test_cgi_escapeHTML:UTF8-DoCoMo = 0.00 s 6725s [ 600/8505] CGIUtilTest#test_cgi_escape:CP855 = 0.00 s 6725s [ 601/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1257 = 0.00 s 6725s [ 602/8505] CGIUtilTest#test_cgi_unescapeHTML:macUkraine = 0.00 s 6725s [ 603/8505] CGIUtilTest#test_cgi_escape:Shift_JIS = 0.00 s 6725s [ 604/8505] CGIUtilTest#test_cgi_escapeHTML:stateless-ISO-2022-JP-KDDI = 0.00 s 6725s [ 605/8505] CGIUtilTest#test_cgi_unescape:CP949 = 0.00 s 6725s [ 606/8505] CGIUtilTest#test_cgi_escape_preserve_encoding = 0.00 s 6725s [ 607/8505] CGIUtilTest#test_cgi_escapeHTML:CP50221 = 0.00 s 6725s [ 608/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1251 = 0.00 s 6725s [ 609/8505] CGIUtilTest#test_cgi_escape:UTF8-SoftBank = 0.00 s 6725s [ 610/8505] CGIUtilTest#test_cgi_escape:IBM869 = 0.00 s 6725s [ 611/8505] CGIUtilTest#test_cgi_escapeHTML:CP951 = 0.00 s 6728s [ 612/8505] CGIUtilTest#test_cgi_unescape_accept_charset = 3.16 s 6728s [ 613/8505] CGIUtilTest#test_cgi_escapeHTML:MacJapanese = 0.00 s 6728s [ 614/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-1253 = 0.00 s 6728s [ 615/8505] CGIUtilTest#test_cgi_escape:macRoman = 0.00 s 6728s [ 616/8505] CGIUtilTest#test_cgi_escapeHTML:macIceland = 0.00 s 6728s [ 617/8505] CGIUtilTest#test_cgi_include_h = 0.00 s 6728s [ 618/8505] CGIUtilTest#test_cgi_escape:Windows-1251 = 0.00 s 6728s [ 619/8505] CGIUtilTest#test_cgi_escape:ISO-8859-7 = 0.00 s 6728s [ 620/8505] CGIUtilTest#test_cgi_escape:UTF-8 = 0.00 s 6728s [ 621/8505] CGIUtilTest#test_cgi_escapeHTML:SJIS-SoftBank = 0.00 s 6728s [ 622/8505] CGIUtilTest#test_cgi_escape:ISO-8859-5 = 0.00 s 6728s [ 623/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-8 = 0.00 s 6728s [ 624/8505] CGIUtilTest#test_cgi_escape:Windows-1253 = 0.00 s 6728s [ 625/8505] CGIUtilTest#test_cgi_escapeHTML:UTF-16 = 0.00 s 6728s [ 626/8505] CGIUtilTest#test_cgi_escapeHTML:EUC-KR = 0.00 s 6728s [ 627/8505] CGIUtilTest#test_cgi_unescape:MacJapanese = 0.00 s 6728s [ 628/8505] CGIUtilTest#test_cgi_escape:KOI8-R = 0.00 s 6728s [ 629/8505] CGIUtilTest#test_cgi_escapeHTML:CP850 = 0.00 s 6728s [ 630/8505] CGIUtilTest#test_cgi_escape:macTurkish = 0.00 s 6728s [ 631/8505] CGIUtilTest#test_cgi_escape:ISO-8859-3 = 0.00 s 6728s [ 632/8505] CGIUtilTest#test_cgi_escape:Windows-1255 = 0.00 s 6728s [ 633/8505] CGIUtilTest#test_cgi_escape:CP950 = 0.00 s 6728s [ 634/8505] CGIUtilTest#test_cgi_unescape = 0.00 s 6728s [ 635/8505] CGIUtilTest#test_cgi_escapeHTML:IBM720 = 0.00 s 6728s [ 636/8505] CGIUtilTest#test_cgi_escapeHTML:CP852 = 0.00 s 6728s [ 637/8505] CGIUtilTest#test_cgi_escape:Windows-1257 = 0.00 s 6728s [ 638/8505] CGIUtilTest#test_cgi_unescapeHTML:CP50220 = 0.00 s 6728s [ 639/8505] CGIUtilTest#test_cgi_unescape:UTF8-DoCoMo = 0.00 s 6728s [ 640/8505] CGIUtilTest#test_cgi_unescape:macRoman = 0.00 s 6728s [ 641/8505] CGIUtilTest#test_cgi_escape:ISO-8859-1 = 0.00 s 6728s [ 642/8505] CGIUtilTest#test_cgi_escape:Big5-UAO = 0.00 s 6728s [ 643/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-2 = 0.00 s 6728s [ 644/8505] CGIUtilTest#test_cgi_unescapeHTML:UTF8-KDDI = 0.00 s 6728s [ 645/8505] CGIUtilTest#test_cgi_escape:Windows-874 = 0.00 s 6728s [ 646/8505] CGIUtilTest#test_cgi_escapeHTML:Shift_JIS = 0.00 s 6728s [ 647/8505] CGIUtilTest#test_cgi_escape:macThai = 0.00 s 6728s [ 648/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-14 = 0.00 s 6728s [ 649/8505] CGIUtilTest#test_cgi_unescape:ASCII-8BIT = 0.00 s 6728s [ 650/8505] CGIUtilTest#test_cgi_escapeHTML:GBK = 0.00 s 6728s [ 651/8505] CGIUtilTest#test_cgi_escapeHTML:macCentEuro = 0.00 s 6728s [ 652/8505] CGIUtilTest#test_cgi_unescapeHTML:GB2312 = 0.00 s 6728s [ 653/8505] CGIUtilTest#test_cgi_escape:IBM437 = 0.00 s 6728s [ 654/8505] CGIUtilTest#test_cgi_unescapeHTML:Big5 = 0.00 s 6728s [ 655/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-16 = 0.00 s 6728s [ 656/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-6 = 0.00 s 6728s [ 657/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-2022-JP-KDDI = 0.00 s 6728s [ 658/8505] CGIUtilTest#test_cgi_escapeHTML:Big5 = 0.00 s 6728s [ 659/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-10 = 0.00 s 6728s [ 660/8505] CGIUtilTest#test_cgi_escape_with_unreserved_characters = 0.00 s 6728s [ 661/8505] CGIUtilTest#test_cgi_escape:ISO-8859-9 = 0.00 s 6728s [ 662/8505] CGIUtilTest#test_cgi_unescape:ISO-8859-4 = 0.00 s 6728s [ 663/8505] CGIUtilTest#test_cgi_escape:IBM852 = 0.00 s 6728s [ 664/8505] CGIUtilTest#test_cgi_unescape:Big5-UAO = 0.00 s 6728s [ 665/8505] CGIUtilTest#test_cgi_unescape:IBM775 = 0.00 s 6728s [ 666/8505] CGIUtilTest#test_cgi_escapeHTML:IBM861 = 0.00 s 6728s [ 667/8505] CGIUtilTest#test_cgi_escapeHTML:macUkraine = 0.00 s 6728s [ 668/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-8 = 0.00 s 6728s [ 669/8505] CGIUtilTest#test_cgi_escapeHTML:IBM863 = 0.00 s 6728s [ 670/8505] CGIUtilTest#test_cgi_unescape:macCroatian = 0.00 s 6728s [ 671/8505] CGIUtilTest#test_cgi_escapeHTML:IBM865 = 0.00 s 6728s [ 672/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-TW = 0.00 s 6728s [ 673/8505] CGIUtilTest#test_cgi_escape:SJIS-SoftBank = 0.00 s 6728s [ 674/8505] CGIUtilTest#test_cgi_unescapeHTML:GB1988 = 0.00 s 6728s [ 675/8505] CGIUtilTest#test_cgi_unescape:KOI8-U = 0.00 s 6728s [ 676/8505] CGIUtilTest#test_cgi_unescapeHTML:macThai = 0.00 s 6728s [ 677/8505] CGIUtilTest#test_cgi_escapeHTML:IBM737 = 0.00 s 6728s [ 678/8505] CGIUtilTest#test_cgi_unescape:CESU-8 = 0.00 s 6728s [ 679/8505] CGIUtilTest#test_cgi_unescape:IBM857 = 0.00 s 6728s [ 680/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-11 = 0.00 s 6728s [ 681/8505] CGIUtilTest#test_cgi_escapeHTML:macRomania = 0.00 s 6728s [ 682/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM864 = 0.00 s 6728s [ 683/8505] CGIUtilTest#test_cgi_escape:ISO-8859-16 = 0.00 s 6728s [ 684/8505] CGIUtilTest#test_cgi_unescape:Shift_JIS = 0.00 s 6728s [ 685/8505] CGIUtilTest#test_cgi_escapeHTML:IBM869 = 0.00 s 6728s [ 686/8505] CGIUtilTest#test_cgi_unescape:IBM855 = 0.00 s 6728s [ 687/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-13 = 0.00 s 6728s [ 688/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-2 = 0.00 s 6728s [ 689/8505] CGIUtilTest#test_cgi_escape:CP949 = 0.00 s 6728s [ 690/8505] CGIUtilTest#test_cgi_unescapeHTML:Windows-874 = 0.00 s 6728s [ 691/8505] CGIUtilTest#test_cgi_escape:ISO-8859-14 = 0.00 s 6728s [ 692/8505] CGIUtilTest#test_cgi_unescapeHTML:EUC-JP = 0.00 s 6728s [ 693/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM866 = 0.00 s 6728s [ 694/8505] CGIUtilTest#test_cgi_unescapeHTML:ASCII-8BIT = 0.00 s 6728s [ 695/8505] CGIUtilTest#test_cgi_escapeHTML:ISO-8859-15 = 0.00 s 6728s [ 696/8505] CGIUtilTest#test_cgi_unescape:CP855 = 0.00 s 6728s [ 697/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-4 = 0.00 s 6728s [ 698/8505] CGIUtilTest#test_cgi_unescapeHTML:CP951 = 0.00 s 6728s [ 699/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM860 = 0.00 s 6728s [ 700/8505] CGIUtilTest#test_cgi_escapeHTML:TIS-620 = 0.00 s 6728s [ 701/8505] CGIUtilTest#test_cgi_unescapeHTML:ISO-8859-6 = 0.00 s 6728s [ 702/8505] CGIUtilTest#test_cgi_unescape:SJIS-DoCoMo = 0.00 s 6728s [ 703/8505] CGIUtilTest#test_cgi_unescape:TIS-620 = 0.00 s 6728s [ 704/8505] CGIUtilTest#test_cgi_escape:ISO-8859-10 = 0.00 s 6728s [ 705/8505] CGIUtilTest#test_cgi_unescapeHTML:IBM862 = 0.00 s 6728s [ 706/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_double_default = 0.00 s 6728s [ 707/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_quote_empty_default = 0.01 s 6728s [ 708/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_default = 0.01 s 6728s [ 709/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_only_false = 0.00 s 6728s [ 710/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_double_false = 0.00 s 6728s [ 711/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_only_default = 0.01 s 6728s [ 712/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_empty_false = 0.00 s 6728s [ 713/8505] TestCSVWriteQuoteEmptyGenerateLine::DifferentOFS#test_quote_empty_false = 0.01 s 6729s [ 714/8505] OpenSSL::TestEOF2#test_eof_1 = 1.44 s 6729s [ 715/8505] OpenSSL::TestEOF2#test_eof_3 = 0.10 s 6729s [ 716/8505] OpenSSL::TestEOF2#test_eof_0_rw = 0.01 s 6730s [ 717/8505] OpenSSL::TestEOF2#test_eof_2 = 0.08 s 6730s [ 718/8505] OpenSSL::TestEOF2#test_eof_0 = 0.30 s 6730s [ 719/8505] Psych::TestScalar#test_some_bytes = 0.01 s 6730s [ 720/8505] Psych::TestScalar#test_utf_8 = 0.01 s 6730s [ 721/8505] PPTestModule::PPCycleTest#test_struct = 0.06 s 6730s [ 722/8505] PPTestModule::PPCycleTest#test_share_nil = 0.01 s 6730s [ 723/8505] PPTestModule::PPCycleTest#test_array = 0.00 s 6730s [ 724/8505] PPTestModule::PPCycleTest#test_hash = 0.01 s 6730s [ 725/8505] TestRDocStats#test_report_class = 0.05 s 6730s [ 726/8505] TestRDocStats#test_report_method_parameters_yield = 0.15 s 6730s [ 727/8505] TestRDocStats#test_undoc_params_keywords = 0.04 s 6730s [ 728/8505] TestRDocStats#test_report_method_documented = 0.01 s 6730s [ 729/8505] TestRDocStats#test_report_method_class = 0.01 s 6730s [ 730/8505] TestRDocStats#test_doc_stats = 0.00 s 6730s [ 731/8505] TestRDocStats#test_report_method_parameters = 0.01 s 6730s [ 732/8505] TestRDocStats#test_report_class_empty = 0.00 s 6730s [ 733/8505] TestRDocStats#test_report_constant = 0.01 s 6730s [ 734/8505] TestRDocStats#test_report_attr_documented = 0.01 s 6730s [ 735/8505] TestRDocStats#test_summary_level_1 = 0.01 s 6730s [ 736/8505] TestRDocStats#test_report_skip_object = 0.06 s 6730s [ 737/8505] TestRDocStats#test_report_constant_alias = 0.02 s 6730s [ 738/8505] TestRDocStats#test_summary = 0.02 s 6730s [ 739/8505] TestRDocStats#test_report_class_documented_level_1 = 0.01 s 6730s [ 740/8505] TestRDocStats#test_report_method_parameters_documented = 0.01 s 6730s [ 741/8505] TestRDocStats#test_report_method_line = 0.00 s 6730s [ 742/8505] TestRDocStats#test_report_constant_documented = 0.00 s 6730s [ 743/8505] TestRDocStats#test_report_empty = 0.00 s 6730s [ 744/8505] TestRDocStats#test_report_class_module_ignore = 0.00 s 6730s [ 745/8505] TestRDocStats#test_report_attr_line = 0.00 s 6730s [ 746/8505] TestRDocStats#test_report_attr = 0.01 s 6730s [ 747/8505] TestRDocStats#test_report_class_method_documented = 0.00 s 6730s [ 748/8505] TestRDocStats#test_doc_stats_display_eh = 0.00 s 6730s [ 749/8505] TestRDocStats#test_undoc_params_documented = 0.01 s 6730s [ 750/8505] TestRDocStats#test_report_class_empty_2 = 0.00 s 6730s [ 751/8505] TestRDocStats#test_report_method = 0.00 s 6730s [ 752/8505] TestRDocStats#test_report_class_documented = 0.00 s 6730s [ 753/8505] TestRDocStats#test_doc_stats_documented = 0.00 s 6730s [ 754/8505] TestRDocStats#test_undoc_params_block = 0.00 s 6730s [ 755/8505] TestRDocStats#test_summary_level_false = 0.00 s 6730s [ 756/8505] TestRDocStats#test_undoc_params = 0.00 s 6730s [ 757/8505] TestRDocStats#test_undoc_params_splat = 0.00 s 6730s [ 758/8505] TestRDocStats#test_report_constant_line = 0.00 s 6730s [ 759/8505] TestFiberCurrentRactor#test_ractor_shareable = 0.00 s 6730s [ 760/8505] TestDateStrptime#test__strptime__2 = 0.01 s 6730s [ 761/8505] TestDateStrptime#test_strptime = 0.01 s 6730s [ 762/8505] TestDateStrptime#test__strptime__fail = 0.00 s 6731s [ 763/8505] TestDateStrptime#test_strptime__comp = 0.02 s 6731s [ 764/8505] TestDateStrptime#test_given_string = 0.00 s 6731s [ 765/8505] TestDateStrptime#test_strptime__minus = 0.00 s 6731s [ 766/8505] TestDateStrptime#test_strptime__d_to_s = 0.00 s 6731s [ 767/8505] TestDateStrptime#test__strptime = 0.03 s 6732s [ 768/8505] TestDateStrptime#test_strptime__2 = 1.48 s 6732s [ 769/8505] TestDateStrptime#test__strptime__width = 0.02 s 6732s [ 770/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_minute = 0.00 s 6732s [ 771/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_under_second_offset = 0.06 s 6732s [ 772/8505] TestCSVDataConverters#test_builtin_date_converter = 0.00 s 6732s [ 773/8505] TestCSVDataConverters#test_builtin_integer_converter = 0.01 s 6732s [ 774/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_date = 0.00 s 6732s [ 775/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_second = 0.00 s 6732s [ 776/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_utc = 0.00 s 6732s [ 777/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_offset = 0.00 s 6732s [ 778/8505] TestCSVDataConverters#test_builtin_date_time_converter = 0.00 s 6732s [ 779/8505] TestCSVDataConverters#test_builtin_float_converter = 0.01 s 6732s [ 780/8505] TestCSVDataConverters#test_builtin_date_time_converter_iso8601_under_second = 0.00 s 6732s [ 781/8505] TestSyslogLogger#test_unknown_eh = 0.00 s 6732s [ 782/8505] TestSyslogLogger#test_facility = 0.01 s 6732s [ 783/8505] TestSyslogLogger#test_custom_formatter = 0.00 s 6732s [ 784/8505] TestSyslogLogger#test_info_eh = 0.00 s 6732s [ 785/8505] TestSyslogLogger#test_debug_eh = 0.00 s 6732s [ 786/8505] TestSyslogLogger#test_warn_eh = 0.00 s 6732s [ 787/8505] TestSyslogLogger#test_fatal_eh = 0.00 s 6732s [ 788/8505] TestSyslogLogger#test_error_eh = 0.00 s 6732s [ 789/8505] TestSyslogLogger#test_initialize = 0.00 s 6732s [ 790/8505] TestDigest::TestSHA1#test_eq = 0.00 s 6732s [ 791/8505] TestDigest::TestSHA1#test_s_base64digest = 0.00 s 6732s [ 792/8505] TestDigest::TestSHA1#test_alignment = 0.00 s 6732s [ 793/8505] TestDigest::TestSHA1#test_bubblebabble_class = 0.00 s 6732s [ 794/8505] TestDigest::TestSHA1#test_s_hexdigest = 0.00 s 6732s [ 795/8505] TestDigest::TestSHA1#test_bubblebabble = 0.00 s 6732s [ 796/8505] TestDigest::TestSHA1#test_update = 0.00 s 6732s [ 797/8505] TestDigest::TestSHA1#test_instance_eval = 0.00 s 6732s [ 798/8505] TestDigest::TestSHA1#test_s_file = 0.01 s 6732s [ 799/8505] TestDigest::TestSHA1#test_bubblebabble_instance = 0.00 s 6732s [ 800/8505] TestDigest::TestSHA1#test_s_digest = 0.00 s 6732s [ 801/8505] TestDigest::TestSHA1#test_s_new = 0.00 s 6732s [ 802/8505] TestCSVParseEach#test_twice = 0.00 s 6733s [ 803/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_1 = 0.95 s 6733s [ 804/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_3 = 0.09 s 6733s [ 805/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_0_rw = 0.01 s 6733s [ 806/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_2 = 0.08 s 6734s [ 807/8505] OpenSSL::TestEOF2LowlevelSocket#test_eof_0 = 0.29 s 6734s [ 808/8505] TestResolvMDNS#test_mdns_each_address = 0.02 s 6734s [ 809/8505] TestOptionParser::NoArg::Def1#test_into = 0.04 s 6734s [ 810/8505] TestOptionParser::NoArg::Def1#test_nonopt_pattern = 0.02 s 6734s [ 811/8505] TestOptionParser::NoArg::Def1#test_order = 0.01 s 6734s [ 812/8505] TestOptionParser::NoArg::Def1#test_abbrev = 0.03 s 6734s [ 813/8505] TestOptionParser::NoArg::Def1#test_regexp = 0.00 s 6734s [ 814/8505] TestOptionParser::NoArg::Def1#test_hyphenize = 0.00 s 6734s [ 815/8505] TestOptionParser::NoArg::Def1#test_short = 0.00 s 6734s [ 816/8505] TestOptionParser::NoArg::Def1#test_ambiguous = 0.01 s 6734s [ 817/8505] TestOptionParser::NoArg::Def1#test_long = 0.01 s 6734s [ 818/8505] TestOptionParser::NoArg::Def1#test_permute = 0.01 s 6734s [ 819/8505] TestOptionParser::NoArg::Def1#test_require_exact = 0.02 s 6734s [ 820/8505] TestObserver#test_observers = 0.01 s 6734s [ 821/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_unknown = 0.00 s 6734s [ 822/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_name = 0.01 s 6734s [ 823/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_name_without_headers = 0.00 s 6734s [ 824/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_true = 0.00 s 6734s [ 825/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_false = 0.00 s 6734s [ 826/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_field_index = 0.00 s 6734s [ 827/8505] TestCSVWriteForceQuotesGenerate::DifferentOFS#test_default = 0.00 s 6734s [ 828/8505] URI::TestHTTP#test_request_uri = 0.00 s 6734s [ 829/8505] URI::TestHTTP#test_parse = 0.00 s 6734s [ 830/8505] URI::TestHTTP#test_normalize = 0.01 s 6734s [ 831/8505] URI::TestHTTP#test_equal = 0.00 s 6734s [ 832/8505] URI::TestHTTP#test_authority = 0.00 s 6734s [ 833/8505] URI::TestHTTP#test_build = 0.01 s 6734s [ 834/8505] URI::TestHTTP#test_origin = 0.00 s 6734s [ 835/8505] URI::TestHTTP#test_select = 0.00 s 6734s [ 836/8505] OpenSSL::TestEC#test_sign_verify = 0.13 s 6734s [ 837/8505] OpenSSL::TestEC#test_marshal = 0.00 s 6734s [ 838/8505] TestRDocNormalModule#test_ancestors_module = 0.37 s 6735s [ 839/8505] TestRDocNormalModule#test_definition = 0.11 s 6735s [ 840/8505] TestRDocNormalModule#test_module_eh = 0.07 s 6735s [ 841/8505] TestRDocNormalModule#test_aref = 0.08 s 6735s [ 842/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_true_write_headers = 0.05 s 6735s [ 843/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_append = 0.01 s 6735s [ 844/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_shortcut_with_io = 0.00 s 6735s [ 845/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_array_write_headers = 0.01 s 6735s [ 846/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter_headers_true = 0.00 s 6735s [ 847/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_filter = 0.01 s 6735s [ 848/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_shortcut = 0.00 s 6735s [ 849/8505] TestCSVInterfaceReadWrite::DifferentOFS#test_instance_same = 0.00 s 6735s [ 850/8505] TestStringIO#test_overwrite = 0.00 s 6735s [ 851/8505] TestStringIO#test_write_nonblock_no_exceptions = 0.00 s 6735s [ 852/8505] TestStringIO#test_read = 0.00 s 6735s [ 853/8505] TestStringIO#test_dup = 0.00 s 6735s [ 854/8505] TestStringIO#test_gets_chomp_eol = 0.00 s 6735s [ 855/8505] TestStringIO#test_each_codepoint = 0.00 s 6735s [ 856/8505] TestStringIO#test_each_byte = 0.00 s 6735s [ 857/8505] TestStringIO#test_readchar = 0.00 s 6735s [ 858/8505] TestStringIO#test_frozen_string = 0.00 s 6735s [ 859/8505] TestStringIO#test_getbyte = 0.00 s 6735s [ 860/8505] TestStringIO#test_gets_chomp = 0.00 s 6735s [ 861/8505] TestStringIO#test_write = 0.00 s 6735s [ 862/8505] TestStringIO#test_write_with_multiple_arguments = 0.00 s 6735s [ 863/8505] TestStringIO#test_eof_1 = 0.00 s 6735s [ 864/8505] TestStringIO#test_ungetc_padding = 0.00 s 6735s [ 865/8505] TestStringIO#test_truncate = 0.00 s 6735s [ 866/8505] TestStringIO#test_eof_3 = 0.00 s 6735s [ 867/8505] TestStringIO#test_fsync = 0.00 s 6735s [ 868/8505] TestStringIO#test_ungetbyte_padding = 0.00 s 6735s [ 869/8505] TestStringIO#test_readlines_limit_0 = 0.00 s 6735s [ 870/8505] TestStringIO#test_putc = 0.00 s 6735s [ 871/8505] TestStringIO#test_each_char = 0.00 s 6735s [ 872/8505] TestStringIO#test_write_encoding = 0.00 s 6735s [ 873/8505] TestStringIO#test_readbyte = 0.00 s 6735s [ 874/8505] TestStringIO#test_method = 0.00 s 6735s [ 875/8505] TestStringIO#test_binary_encoding_read_and_default_internal = 0.00 s 6735s [ 876/8505] TestStringIO#test_mode_error = 0.00 s 6735s [ 877/8505] TestStringIO#test_ungetbyte = 0.00 s 6735s [ 878/8505] TestStringIO#test_set_fcntl = 0.00 s 6735s [ 879/8505] TestStringIO#test_gets2 = 0.00 s 6735s [ 880/8505] TestStringIO#test_readlines = 0.00 s 6735s [ 881/8505] TestStringIO#test_each_char_closed = 0.00 s 6735s [ 882/8505] TestStringIO#test_ungetc = 0.00 s 6735s [ 883/8505] TestStringIO#test_close_write = 0.00 s 6735s [ 884/8505] TestStringIO#test_write_nonblock = 0.00 s 6735s [ 885/8505] TestStringIO#test_eof_0_seek = 0.00 s 6735s [ 886/8505] TestStringIO#test_putc_nonascii = 0.00 s 6735s [ 887/8505] TestStringIO#test_seek = 0.00 s 6735s [ 888/8505] TestStringIO#test_read_nonblock = 0.00 s 6735s [ 889/8505] TestStringIO#test_set_encoding = 0.00 s 6735s [ 890/8505] TestStringIO#test_each = 0.00 s 6735s [ 891/8505] TestStringIO#test_gets = 0.00 s 6735s [ 892/8505] TestStringIO#test_eof_0_rw = 0.00 s 6735s [ 893/8505] TestStringIO#test_isatty = 0.00 s 6735s [ 894/8505] TestStringIO#test_closed_read = 0.00 s 6735s [ 895/8505] TestStringIO#test_closed_write = 0.00 s 6735s [ 896/8505] TestStringIO#test_ungetc_pos = 0.00 s 6735s [ 897/8505] TestStringIO#test_size = 0.00 s 6735s [ 898/8505] TestStringIO#test_pos = 0.00 s 6735s [ 899/8505] TestStringIO#test_sync = 0.00 s 6735s [ 900/8505] TestStringIO#test_new_block_warning = 0.00 s 6735s [ 901/8505] TestStringIO#test_readpartial = 0.00 s 6735s [ 902/8505] TestStringIO#test_eof_1_seek = 0.00 s 6735s [ 903/8505] TestStringIO#test_closed = 0.00 s 6735s [ 904/8505] TestStringIO#test_sysread = 0.00 s 6735s [ 905/8505] TestStringIO#test_ungetbyte_pos = 0.00 s 6735s [ 906/8505] TestStringIO#test_initialize = 0.00 s 6735s [ 907/8505] TestStringIO#test_eof_2 = 0.00 s 6735s [ 908/8505] TestStringIO#test_eof_0 = 0.00 s 6735s [ 909/8505] TestStringIO#test_frozen = 0.00 s 6735s [ 910/8505] TestStringIO#test_open = 0.00 s 6735s [ 911/8505] TestStringIO#test_close = 0.00 s 6735s [ 912/8505] TestStringIO#test_seek_beyond_eof = 0.00 s 6735s [ 913/8505] TestStringIO#test_each_line_limit_0 = 0.00 s 6735s [ 914/8505] TestStringIO#test_reopen = 0.00 s 6735s [ 915/8505] TestStringIO#test_lineno = 0.00 s 6735s [ 916/8505] TestStringIO#test_binmode = 0.00 s 6735s [ 917/8505] TestStringIO#test_close_read = 0.00 s 6735s [ 918/8505] TestRDocMarkupInclude#test_equals2 = 0.01 s 6735s [ 919/8505] OpenSSL::TestRandom#test_pseudo_bytes = 0.00 s 6735s [ 920/8505] OpenSSL::TestRandom#test_random_bytes = 0.01 s 6735s [ 921/8505] TestRDocContextSection#test_marshal_dump_no_comment = 0.00 s 6735s [ 922/8505] TestRDocContextSection#test_hash = 0.00 s 6735s [ 923/8505] TestRDocContextSection#test_remove_comment_document = 0.01 s 6735s [ 924/8505] TestRDocContextSection#test_eql_eh = 0.00 s 6735s [ 925/8505] TestRDocContextSection#test_marshal_dump = 0.01 s 6735s [ 926/8505] TestRDocContextSection#test_extract_comment = 0.00 s 6735s [ 927/8505] TestRDocContextSection#test_marshal_load_version_0 = 0.00 s 6735s [ 928/8505] TestRDocContextSection#test_add_comment = 0.00 s 6735s [ 929/8505] TestRDocContextSection#test_aref = 0.00 s 6735s [ 930/8505] TestRDocContextSection#test_equals = 0.00 s 6735s [ 931/8505] TestRDocContextSection#test_remove_comment_array = 0.00 s 6735s [ 932/8505] TestRDocMarkupToBs#test_accept_list_end_number = 0.01 s 6735s [ 933/8505] TestRDocMarkupToBs#test_accept_verbatim_big_indent = 0.05 s 6735s [ 934/8505] TestRDocMarkupToBs#test_accept_list_item_end_number = 0.01 s 6735s [ 935/8505] TestRDocMarkupToBs#test_accept_document = 0.00 s 6735s [ 936/8505] TestRDocMarkupToBs#test_accept_list_item_start_number = 0.00 s 6735s [ 937/8505] TestRDocMarkupToBs#test_accept_heading_b = 0.01 s 6735s [ 938/8505] TestRDocMarkupToBs#test_accept_verbatim_indent = 0.00 s 6735s [ 939/8505] TestRDocMarkupToBs#test_list_nested = 0.01 s 6735s [ 940/8505] TestRDocMarkupToBs#test_accept_heading_indent = 0.01 s 6735s [ 941/8505] TestRDocMarkupToBs#test_list_verbatim = 0.00 s 6735s [ 942/8505] TestRDocMarkupToBs#test_accept_verbatim = 0.00 s 6735s [ 943/8505] TestRDocMarkupToBs#test_accept_paragraph_i = 0.00 s 6735s [ 944/8505] TestRDocMarkupToBs#test_accept_block_quote = 0.00 s 6735s [ 945/8505] TestRDocMarkupToBs#test_accept_paragraph_break = 0.00 s 6735s [ 946/8505] TestRDocMarkupToBs#test_accept_list_start_ualpha = 0.00 s 6735s [ 947/8505] TestRDocMarkupToBs#test_accept_heading_suppressed_crossref = 0.01 s 6735s [ 948/8505] TestRDocMarkupToBs#test_accept_heading_3 = 0.00 s 6735s [ 949/8505] TestRDocMarkupToBs#test_accept_heading_1 = 0.00 s 6735s [ 950/8505] TestRDocMarkupToBs#test_accept_list_start_lalpha = 0.00 s 6735s [ 951/8505] TestRDocMarkupToBs#test_accept_heading = 0.00 s 6735s [ 952/8505] TestRDocMarkupToBs#test_accept_list_end_label = 0.00 s 6735s [ 953/8505] TestRDocMarkupToBs#test_accept_list_item_start_bullet = 0.00 s 6735s [ 954/8505] TestRDocMarkupToBs#test_accept_paragraph_underscore = 0.00 s 6735s [ 955/8505] TestRDocMarkupToBs#test_accept_list_item_end_bullet = 0.00 s 6735s [ 956/8505] TestRDocMarkupToBs#test_accept_rule = 0.00 s 6735s [ 957/8505] TestRDocMarkupToBs#test_attributes = 0.01 s 6735s [ 958/8505] TestRDocMarkupToBs#test_accept_list_end_bullet = 0.00 s 6735s [ 959/8505] TestRDocMarkupToBs#test_accept_list_item_start_label = 0.00 s 6735s [ 960/8505] TestRDocMarkupToBs#test_accept_list_end_note = 0.00 s 6735s [ 961/8505] TestRDocMarkupToBs#test_accept_list_start_number = 0.00 s 6735s [ 962/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_multi_description = 0.00 s 6735s [ 963/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_multi_label = 0.00 s 6735s [ 964/8505] TestRDocMarkupToBs#test_accept_paragraph_wrap = 0.00 s 6735s [ 965/8505] TestRDocMarkupToBs#test_accept_list_item_end_note = 0.00 s 6735s [ 966/8505] TestRDocMarkupToBs#test_start_accepting = 0.00 s 6735s [ 967/8505] TestRDocMarkupToBs#test_accept_list_item_start_note_2 = 0.01 s 6735s [ 968/8505] TestRDocMarkupToBs#test_accept_paragraph_br = 0.00 s 6735s [ 969/8505] TestRDocMarkupToBs#test_accept_paragraph = 0.00 s 6735s [ 970/8505] TestRDocMarkupToBs#test_accept_blank_line = 0.00 s 6735s [ 971/8505] TestRDocMarkupToBs#test_accept_paragraph_star = 0.00 s 6735s [ 972/8505] TestRDocMarkupToBs#test_accept_heading_2 = 0.00 s 6735s [ 973/8505] TestRDocMarkupToBs#test_accept_list_start_label = 0.00 s 6735s [ 974/8505] TestRDocMarkupToBs#test_accept_heading_4 = 0.01 s 6735s [ 975/8505] TestRDocMarkupToBs#test_accept_paragraph_b = 0.00 s 6735s [ 976/8505] TestRDocMarkupToBs#test_accept_list_item_start_ualpha = 0.00 s 6735s [ 977/8505] TestRDocMarkupToBs#test_accept_rule_indent = 0.00 s 6735s [ 978/8505] TestRDocMarkupToBs#test_accept_list_item_end_ualpha = 0.00 s 6735s [ 979/8505] TestRDocMarkupToBs#test_accept_list_end_ualpha = 0.00 s 6735s [ 980/8505] TestRDocMarkupToBs#test_end_accepting = 0.00 s 6735s [ 981/8505] TestRDocMarkupToBs#test_accept_list_item_start_lalpha = 0.00 s 6735s [ 982/8505] TestRDocMarkupToBs#test_accept_list_item_end_lalpha = 0.00 s 6735s [ 983/8505] TestRDocMarkupToBs#test_accept_list_item_start_note = 0.00 s 6735s [ 984/8505] TestRDocMarkupToBs#test_accept_raw = 0.00 s 6735s [ 985/8505] TestRDocMarkupToBs#test_accept_list_end_lalpha = 0.00 s 6735s [ 986/8505] TestRDocMarkupToBs#test_accept_list_start_note = 0.00 s 6735s [ 987/8505] TestRDocMarkupToBs#test_accept_list_start_bullet = 0.00 s 6735s [ 988/8505] TestRDocMarkupToBs#test_accept_list_item_end_label = 0.00 s 6735s [ 989/8505] TestRDocMarkupToBs#test_accept_paragraph_plus = 0.00 s 6735s [ 990/8505] TestRDocMarkupToBs#test_accept_paragraph_indent = 0.00 s 6735s [ 991/8505] Psych::TestJSONTree#test_int = 0.00 s 6735s [ 992/8505] Psych::TestJSONTree#test_string = 0.01 s 6735s [ 993/8505] Psych::TestJSONTree#test_datetime = 0.00 s 6735s [ 994/8505] Psych::TestJSONTree#test_time = 0.01 s 6735s [ 995/8505] Psych::TestJSONTree#test_symbol = 0.00 s 6735s [ 996/8505] Psych::TestJSONTree#test_float = 0.00 s 6735s [ 997/8505] Psych::TestJSONTree#test_nil = 0.00 s 6735s [ 998/8505] Psych::TestJSONTree#test_hash = 0.00 s 6735s [ 999/8505] Psych::TestJSONTree#test_list_to_json = 0.00 s 6735s [1000/8505] Psych::TestJSONTree#test_json_list_dump_exclude_tag = 0.01 s 6735s [1001/8505] CGITagHelperTest#test_cgi_tag_helper_html5 = 0.02 s 6735s [1002/8505] CGITagHelperTest#test_cgi_tag_helper_html3 = 0.10 s 6735s [1003/8505] OpenSSL::TestX509Name#test_add_entry_street = 0.00 s 6735s [1004/8505] OpenSSL::TestX509Name#test_marshal = 0.00 s 6735s [1005/8505] OpenSSL::TestX509Name#test_s_parse_rfc2253 = 0.02 s 6735s [1006/8505] OpenSSL::TestX509Name#test_hash = 0.00 s 6735s [1007/8505] OpenSSL::TestX509Name#test_s_parse = 0.00 s 6735s [1008/8505] OpenSSL::TestX509Name#test_unrecognized_oid_parse_encode_equality = 0.00 s 6735s [1009/8505] OpenSSL::TestX509Name#test_equals2 = 0.00 s 6735s [1010/8505] OpenSSL::TestX509Name#test_equality = 0.00 s 6735s [1011/8505] OpenSSL::TestX509Name#test_add_entry = 0.00 s 6735s [1012/8505] OpenSSL::TestX509Name#test_unrecognized_oid = 0.00 s 6735s [1013/8505] OpenSSL::TestX509Name#test_s_new = 0.00 s 6735s [1014/8505] Psych::TestNil#test_nil = 0.00 s 6735s [1015/8505] Psych::TestNil#test_array_nil = 0.00 s 6736s [1016/8505] TestOptionParser::BashCompletion#test_one_hyphen = 0.01 s 6736s [1017/8505] TestOptionParser::BashCompletion#test_long_for_option = 0.01 s 6736s [1018/8505] TestOptionParser::BashCompletion#test_two_hyphen = 0.00 s 6736s [1019/8505] TestOptionParser::BashCompletion#test_empty = 0.00 s 6736s [1020/8505] TestOptionParser::BashCompletion#test_long_for_option_complete = 0.00 s 6736s [1021/8505] TestOptionParser::BashCompletion#test_case_sensitive = 0.00 s 6736s [1022/8505] TestOptionParser::BashCompletion#test_long_f = 0.00 s 6736s [1023/8505] TestOptionParser::BashCompletion#test_long_for_option_args = 0.00 s 6736s [1024/8505] TestRDocRubygemsHook#test_delete_legacy_args = 0.01 s 6736s [1025/8505] TestRDocRubygemsHook#test_generate_no_overwrite = 0.11 s 6736s [1026/8505] TestRDocRubygemsHook#test_setup_unwritable = 0.01 s 6736s [1027/8505] TestRDocRubygemsHook#test_remove = 0.00 s 6736s [1028/8505] TestRDocRubygemsHook#test_rdoc_installed? = 0.00 s 6736s [1029/8505] TestRDocRubygemsHook#test_generate_all = 0.38 s 6736s [1030/8505] TestRDocRubygemsHook#test_generate_default_gem = 0.01 s 6736s [1031/8505] TestRDocRubygemsHook#test_remove_unwritable = 0.01 s 6736s [1032/8505] TestRDocRubygemsHook#test_setup = 0.01 s 6736s [1033/8505] TestRDocRubygemsHook#test_generate_disabled = 0.00 s 6736s [1034/8505] TestRDocRubygemsHook#test_generate_configuration_rdoc_string = 0.04 s 6736s [1035/8505] TestRDocRubygemsHook#test_ri_installed? = 0.01 s 6736s [1036/8505] TestRDocRubygemsHook#test_initialize = 0.00 s 6736s [1037/8505] TestRDocRubygemsHook#test_generate = 0.03 s 6736s [1038/8505] TestRDocRubygemsHook#test_generate_configuration_rdoc_array = 0.03 s 6736s [1039/8505] TestRDocRubygemsHook#test_generate_force = 0.02 s 6736s [1040/8505] TestRDocRubygemsHook#test_new_rdoc = 0.00 s 6736s [1041/8505] TestRDocRubygemsHook#test_document = 0.09 s 6736s [1042/8505] TestRDocNormalClass#test_direct_ancestors = 0.07 s 6736s [1043/8505] TestRDocNormalClass#test_definition = 0.07 s 6737s [1044/8505] TestRDocNormalClass#test_ancestors_multilevel = 0.06 s 6737s [1045/8505] TestRDocNormalClass#test_aref = 0.08 s 6737s [1046/8505] TestRDocNormalClass#test_ancestors = 0.07 s 6737s [1047/8505] TestRDocMarkupToTtOnly#test_accept_list_end_number = 0.00 s 6737s [1048/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_number = 0.00 s 6737s [1049/8505] TestRDocMarkupToTtOnly#test_accept_document = 0.00 s 6737s [1050/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_number = 0.00 s 6737s [1051/8505] TestRDocMarkupToTtOnly#test_accept_heading_b = 0.00 s 6737s [1052/8505] TestRDocMarkupToTtOnly#test_list_nested = 0.00 s 6737s [1053/8505] TestRDocMarkupToTtOnly#test_list_verbatim = 0.00 s 6737s [1054/8505] TestRDocMarkupToTtOnly#test_accept_verbatim = 0.00 s 6737s [1055/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_i = 0.00 s 6737s [1056/8505] TestRDocMarkupToTtOnly#test_accept_block_quote = 0.00 s 6737s [1057/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_break = 0.00 s 6737s [1058/8505] TestRDocMarkupToTtOnly#test_accept_list_start_ualpha = 0.00 s 6737s [1059/8505] TestRDocMarkupToTtOnly#test_accept_heading_suppressed_crossref = 0.00 s 6737s [1060/8505] TestRDocMarkupToTtOnly#test_accept_heading_3 = 0.00 s 6737s [1061/8505] TestRDocMarkupToTtOnly#test_accept_heading_1 = 0.00 s 6737s [1062/8505] TestRDocMarkupToTtOnly#test_accept_list_start_lalpha = 0.00 s 6737s [1063/8505] TestRDocMarkupToTtOnly#test_accept_heading = 0.00 s 6737s [1064/8505] TestRDocMarkupToTtOnly#test_accept_list_end_label = 0.00 s 6737s [1065/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_bullet = 0.00 s 6737s [1066/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_underscore = 0.00 s 6737s [1067/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_bullet = 0.00 s 6737s [1068/8505] TestRDocMarkupToTtOnly#test_accept_rule = 0.00 s 6737s [1069/8505] TestRDocMarkupToTtOnly#test_accept_list_end_bullet = 0.00 s 6737s [1070/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_label = 0.00 s 6737s [1071/8505] TestRDocMarkupToTtOnly#test_accept_list_end_note = 0.00 s 6737s [1072/8505] TestRDocMarkupToTtOnly#test_accept_list_start_number = 0.00 s 6737s [1073/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_multi_description = 0.00 s 6737s [1074/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_multi_label = 0.00 s 6737s [1075/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_note = 0.00 s 6737s [1076/8505] TestRDocMarkupToTtOnly#test_start_accepting = 0.00 s 6737s [1077/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note_2 = 0.00 s 6737s [1078/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_br = 0.00 s 6737s [1079/8505] TestRDocMarkupToTtOnly#test_accept_paragraph = 0.00 s 6737s [1080/8505] TestRDocMarkupToTtOnly#test_accept_blank_line = 0.00 s 6737s [1081/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_star = 0.00 s 6737s [1082/8505] TestRDocMarkupToTtOnly#test_accept_heading_2 = 0.00 s 6737s [1083/8505] TestRDocMarkupToTtOnly#test_accept_list_start_label = 0.00 s 6737s [1084/8505] TestRDocMarkupToTtOnly#test_accept_heading_4 = 0.00 s 6737s [1085/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_b = 0.00 s 6737s [1086/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_ualpha = 0.00 s 6737s [1087/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_ualpha = 0.00 s 6737s [1088/8505] TestRDocMarkupToTtOnly#test_accept_list_end_ualpha = 0.00 s 6737s [1089/8505] TestRDocMarkupToTtOnly#test_end_accepting = 0.00 s 6737s [1090/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_lalpha = 0.00 s 6737s [1091/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_lalpha = 0.00 s 6737s [1092/8505] TestRDocMarkupToTtOnly#test_accept_list_item_start_note = 0.00 s 6737s [1093/8505] TestRDocMarkupToTtOnly#test_accept_raw = 0.00 s 6737s [1094/8505] TestRDocMarkupToTtOnly#test_accept_list_end_lalpha = 0.00 s 6737s [1095/8505] TestRDocMarkupToTtOnly#test_accept_list_start_note = 0.00 s 6737s [1096/8505] TestRDocMarkupToTtOnly#test_accept_list_start_bullet = 0.00 s 6737s [1097/8505] TestRDocMarkupToTtOnly#test_accept_list_item_end_label = 0.00 s 6737s [1098/8505] TestRDocMarkupToTtOnly#test_accept_paragraph_plus = 0.00 s 6737s [1099/8505] TestSocket_UDPSocket#test_connect = 0.00 s 6737s [1100/8505] TestSocket_UDPSocket#test_open = 0.00 s 6737s [1101/8505] Psych::TestDeprecated#test_coder_scalar = 0.00 s 6737s [1102/8505] Psych::TestDeprecated#test_recursive_quick_emit_encode_with = 0.02 s 6737s [1103/8505] Psych::TestDeprecated#test_yaml_initialize_and_init_with = 0.01 s 6737s [1104/8505] TestRDocMarkupPreProcess#test_handle_directive_category = 0.00 s 6737s [1105/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc = 0.01 s 6737s [1106/8505] TestRDocMarkupPreProcess#test_handle_directive_block_nil = 0.00 s 6737s [1107/8505] TestRDocMarkupPreProcess#test_include_file_encoding_incompatible = 0.00 s 6737s [1108/8505] TestRDocMarkupPreProcess#test_handle_directive_arg_no_context = 0.00 s 6737s [1109/8505] TestRDocMarkupPreProcess#test_handle_directive_yield_block_param = 0.00 s 6737s [1110/8505] TestRDocMarkupPreProcess#test_handle_directive_main = 0.00 s 6737s [1111/8505] TestRDocMarkupPreProcess#test_handle_directive_enddoc = 0.00 s 6737s [1112/8505] TestRDocMarkupPreProcess#test_handle_directive_arg = 0.01 s 6737s [1113/8505] TestRDocMarkupPreProcess#test_handle_directive_yield = 0.01 s 6737s [1114/8505] TestRDocMarkupPreProcess#test_handle_directive_yield_no_context = 0.00 s 6737s [1115/8505] TestRDocMarkupPreProcess#test_handle_directive_args = 0.00 s 6737s [1116/8505] TestRDocMarkupPreProcess#test_handle_directive_stopdoc = 0.00 s 6737s [1117/8505] TestRDocMarkupPreProcess#test_handle_directive_registered = 0.00 s 6737s [1118/8505] TestRDocMarkupPreProcess#test_handle_directive_registered_block = 0.00 s 6737s [1119/8505] TestRDocMarkupPreProcess#test_handle_unregistered = 0.00 s 6737s [1120/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc_all = 0.00 s 6737s [1121/8505] TestRDocMarkupPreProcess#test_handle_comment = 0.00 s 6737s [1122/8505] TestRDocMarkupPreProcess#test_handle_directive_yields = 0.00 s 6737s [1123/8505] TestRDocMarkupPreProcess#test_handle_directive_title = 0.00 s 6737s [1124/8505] TestRDocMarkupPreProcess#test_handle_directive_downcase = 0.01 s 6737s [1125/8505] TestRDocMarkupPreProcess#test_handle = 0.00 s 6737s [1126/8505] TestRDocMarkupPreProcess#test_handle_directive_registered_code_object = 0.00 s 6737s [1127/8505] TestRDocMarkupPreProcess#test_handle_markup_empty = 0.00 s 6737s [1128/8505] TestRDocMarkupPreProcess#test_handle_markup = 0.00 s 6737s [1129/8505] TestRDocMarkupPreProcess#test_handle_directive_not_new = 0.00 s 6737s [1130/8505] TestRDocMarkupPreProcess#test_handle_directive_not_dash_new = 0.00 s 6737s [1131/8505] TestRDocMarkupPreProcess#test_handle_directive_doc = 0.00 s 6737s [1132/8505] TestRDocMarkupPreProcess#test_handle_directive_nodoc_no_context = 0.00 s 6737s [1133/8505] TestRDocMarkupPreProcess#test_handle_post_process = 0.00 s 6737s [1134/8505] TestRDocMarkupPreProcess#test_include_file = 0.01 s 6737s [1135/8505] TestRDocMarkupPreProcess#test_include_file_in_other_directory = 0.00 s 6737s [1136/8505] TestRDocMarkupPreProcess#test_class_register = 0.00 s 6737s [1137/8505] TestRDocMarkupPreProcess#test_handle_directive_unhandled = 0.00 s 6737s [1138/8505] TestRDocMarkupPreProcess#test_handle_directive_include = 0.01 s 6737s [1139/8505] TestRDocMarkupPreProcess#test_handle_directive_blankline = 0.00 s 6737s [1140/8505] TestRDocMarkupPreProcess#test_handle_directive_startdoc = 0.00 s 6737s [1141/8505] TestRDocMarkupPreProcess#test_handle_directive_doc_no_context = 0.00 s 6737s [1142/8505] TestRDocMarkupPreProcess#test_class_post_process = 0.00 s 6737s [1143/8505] TestRDocMarkupPreProcess#test_handle_directive_notnew = 0.00 s 6737s [1144/8505] TestRDocMarkupPreProcess#test_handle_directive_block_false = 0.00 s 6737s [1145/8505] TestRDocMarkupPreProcess#test_handle_directive_block = 0.00 s 6737s [1146/8505] TestRDocMarkupPreProcess#test_handle_directive_unhandled_block = 0.00 s 6737s [1147/8505] Psych::JSON::TestStream#test_explicit_documents = 0.01 s 6737s [1148/8505] Psych::JSON::TestStream#test_json_list_dump_exclude_tag = 0.01 s 6737s [1149/8505] Psych::JSON::TestStream#test_json_dump_exclude_tag = 0.01 s 6737s [1150/8505] JSONGeneratorTest#test_own_state = 0.00 s 6737s [1151/8505] JSONGeneratorTest#test_backslash = 0.00 s 6737s [1152/8505] JSONGeneratorTest#test_hash_likeness_set_string = 0.00 s 6737s [1153/8505] JSONGeneratorTest#test_hash_likeness_set_symbol = 0.00 s 6737s [1154/8505] JSONGeneratorTest#test_string_subclass = 0.00 s 6737s [1155/8505] JSONGeneratorTest#test_generate_custom = 0.00 s 6737s [1156/8505] JSONGeneratorTest#test_gc = 0.00 s 6737s [1157/8505] JSONGeneratorTest#test_fast_generate = 0.00 s 6737s [1158/8505] JSONGeneratorTest#test_configure_using_configure_and_merge = 0.00 s 6737s [1159/8505] JSONGeneratorTest#test_buffer_initial_length = 0.00 s 6737s [1160/8505] JSONGeneratorTest#test_json_generate = 0.00 s 6737s [1161/8505] JSONGeneratorTest#test_states = 0.00 s 6737s [1162/8505] JSONGeneratorTest#test_depth = 0.01 s 6737s [1163/8505] JSONGeneratorTest#test_configure_hash_conversion = 0.00 s 6737s [1164/8505] JSONGeneratorTest#test_generate_pretty = 0.01 s 6737s [1165/8505] JSONGeneratorTest#test_generate = 0.00 s 6737s [1166/8505] JSONGeneratorTest#test_nonutf8_encoding = 0.00 s 6737s [1167/8505] JSONGeneratorTest#test_broken_bignum = 0.00 s 6737s [1168/8505] JSONGeneratorTest#test_nesting = 0.00 s 6737s [1169/8505] JSONGeneratorTest#test_allow_nan = 0.00 s 6737s [1170/8505] TestRDocInclude#test_module_extended = 0.09 s 6737s [1171/8505] TestRDocInclude#test_store_equals = 0.05 s 6737s [1172/8505] TestRDocInclude#test_module = 0.08 s 6737s [1173/8505] Psych::TestCoder#test_represent_sequence = 0.00 s 6737s [1174/8505] Psych::TestCoder#test_coder_style_scalar_double_quoted = 0.00 s 6737s [1175/8505] Psych::TestCoder#test_coder_style_map_default = 0.00 s 6737s [1176/8505] Psych::TestCoder#test_coder_style_scalar_any = 0.00 s 6737s [1177/8505] Psych::TestCoder#test_coder_style_scalar_folded = 0.00 s 6737s [1178/8505] Psych::TestCoder#test_dump_encode_with = 0.00 s 6737s [1179/8505] Psych::TestCoder#test_coder_style_seq_block = 0.00 s 6737s [1180/8505] Psych::TestCoder#test_self_referential = 0.01 s 6737s [1181/8505] Psych::TestCoder#test_represent! = 0.00 s 6737s [1182/8505] Psych::TestCoder#test_represent_map = 0.00 s 6737s [1183/8505] Psych::TestCoder#test_coder_style_scalar_literal = 0.00 s 6737s [1184/8505] Psych::TestCoder#test_map_with_tag_and_style = 0.00 s 6737s [1185/8505] Psych::TestCoder#test_coder_style_seq_flow = 0.00 s 6737s [1186/8505] Psych::TestCoder#test_represent_with_init = 0.00 s 6737s [1187/8505] Psych::TestCoder#test_dump_with_tag = 0.01 s 6737s [1188/8505] Psych::TestCoder#test_scalar_coder = 0.00 s 6737s [1189/8505] Psych::TestCoder#test_map_takes_block = 0.00 s 6737s [1190/8505] Psych::TestCoder#test_coder_style_scalar_default = 0.00 s 6737s [1191/8505] Psych::TestCoder#test_coder_style_scalar_plain = 0.00 s 6737s [1192/8505] Psych::TestCoder#test_dump_init_with = 0.00 s 6737s [1193/8505] Psych::TestCoder#test_map_with_tag = 0.00 s 6737s [1194/8505] Psych::TestCoder#test_coder_style_scalar_single_quoted = 0.00 s 6737s [1195/8505] Psych::TestCoder#test_represent_with_object = 0.00 s 6737s [1196/8505] Psych::TestCoder#test_coder_style_seq_any = 0.00 s 6737s [1197/8505] Psych::TestCoder#test_json_dump_exclude_tag = 0.00 s 6737s [1198/8505] Psych::TestCoder#test_load_dumped_tagging = 0.00 s 6737s [1199/8505] Psych::TestCoder#test_coder_style_seq_default = 0.00 s 6738s [1200/8505] TestRDocStore#test_add_file_relative = 0.09 s 6738s [1201/8505] TestRDocStore#test_save_cache_duplicate_methods = 0.10 s 6738s [1202/8505] TestRDocStore#test_find_c_enclosure_from_cache_legacy = 0.11 s 6738s [1203/8505] TestRDocStore#test_save_class_merge_constant = 0.19 s 6738s [1204/8505] TestRDocStore#test_add_c_variables = 0.12 s 6738s [1205/8505] TestRDocStore#test_load_single_class = 0.09 s 6738s [1206/8505] TestRDocStore#test_load_method_legacy = 0.09 s 6738s [1207/8505] TestRDocStore#test_class_methods = 0.15 s 6738s [1208/8505] TestRDocStore#test_main = 0.07 s 6739s [1209/8505] TestRDocStore#test_load_cache_legacy = 0.07 s 6739s [1210/8505] TestRDocStore#test_load_method = 0.09 s 6739s [1211/8505] TestRDocStore#test_module_names = 0.07 s 6739s [1212/8505] TestRDocStore#test_find_c_enclosure_from_cache = 0.05 s 6739s [1213/8505] TestRDocStore#test_instance_methods = 0.04 s 6739s [1214/8505] TestRDocStore#test_save_class_nested = 0.05 s 6739s [1215/8505] TestRDocStore#test_load_all = 0.08 s 6739s [1216/8505] TestRDocStore#test_save_class_dry_run = 0.05 s 6739s [1217/8505] TestRDocStore#test_find_text_page = 0.05 s 6739s [1218/8505] TestRDocStore#test_load_cache = 0.04 s 6739s [1219/8505] TestRDocStore#test_dry_run = 0.04 s 6739s [1220/8505] TestRDocStore#test_load_class = 0.05 s 6739s [1221/8505] TestRDocStore#test_find_class_named = 0.04 s 6739s [1222/8505] TestRDocStore#test_save_method_nested = 0.05 s 6739s [1223/8505] TestRDocStore#test_page = 0.04 s 6739s [1224/8505] TestRDocStore#test_page_with_extension = 0.04 s 6739s [1225/8505] TestRDocStore#test_attributes = 0.04 s 6739s [1226/8505] TestRDocStore#test_save_method = 0.08 s 6739s [1227/8505] TestRDocStore#test_class_path = 0.04 s 6740s [1228/8505] TestRDocStore#test_title = 0.04 s 6740s [1229/8505] TestRDocStore#test_save_cache = 0.06 s 6740s [1230/8505] TestRDocStore#test_load_page = 0.05 s 6740s [1231/8505] TestRDocStore#test_save_class = 0.05 s 6740s [1232/8505] TestRDocStore#test_class_file = 0.04 s 6740s [1233/8505] TestRDocStore#test_classes = 0.05 s 6740s [1234/8505] TestRDocStore#test_complete_nodoc = 0.05 s 6740s [1235/8505] TestRDocStore#test_save = 0.06 s 6740s [1236/8505] TestRDocStore#test_save_page_file = 0.08 s 6740s [1237/8505] TestRDocStore#test_add_file = 0.04 s 6740s [1238/8505] TestRDocStore#test_save_class_delete = 0.07 s 6740s [1239/8505] TestRDocStore#test_save_class_methods = 0.05 s 6740s [1240/8505] TestRDocStore#test_save_page = 0.04 s 6740s [1241/8505] TestRDocStore#test_find_class_named_from = 0.07 s 6740s [1242/8505] TestRDocStore#test_save_cache_dry_run = 0.04 s 6740s [1243/8505] TestRDocStore#test_method_file = 0.04 s 6740s [1244/8505] TestRDocStore#test_load_cache_encoding_differs = 0.04 s 6740s [1245/8505] TestRDocStore#test_save_class_basic_object = 0.06 s 6740s [1246/8505] TestRDocStore#test_save_method_dry_run = 0.04 s 6740s [1247/8505] TestRDocStore#test_find_class_or_module = 0.04 s 6741s [1248/8505] TestRDocStore#test_load_cache_no_cache = 0.04 s 6741s [1249/8505] TestRDocStore#test_all_classes_and_modules = 0.04 s 6741s [1250/8505] TestRDocStore#test_find_module_named = 0.04 s 6741s [1251/8505] TestRDocStore#test_find_c_enclosure = 0.06 s 6741s [1252/8505] TestRDocStore#test_save_cache_duplicate_pages = 0.08 s 6741s [1253/8505] TestRDocStore#test_friendly_path = 0.07 s 6741s [1254/8505] TestRDocStore#test_complete = 0.06 s 6741s [1255/8505] TestRDocStore#test_source = 0.05 s 6741s [1256/8505] TestRDocStore#test_save_class_merge = 0.07 s 6741s [1257/8505] TestRDocStore#test_all_files = 0.05 s 6741s [1258/8505] TestRDocStore#test_find_file_named = 0.03 s 6741s [1259/8505] TestRDocStore#test_all_modules = 0.03 s 6741s [1260/8505] TestRDocStore#test_save_class_loaded = 0.07 s 6741s [1261/8505] TestRDocStore#test_add_c_enclosure = 0.07 s 6741s [1262/8505] TestDigest::TestSHA256#test_eq = 0.00 s 6741s [1263/8505] TestDigest::TestSHA256#test_s_base64digest = 0.00 s 6741s [1264/8505] TestDigest::TestSHA256#test_alignment = 0.00 s 6741s [1265/8505] TestDigest::TestSHA256#test_bubblebabble_class = 0.00 s 6741s [1266/8505] TestDigest::TestSHA256#test_s_hexdigest = 0.00 s 6741s [1267/8505] TestDigest::TestSHA256#test_bubblebabble = 0.00 s 6741s [1268/8505] TestDigest::TestSHA256#test_update = 0.00 s 6741s [1269/8505] TestDigest::TestSHA256#test_instance_eval = 0.00 s 6741s [1270/8505] TestDigest::TestSHA256#test_s_file = 0.00 s 6741s [1271/8505] TestDigest::TestSHA256#test_bubblebabble_instance = 0.00 s 6741s [1272/8505] TestDigest::TestSHA256#test_s_digest = 0.00 s 6741s [1273/8505] TestDigest::TestSHA256#test_s_new = 0.00 s 6741s [1274/8505] OpenSSL::TestFIPS#test_fips_mode_is_reentrant = 0.00 s 6741s [1275/8505] OpenSSL::TestFIPS#test_fips_mode_get = 0.00 s 6741s [1276/8505] PPTestModule::PPFileStatTest#test_nothing_raised = 0.02 s 6742s [1277/8505] TestRDocMarkdown#test_parse_list_bullet_continue = 0.49 s 6742s [1278/8505] TestRDocMarkdown#test_parse_html_hr = 0.14 s 6742s [1279/8505] TestRDocMarkdown#test_parse_code_github_format = 0.22 s 6742s [1280/8505] TestRDocMarkdown#test_parse_paragraph_html = 0.03 s 6742s [1281/8505] TestRDocMarkdown#test_parse_paragraph_two = 0.02 s 6742s [1282/8505] TestRDocMarkdown#test_parse_style_disabled = 0.03 s 6742s [1283/8505] TestRDocMarkdown#test_parse_block_quote = 0.03 s 6742s [1284/8505] TestRDocMarkdown#test_parse_strong_emphasis_underscore = 0.03 s 6742s [1285/8505] TestRDocMarkdown#test_gfm_table = 0.06 s 6742s [1286/8505] TestRDocMarkdown#test_parse_reference_link_embedded_bracket = 0.06 s 6742s [1287/8505] TestRDocMarkdown#test_parse_block_quote_continue = 0.02 s 6742s [1288/8505] TestRDocMarkdown#test_parse_heading_setext_dash = 0.02 s 6743s [1289/8505] TestRDocMarkdown#test_parse_strike_words_tilde = 0.03 s 6743s [1290/8505] TestRDocMarkdown#test_parse_note_multiple = 0.05 s 6743s [1291/8505] TestRDocMarkdown#test_parse_definition_list_no = 0.05 s 6743s [1292/8505] TestRDocMarkdown#test_parse_strike_tilde = 0.04 s 6743s [1293/8505] TestRDocMarkdown#test_parse_block_quote_list = 0.05 s 6743s [1294/8505] TestRDocMarkdown#test_parse_rule_star = 0.01 s 6743s [1295/8505] TestRDocMarkdown#test_code_fence_with_unintended_array = 0.01 s 6743s [1296/8505] TestRDocMarkdown#test_parse_link_reference_id_many = 0.04 s 6743s [1297/8505] TestRDocMarkdown#test_parse_emphasis_star = 0.02 s 6743s [1298/8505] TestRDocMarkdown#test_parse_link_reference_implicit = 0.04 s 6743s [1299/8505] TestRDocMarkdown#test_parse_note = 0.02 s 6743s [1300/8505] TestRDocMarkdown#test_parse_strong_emphasis_star = 0.03 s 6743s [1301/8505] TestRDocMarkdown#test_parse_paragraph_indent_two = 0.01 s 6743s [1302/8505] TestRDocMarkdown#test_parse_entity_hex = 0.02 s 6743s [1303/8505] TestRDocMarkdown#test_parse_list_bullet_nest_continue = 0.04 s 6743s [1304/8505] TestRDocMarkdown#test_parse_definition_list = 0.03 s 6743s [1305/8505] TestRDocMarkdown#test_parse_plain = 0.02 s 6743s [1306/8505] TestRDocMarkdown#test_parse_entity_named = 0.02 s 6743s [1307/8505] TestRDocMarkdown#test_parse_list_bullet_nest = 0.12 s 6743s [1308/8505] TestRDocMarkdown#test_parse_block_quote_separate = 0.05 s 6743s [1309/8505] TestRDocMarkdown#test_parse_verbatim_eof = 0.03 s 6743s [1310/8505] TestRDocMarkdown#test_parse_paragraph_multiline = 0.03 s 6743s [1311/8505] TestRDocMarkdown#test_parse_style = 0.02 s 6743s [1312/8505] TestRDocMarkdown#test_parse_heading_atx = 0.04 s 6743s [1313/8505] TestRDocMarkdown#test_parse_emphasis_underscore_embedded = 0.03 s 6743s [1314/8505] TestRDocMarkdown#test_parse_note_inline = 0.03 s 6743s [1315/8505] TestRDocMarkdown#test_parse_strong_star = 0.02 s 6743s [1316/8505] TestRDocMarkdown#test_parse_auto_link_url = 0.03 s 6743s [1317/8505] TestRDocMarkdown#test_parse_link_reference_id_adjacent = 0.04 s 6744s [1318/8505] TestRDocMarkdown#test_parse_code_github = 0.13 s 6744s [1319/8505] TestRDocMarkdown#test_parse_link_reference_id = 0.08 s 6744s [1320/8505] TestRDocMarkdown#test_parse_definition_list_multi_description = 0.04 s 6744s [1321/8505] TestRDocMarkdown#test_parse_line_break = 0.02 s 6744s [1322/8505] TestRDocMarkdown#test_parse_emphasis_underscore_in_word = 0.02 s 6744s [1323/8505] TestRDocMarkdown#test_parse_entity_dec = 0.02 s 6744s [1324/8505] TestRDocMarkdown#test_parse_heading_setext_equals = 0.02 s 6744s [1325/8505] TestRDocMarkdown#test_parse_paragraph = 0.02 s 6744s [1326/8505] TestRDocMarkdown#test_parse_list_bullet_multiline = 0.02 s 6744s [1327/8505] TestRDocMarkdown#test_parse_html_no_html = 0.01 s 6744s [1328/8505] TestRDocMarkdown#test_parse_image_link = 0.04 s 6744s [1329/8505] TestRDocMarkdown#test_parse_rule_underscore = 0.02 s 6744s [1330/8505] TestRDocMarkdown#test_parse_list_bullet_nest_loose = 0.05 s 6744s [1331/8505] TestRDocMarkdown#test_parse_code = 0.02 s 6744s [1332/8505] TestRDocMarkdown#test_parse_paragraph_html_no_html = 0.01 s 6744s [1333/8505] TestRDocMarkdown#test_parse_paragraph_break_on_newline = 0.04 s 6744s [1334/8505] TestRDocMarkdown#test_parse_strong_underscore = 0.01 s 6744s [1335/8505] TestRDocMarkdown#test_parse_link_reference_id_eof = 0.01 s 6744s [1336/8505] TestRDocMarkdown#test_parse_list_number = 0.01 s 6744s [1337/8505] TestRDocMarkdown#test_parse_rule_dash = 0.01 s 6744s [1338/8505] TestRDocMarkdown#test_parse_char_entity = 0.01 s 6744s [1339/8505] TestRDocMarkdown#test_parse_block_quote_newline = 0.01 s 6744s [1340/8505] TestRDocMarkdown#test_parse_definition_list_multi_line = 0.02 s 6744s [1341/8505] TestRDocMarkdown#test_parse_definition_list_multi_label = 0.01 s 6744s [1342/8505] TestRDocMarkdown#test_parse_html = 0.01 s 6744s [1343/8505] TestRDocMarkdown#test_parse_emphasis_underscore = 0.01 s 6744s [1344/8505] TestRDocMarkdown#test_parse_verbatim = 0.01 s 6744s [1345/8505] TestRDocMarkdown#test_parse_paragraph_stars = 0.01 s 6744s [1346/8505] TestRDocMarkdown#test_parse_list_bullet_auto_link = 0.02 s 6744s [1347/8505] TestRDocMarkdown#test_emphasis = 0.00 s 6744s [1348/8505] TestRDocMarkdown#test_parse_escape = 0.03 s 6744s [1349/8505] TestRDocMarkdown#test_parse_strike_tilde_no = 0.01 s 6744s [1350/8505] TestRDocMarkdown#test_parse_definition_list_indents = 0.03 s 6744s [1351/8505] TestRDocMarkdown#test_parse_list_bullet = 0.01 s 6744s [1352/8505] TestRDocMarkdown#test_parse_image = 0.01 s 6744s [1353/8505] TestRDocMarkdown#test_parse_auto_link_email = 0.01 s 6744s [1354/8505] TestRDocMarkdown#test_class_parse = 0.01 s 6744s [1355/8505] TestRDocMarkdown#test_strong = 0.00 s 6744s [1356/8505] TestRDocMarkdown#test_parse_note_indent = 0.01 s 6744s [1357/8505] TestRDocMarkdown#test_parse_list_number_continue = 0.02 s 6744s [1358/8505] TestRDocMarkdown#test_parse_paragraph_indent_three = 0.01 s 6744s [1359/8505] TestRDocMarkdown#test_parse_note_no_notes = 0.01 s 6744s [1360/8505] TestRDocMarkdown#test_parse_paragraph_indent_one = 0.01 s 6744s [1361/8505] TestOptionParser::PlaceArg#test_into = 0.01 s 6744s [1362/8505] TestOptionParser::PlaceArg#test_nonopt_pattern = 0.02 s 6744s [1363/8505] TestOptionParser::PlaceArg#test_conv = 0.01 s 6744s [1364/8505] TestOptionParser::PlaceArg#test_order = 0.01 s 6744s [1365/8505] TestOptionParser::PlaceArg#test_abbrev = 0.01 s 6744s [1366/8505] TestOptionParser::PlaceArg#test_regexp = 0.01 s 6744s [1367/8505] TestOptionParser::PlaceArg#test_hyphenize = 0.00 s 6744s [1368/8505] TestOptionParser::PlaceArg#test_short = 0.00 s 6744s [1369/8505] TestOptionParser::PlaceArg#test_long = 0.01 s 6745s [1370/8505] TestOptionParser::PlaceArg#test_permute = 0.02 s 6745s [1371/8505] TestOptionParser::PlaceArg#test_require_exact = 0.03 s 6745s [1372/8505] TestIONonblock#test_nonblock = 0.00 s 6745s [1373/8505] TestIONonblock#test_flush = 0.02 s 6745s [1374/8505] JSONFixturesTest#test_failing = 0.03 s 6745s [1375/8505] JSONFixturesTest#test_sanity = 0.01 s 6745s [1376/8505] JSONFixturesTest#test_passing = 0.01 s 6745s [1377/8505] TestCSVParseColumnSeparator#test_tab = 0.00 s 6745s [1378/8505] TestCSVParseColumnSeparator#test_multiple_characters_include_sub_separator = 0.00 s 6745s [1379/8505] TestCSVParseColumnSeparator#test_comma = 0.00 s 6745s [1380/8505] TestCSVParseColumnSeparator#test_multiple_characters_leading_empty_fields = 0.00 s 6745s [1381/8505] TestCSVParseColumnSeparator#test_space = 0.00 s 6745s [1382/8505] URI::TestGeneric#test_use_proxy_p = 0.03 s 6745s [1383/8505] URI::TestGeneric#test_parse = 0.02 s 6745s [1384/8505] URI::TestGeneric#test_build2 = 0.03 s 6745s [1385/8505] URI::TestGeneric#test_merge = 0.06 s 6745s [1386/8505] URI::TestGeneric#test_find_proxy_bad_value = 0.04 s 6745s [1387/8505] URI::TestGeneric#test_set_component = 0.02 s 6745s [1388/8505] URI::TestGeneric#test_rfc3986_examples = 0.06 s 6745s [1389/8505] URI::TestGeneric#test_bad_password_component = 0.00 s 6745s [1390/8505] URI::TestGeneric#test_find_proxy_no_proxy_cidr = 0.01 s 6745s [1391/8505] URI::TestGeneric#test_build = 0.00 s 6745s [1392/8505] URI::TestGeneric#test_route = 0.01 s 6745s [1393/8505] URI::TestGeneric#test_find_proxy_case_sensitive_env = 0.03 s 6745s [1394/8505] URI::TestGeneric#test_find_proxy = 0.02 s 6745s [1395/8505] URI::TestGeneric#test_find_proxy_bad_uri = 0.00 s 6745s [1396/8505] URI::TestGeneric#test_set_scheme = 0.00 s 6745s [1397/8505] URI::TestGeneric#test_parse_scheme_with_symbols = 0.00 s 6745s [1398/8505] URI::TestGeneric#test_absolute = 0.00 s 6745s [1399/8505] URI::TestGeneric#test_hierarchical = 0.00 s 6745s [1400/8505] URI::TestGeneric#test_find_proxy_no_proxy = 0.02 s 6745s [1401/8505] URI::TestGeneric#test_join = 0.03 s 6745s [1402/8505] URI::TestGeneric#test_find_proxy_no_env = 0.00 s 6745s [1403/8505] URI::TestGeneric#test_to_s = 0.00 s 6745s [1404/8505] URI::TestGeneric#test_ipv6 = 0.00 s 6745s [1405/8505] URI::TestGeneric#test_find_proxy_get = 0.03 s 6745s [1406/8505] TestBase64#test_strict_encode64 = 0.00 s 6745s [1407/8505] TestBase64#test_urlsafe_decode64_unpadded = 0.00 s 6745s [1408/8505] TestBase64#test_decode64 = 0.00 s 6745s [1409/8505] TestBase64#test_urlsafe_encode64 = 0.00 s 6745s [1410/8505] TestBase64#test_strict_decode64 = 0.00 s 6745s [1411/8505] TestBase64#test_urlsafe_decode64 = 0.00 s 6745s [1412/8505] TestBase64#test_urlsafe_encode64_unpadded = 0.00 s 6745s [1413/8505] TestBase64#test_sample = 0.00 s 6745s [1414/8505] TestBase64#test_encode64 = 0.00 s 6745s [1415/8505] TestOptionParser::Acceptable#test_decimal_numeric = 0.05 s 6745s [1416/8505] TestOptionParser::Acceptable#test_into = 0.01 s 6745s [1417/8505] TestOptionParser::Acceptable#test_nonopt_pattern = 0.00 s 6745s [1418/8505] TestOptionParser::Acceptable#test_numeric = 0.01 s 6745s [1419/8505] TestOptionParser::Acceptable#test_order = 0.00 s 6745s [1420/8505] TestOptionParser::Acceptable#test_regexp = 0.00 s 6745s [1421/8505] TestOptionParser::Acceptable#test_float = 0.01 s 6745s [1422/8505] TestOptionParser::Acceptable#test_octal_integer = 0.01 s 6745s [1423/8505] TestOptionParser::Acceptable#test_integer = 0.01 s 6745s [1424/8505] TestOptionParser::Acceptable#test_permute = 0.00 s 6745s [1425/8505] TestOptionParser::Acceptable#test_require_exact = 0.02 s 6745s [1426/8505] TestOptionParser::Acceptable#test_decimal_integer = 0.01 s 6745s [1427/8505] TestPathnameRactor#test_ractor_shareable = 0.00 s 6745s [1428/8505] TestRipper::ParserEvents#test_rest_param = 0.04 s 6745s [1429/8505] TestRipper::ParserEvents#test_string_add = 0.00 s 6745s [1430/8505] TestRipper::ParserEvents#test_binary(<) = 0.00 s 6745s [1431/8505] TestRipper::ParserEvents#test_dyna_symbol = 0.00 s 6745s [1432/8505] TestRipper::ParserEvents#test_heredoc = 0.01 s 6745s [1433/8505] TestRipper::ParserEvents#test_xstring_literal = 0.00 s 6745s [1434/8505] TestRipper::ParserEvents#test_endless_defs = 0.01 s 6745s [1435/8505] TestRipper::ParserEvents#test_block_var = 0.02 s 6745s [1436/8505] TestRipper::ParserEvents#test_binary(<=>) = 0.00 s 6745s [1437/8505] TestRipper::ParserEvents#test_break = 0.00 s 6745s [1438/8505] TestRipper::ParserEvents#test_binary(^) = 0.00 s 6745s [1439/8505] TestRipper::ParserEvents#test_block_var_add_block = 0.00 s 6745s [1440/8505] TestRipper::ParserEvents#test_sclass = 0.00 s 6745s [1441/8505] TestRipper::ParserEvents#test_alias = 0.00 s 6745s [1442/8505] TestRipper::ParserEvents#test_word_add = 0.00 s 6745s [1443/8505] TestRipper::ParserEvents#test_zsuper = 0.00 s 6745s [1444/8505] TestRipper::ParserEvents#test_stmts_add = 0.00 s 6745s [1445/8505] TestRipper::ParserEvents#test_string_content = 0.00 s 6745s [1446/8505] TestRipper::ParserEvents#test_arg_paren = 0.00 s 6745s [1447/8505] TestRipper::ParserEvents#test_class = 0.00 s 6745s [1448/8505] TestRipper::ParserEvents#test_params_mlhs_new = 0.00 s 6745s [1449/8505] TestRipper::ParserEvents#test_retry = 0.00 s 6745s [1450/8505] TestRipper::ParserEvents#test_binary(&&) = 0.00 s 6745s [1451/8505] TestRipper::ParserEvents#test_aref_field = 0.00 s 6745s [1452/8505] TestRipper::ParserEvents#test_return0 = 0.00 s 6745s [1453/8505] TestRipper::ParserEvents#test_array = 0.01 s 6745s [1454/8505] TestRipper::ParserEvents#test_qsymbols_add = 0.01 s 6745s [1455/8505] TestRipper::ParserEvents#test_binary(**) = 0.00 s 6745s [1456/8505] TestRipper::ParserEvents#test_assign_error_const = 0.01 s 6745s [1457/8505] TestRipper::ParserEvents#test_vcall = 0.00 s 6745s [1458/8505] TestRipper::ParserEvents#test_warning_ignored_magic_comment = 0.00 s 6745s [1459/8505] TestRipper::ParserEvents#test_when = 0.00 s 6745s [1460/8505] TestRipper::ParserEvents#test_binary(/) = 0.00 s 6745s [1461/8505] TestRipper::ParserEvents#test_regexp_add = 0.00 s 6745s [1462/8505] TestRipper::ParserEvents#test_unary = 0.00 s 6745s [1463/8505] TestRipper::ParserEvents#test_nokw_param = 0.00 s 6745s [1464/8505] TestRipper::ParserEvents#test_args_add = 0.00 s 6745s [1465/8505] TestRipper::ParserEvents#test_rescue_mod = 0.00 s 6745s [1466/8505] TestRipper::ParserEvents#test_qwords_add = 0.00 s 6745s [1467/8505] TestRipper::ParserEvents#test_mlhs_add = 0.00 s 6745s [1468/8505] TestRipper::ParserEvents#test_binary(>>) = 0.00 s 6745s [1469/8505] TestRipper::ParserEvents#test_mlhs_new = 0.00 s 6745s [1470/8505] TestRipper::ParserEvents#test_binary(*) = 0.00 s 6745s [1471/8505] TestRipper::ParserEvents#test_qwords_new = 0.00 s 6745s [1472/8505] TestRipper::ParserEvents#test_brace_block = 0.00 s 6745s [1473/8505] TestRipper::ParserEvents#test_binary(or) = 0.00 s 6745s [1474/8505] TestRipper::ParserEvents#test_args_new = 0.00 s 6745s [1475/8505] TestRipper::ParserEvents#test_local_variables = 0.00 s 6745s [1476/8505] TestRipper::ParserEvents#test_binary(&) = 0.00 s 6745s [1477/8505] TestRipper::ParserEvents#test_binary(<=) = 0.00 s 6745s [1478/8505] TestRipper::ParserEvents#test_regexp_new = 0.00 s 6745s [1479/8505] TestRipper::ParserEvents#test_params = 0.00 s 6745s [1480/8505] TestRipper::ParserEvents#test_yield = 0.00 s 6745s [1481/8505] TestRipper::ParserEvents#test_mlhs_add_post = 0.01 s 6745s [1482/8505] TestRipper::ParserEvents#test_binary(===) = 0.00 s 6745s [1483/8505] TestRipper::ParserEvents#test_ifop = 0.00 s 6745s [1484/8505] TestRipper::ParserEvents#test_params_mlhs_add_post = 0.00 s 6745s [1485/8505] TestRipper::ParserEvents#test_yield0 = 0.00 s 6745s [1486/8505] TestRipper::ParserEvents#test_assocs = 0.00 s 6745s [1487/8505] TestRipper::ParserEvents#test_assign_error_const_toplevel = 0.00 s 6745s [1488/8505] TestRipper::ParserEvents#test_do_block = 0.00 s 6745s [1489/8505] TestRipper::ParserEvents#test_params_mlhs_paren = 0.00 s 6745s [1490/8505] TestRipper::ParserEvents#test_program = 0.00 s 6745s [1491/8505] TestRipper::ParserEvents#test_qsymbols_new = 0.00 s 6745s [1492/8505] TestRipper::ParserEvents#test_arg_ambiguous = 0.00 s 6745s [1493/8505] TestRipper::ParserEvents#test_fcall = 0.00 s 6745s [1494/8505] TestRipper::ParserEvents#test_symbol_literal = 0.00 s 6745s [1495/8505] TestRipper::ParserEvents#test_assoc_new = 0.00 s 6745s [1496/8505] TestRipper::ParserEvents#test_else = 0.00 s 6745s [1497/8505] TestRipper::ParserEvents#test_binary(>) = 0.00 s 6745s [1498/8505] TestRipper::ParserEvents#test_method_add_arg = 0.00 s 6745s [1499/8505] TestRipper::ParserEvents#test_hshptn = 0.00 s 6745s [1500/8505] TestRipper::ParserEvents#test_mrhs_new_from_args = 0.00 s 6745s [1501/8505] TestRipper::ParserEvents#test_args_forward = 0.01 s 6745s [1502/8505] TestRipper::ParserEvents#test_params_mlhs_add = 0.00 s 6745s [1503/8505] TestRipper::ParserEvents#test_bare_assoc_hash = 0.00 s 6745s [1504/8505] TestRipper::ParserEvents#test_symbol = 0.00 s 6745s [1505/8505] TestRipper::ParserEvents#test_parse_error = 0.00 s 6745s [1506/8505] TestRipper::ParserEvents#test_operator_ambiguous = 0.00 s 6745s [1507/8505] TestRipper::ParserEvents#test_case = 0.00 s 6745s [1508/8505] TestRipper::ParserEvents#test_binary(-) = 0.00 s 6745s [1509/8505] TestRipper::ParserEvents#test_stmts_new = 0.00 s 6745s [1510/8505] TestRipper::ParserEvents#test_binary(||) = 0.00 s 6745s [1511/8505] TestRipper::ParserEvents#test_word_new = 0.00 s 6745s [1512/8505] TestRipper::ParserEvents#test_dot3 = 0.00 s 6745s [1513/8505] TestRipper::ParserEvents#test_top_const_ref = 0.00 s 6745s [1514/8505] TestRipper::ParserEvents#test_blockarg = 0.01 s 6745s [1515/8505] TestRipper::ParserEvents#test_invalid_instance_variable_name = 0.00 s 6745s [1516/8505] TestRipper::ParserEvents#test_params_mlhs_add_star = 0.01 s 6745s [1517/8505] TestRipper::ParserEvents#test_ignored_nl = 0.00 s 6745s [1518/8505] TestRipper::ParserEvents#test_begin = 0.00 s 6745s [1519/8505] TestRipper::ParserEvents#test_super = 0.00 s 6745s [1520/8505] TestRipper::ParserEvents#test_alias_error = 0.00 s 6745s [1521/8505] TestRipper::ParserEvents#test_mlhs_add_star = 0.00 s 6745s [1522/8505] TestRipper::ParserEvents#test_hash = 0.00 s 6745s [1523/8505] TestRipper::ParserEvents#test_args_add_star = 0.00 s 6746s [1524/8505] TestRipper::ParserEvents#test_if_mod = 0.00 s 6746s [1525/8505] TestRipper::ParserEvents#test_warn_cr_in_middle = 0.01 s 6746s [1526/8505] TestRipper::ParserEvents#test_event_coverage = 0.00 s 6746s [1527/8505] TestRipper::ParserEvents#test_while_mod = 0.00 s 6746s [1528/8505] TestRipper::ParserEvents#test_opassign = 0.00 s 6746s [1529/8505] TestRipper::ParserEvents#test_field = 0.00 s 6746s [1530/8505] TestRipper::ParserEvents#test_unterminated_regexp = 0.00 s 6746s [1531/8505] TestRipper::ParserEvents#test_dot2 = 0.00 s 6746s [1532/8505] TestRipper::ParserEvents#test_binary(+) = 0.00 s 6746s [1533/8505] TestRipper::ParserEvents#test_string_concat = 0.00 s 6746s [1534/8505] TestRipper::ParserEvents#test_assign_error_backref = 0.00 s 6746s [1535/8505] TestRipper::ParserEvents#test_mrhs_new = 0.00 s 6746s [1536/8505] TestRipper::ParserEvents#test_assign_error = 0.00 s 6746s [1537/8505] TestRipper::ParserEvents#test_binary(<<) = 0.00 s 6746s [1538/8505] TestRipper::ParserEvents#test_elsif = 0.00 s 6746s [1539/8505] TestRipper::ParserEvents#test_block_var_add_star = 0.00 s 6746s [1540/8505] TestRipper::ParserEvents#test_var_ref = 0.00 s 6746s [1541/8505] TestRipper::ParserEvents#test_assign_error_const_qualified = 0.00 s 6746s [1542/8505] TestRipper::ParserEvents#test_words_add = 0.00 s 6746s [1543/8505] TestRipper::ParserEvents#test_endless_def = 0.00 s 6746s [1544/8505] TestRipper::ParserEvents#test_binary(and) = 0.00 s 6746s [1545/8505] TestRipper::ParserEvents#test_binary(!~) = 0.00 s 6746s [1546/8505] TestRipper::ParserEvents#test_unless = 0.00 s 6746s [1547/8505] TestRipper::ParserEvents#test_args_add_block = 0.00 s 6746s [1548/8505] TestRipper::ParserEvents#test_assoclist_from_args = 0.00 s 6746s [1549/8505] TestRipper::ParserEvents#test_excessed_comma = 0.00 s 6746s [1550/8505] TestRipper::ParserEvents#test_def = 0.00 s 6746s [1551/8505] TestRipper::ParserEvents#test_arglist = 0.00 s 6746s [1552/8505] TestRipper::ParserEvents#test_binary(=~) = 0.00 s 6746s [1553/8505] TestRipper::ParserEvents#test_redo = 0.00 s 6746s [1554/8505] TestRipper::ParserEvents#test_string_dvar = 0.00 s 6746s [1555/8505] TestRipper::ParserEvents#test_var_alias = 0.00 s 6746s [1556/8505] TestRipper::ParserEvents#test_xstring_add = 0.00 s 6746s [1557/8505] TestRipper::ParserEvents#test_call = 0.00 s 6746s [1558/8505] TestRipper::ParserEvents#test_binary(>=) = 0.00 s 6746s [1559/8505] TestRipper::ParserEvents#test_bodystmt = 0.00 s 6746s [1560/8505] TestRipper::ParserEvents#test_ensure = 0.00 s 6746s [1561/8505] TestRipper::ParserEvents#test_until_mod = 0.00 s 6746s [1562/8505] TestRipper::ParserEvents#test_unterminated_heredoc = 0.00 s 6746s [1563/8505] TestRipper::ParserEvents#test_command_call = 0.00 s 6746s [1564/8505] TestRipper::ParserEvents#test_mlhs_paren = 0.00 s 6746s [1565/8505] TestRipper::ParserEvents#test_paren = 0.00 s 6746s [1566/8505] TestRipper::ParserEvents#test_massign = 0.00 s 6746s [1567/8505] TestRipper::ParserEvents#test_symbols_add = 0.00 s 6746s [1568/8505] TestRipper::ParserEvents#test_defined = 0.00 s 6746s [1569/8505] TestRipper::ParserEvents#test_while = 0.00 s 6746s [1570/8505] TestRipper::ParserEvents#test_opassign_error = 0.00 s 6746s [1571/8505] TestRipper::ParserEvents#test_unless_mod = 0.00 s 6746s [1572/8505] TestRipper::ParserEvents#test_string_literal = 0.00 s 6746s [1573/8505] TestRipper::ParserEvents#test_heredoc_dedent = 0.00 s 6746s [1574/8505] TestRipper::ParserEvents#test_class_name_error = 0.00 s 6746s [1575/8505] TestRipper::ParserEvents#test_for = 0.00 s 6746s [1576/8505] TestRipper::ParserEvents#test_return = 0.00 s 6746s [1577/8505] TestRipper::ParserEvents#test_void_stmt = 0.00 s 6746s [1578/8505] TestRipper::ParserEvents#test_regexp_literal = 0.00 s 6746s [1579/8505] TestRipper::ParserEvents#test_next = 0.00 s 6746s [1580/8505] TestRipper::ParserEvents#test_in = 0.00 s 6746s [1581/8505] TestRipper::ParserEvents#test_module = 0.00 s 6746s [1582/8505] TestRipper::ParserEvents#test_string_embexpr = 0.00 s 6746s [1583/8505] TestRipper::ParserEvents#test_rescue_class = 0.00 s 6746s [1584/8505] TestRipper::ParserEvents#test_binary(==) = 0.00 s 6746s [1585/8505] TestRipper::ParserEvents#test_symbols_new = 0.00 s 6746s [1586/8505] TestRipper::ParserEvents#test_binary(%) = 0.00 s 6746s [1587/8505] TestRipper::ParserEvents#test_var_field = 0.00 s 6746s [1588/8505] TestRipper::ParserEvents#test_aref = 0.00 s 6746s [1589/8505] TestRipper::ParserEvents#test_binary(|) = 0.00 s 6746s [1590/8505] TestRipper::ParserEvents#test_param_error = 0.00 s 6746s [1591/8505] TestRipper::ParserEvents#test_kwrest_param = 0.00 s 6746s [1592/8505] TestRipper::ParserEvents#test_params_mlhs = 0.00 s 6746s [1593/8505] TestRipper::ParserEvents#test_binary(!=) = 0.00 s 6746s [1594/8505] TestRipper::ParserEvents#test_BEGIN = 0.00 s 6746s [1595/8505] TestRipper::ParserEvents#test_top_const_field = 0.00 s 6746s [1596/8505] TestRipper::ParserEvents#test_xstring_new = 0.00 s 6746s [1597/8505] TestRipper::ParserEvents#test_const_path_ref = 0.00 s 6746s [1598/8505] TestRipper::ParserEvents#test_aryptn = 0.00 s 6746s [1599/8505] TestRipper::ParserEvents#test_assign = 0.00 s 6746s [1600/8505] TestRipper::ParserEvents#test_invalid_class_variable_name = 0.00 s 6746s [1601/8505] TestRipper::ParserEvents#test_if = 0.00 s 6746s [1602/8505] TestRipper::ParserEvents#test_const_path_field = 0.00 s 6746s [1603/8505] TestRipper::ParserEvents#test_command = 0.00 s 6746s [1604/8505] TestRipper::ParserEvents#test_method_add_block = 0.00 s 6746s [1605/8505] TestRipper::ParserEvents#test_mrhs_add_star = 0.00 s 6746s [1606/8505] TestRipper::ParserEvents#test_words_new = 0.00 s 6746s [1607/8505] TestRipper::ParserEvents#test_until = 0.00 s 6746s [1608/8505] TestRipper::ParserEvents#test_defs = 0.00 s 6746s [1609/8505] TestRipper::ParserEvents#test_invalid_global_variable_name = 0.00 s 6746s [1610/8505] TestRipper::ParserEvents#test_END = 0.00 s 6746s [1611/8505] TestRipper::ParserEvents#test_lambda = 0.00 s 6746s [1612/8505] TestRipper::ParserEvents#test_const_ref = 0.00 s 6746s [1613/8505] TestRipper::ParserEvents#test_rescue = 0.00 s 6746s [1614/8505] TestRipper::ParserEvents#test_magic_comment = 0.00 s 6746s [1615/8505] TestRipper::ParserEvents#test_fndptn = 0.00 s 6746s [1616/8505] TestRipper::ParserEvents#test_mrhs_add = 0.00 s 6746s [1617/8505] TestRipper::ParserEvents#test_assoc_splat = 0.00 s 6746s [1618/8505] TestRipper::ParserEvents#test_undef = 0.00 s 6746s [1619/8505] TestDateAttr#test__attr = 0.00 s 6746s [1620/8505] TestDateAttr#test__wday_predicate = 0.00 s 6746s [1621/8505] HTTPResponseTest#test_read_body_block_mod = 0.03 s 6746s [1622/8505] HTTPResponseTest#test_raises_exception_with_missing_reason = 0.01 s 6746s [1623/8505] HTTPResponseTest#test_read_body = 0.02 s 6746s [1624/8505] HTTPResponseTest#test_uri_equals = 0.00 s 6746s [1625/8505] HTTPResponseTest#test_read_body_string = 0.00 s 6746s [1626/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_meta_content_charset = 0.01 s 6746s [1627/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_content_range = 0.00 s 6746s [1628/8505] HTTPResponseTest#test_allow_empty_reason_code = 0.00 s 6746s [1629/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_disabled = 0.00 s 6746s [1630/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso8859_1_meta_charset = 0.01 s 6746s [1631/8505] HTTPResponseTest#test_ensure_zero_space_does_not_regress = 0.00 s 6746s [1632/8505] HTTPResponseTest#test_singleline_header = 0.00 s 6746s [1633/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_content_type_header = 0.00 s 6746s [1634/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_uppercase = 0.01 s 6746s [1635/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_empty_body = 0.01 s 6746s [1636/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso_8859_1_content_type_header = 0.00 s 6746s [1637/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_iso8859_1_meta_content_charset = 0.00 s 6746s [1638/8505] HTTPResponseTest#test_read_body_body_encoding_encoding = 0.00 s 6746s [1639/8505] HTTPResponseTest#test_normal_status_line = 0.00 s 6746s [1640/8505] HTTPResponseTest#test_read_body_content_encoding_deflate_empty_body_no_length = 0.00 s 6746s [1641/8505] HTTPResponseTest#test_read_body_body_encoding_string = 0.00 s 6746s [1642/8505] HTTPResponseTest#test_allow_trailing_space_after_status = 0.00 s 6746s [1643/8505] HTTPResponseTest#test_read_body_body_encoding_true_with_utf8_meta_charset = 0.00 s 6746s [1644/8505] HTTPResponseTest#test_read_code_type = 0.00 s 6746s [1645/8505] HTTPResponseTest#test_multiline_header = 0.00 s 6746s [1646/8505] HTTPResponseTest#test_read_body_block = 0.00 s 6746s [1647/8505] HTTPResponseTest#test_inspect_response = 0.01 s 6746s [1648/8505] TestRDocParserC#test_define_method_with_prototype = 0.01 s 6746s [1649/8505] TestRDocParserC#test_do_constants_file = 0.01 s 6746s [1650/8505] TestRDocParserC#test_do_constants_curses = 0.02 s 6746s [1651/8505] TestRDocParserC#test_define_method_private = 0.03 s 6746s [1652/8505] TestRDocParserC#test_do_classes_class_under_rb_path2class = 0.01 s 6746s [1653/8505] TestRDocParserC#test_find_body_define = 0.00 s 6746s [1654/8505] TestRDocParserC#test_find_class_comment_define_class_Init_Foo_no_void = 0.00 s 6746s [1655/8505] TestRDocParserC#test_do_classes_module_under = 0.00 s 6746s [1656/8505] TestRDocParserC#test_handle_method_initialize = 0.00 s 6746s [1657/8505] TestRDocParserC#test_do_classes_module = 0.00 s 6746s [1658/8505] TestRDocParserC#test_find_body_cast = 0.00 s 6746s [1659/8505] TestRDocParserC#test_find_class_comment_define_class_under_Init = 0.00 s 6746s [1660/8505] TestRDocParserC#test_define_method_singleton = 0.01 s 6746s [1661/8505] TestRDocParserC#test_do_methods_in_cpp = 0.01 s 6746s [1662/8505] TestRDocParserC#test_find_modifiers_yields = 0.00 s 6746s [1663/8505] TestRDocParserC#test_find_class_comment = 0.00 s 6746s [1664/8505] TestRDocParserC#test_find_body = 0.00 s 6746s [1665/8505] TestRDocParserC#test_scan = 0.00 s 6746s [1666/8505] TestRDocParserC#test_define_method_dynamically = 0.00 s 6746s [1667/8505] TestRDocParserC#test_do_includes = 0.00 s 6746s [1668/8505] TestRDocParserC#test_find_body_2 = 0.01 s 6746s [1669/8505] TestRDocParserC#test_find_body_macro = 0.00 s 6746s [1670/8505] TestRDocParserC#test_find_attr_comment_document_attr = 0.00 s 6746s [1671/8505] TestRDocParserC#test_do_methods_in_y = 0.01 s 6746s [1672/8505] TestRDocParserC#test_find_body_define_comment = 0.00 s 6746s [1673/8505] TestRDocParserC#test_find_class_comment_define_class_bogus_comment = 0.00 s 6746s [1674/8505] TestRDocParserC#test_find_body_document_method_same = 0.00 s 6746s [1675/8505] TestRDocParserC#test_do_aliases_missing_class = 0.00 s 6746s [1676/8505] TestRDocParserC#test_find_body_document_method = 0.01 s 6746s [1677/8505] TestRDocParserC#test_find_class_comment_define_class = 0.00 s 6746s [1678/8505] TestRDocParserC#test_load_variable_map_trim = 0.00 s 6746s [1679/8505] TestRDocParserC#test_do_constants = 0.01 s 6746s [1680/8505] TestRDocParserC#test_define_method = 0.00 s 6746s [1681/8505] TestRDocParserC#test_do_classes_class = 0.00 s 6746s [1682/8505] TestRDocParserC#test_do_classes_class_under = 0.00 s 6746s [1683/8505] TestRDocParserC#test_find_class_comment_init = 0.00 s 6746s [1684/8505] TestRDocParserC#test_do_attr_rb_attr = 0.01 s 6746s [1685/8505] TestRDocParserC#test_handle_method_args_1 = 0.00 s 6746s [1686/8505] TestRDocParserC#test_handle_method_args_minus_1 = 0.00 s 6746s [1687/8505] TestRDocParserC#test_markup_format_override = 0.00 s 6746s [1688/8505] TestRDocParserC#test_class_can_parse = 0.01 s 6746s [1689/8505] TestRDocParserC#test_define_method_private_singleton = 0.00 s 6746s [1690/8505] TestRDocParserC#test_rb_scan_args = 0.00 s 6746s [1691/8505] TestRDocParserC#test_load_variable_map_legacy = 0.00 s 6746s [1692/8505] TestRDocParserC#test_do_attr_rb_define_attr = 0.00 s 6746s [1693/8505] TestRDocParserC#test_scan_order_dependent = 0.00 s 6746s [1694/8505] TestRDocParserC#test_do_methods_in_c = 0.01 s 6746s [1695/8505] TestRDocParserC#test_find_const_comment_document_const = 0.00 s 6746s [1696/8505] TestRDocParserC#test_find_attr_comment_document_attr_overlap = 0.00 s 6746s [1697/8505] TestRDocParserC#test_define_method_with_category = 0.00 s 6746s [1698/8505] TestRDocParserC#test_find_const_comment_rb_define = 0.00 s 6746s [1699/8505] TestRDocParserC#test_find_attr_comment_document_attr_oneline = 0.00 s 6746s [1700/8505] TestRDocParserC#test_find_body_document_method_equals = 0.00 s 6746s [1701/8505] TestRDocParserC#test_do_attr_rb_attr_2 = 0.00 s 6746s [1702/8505] TestRDocParserC#test_do_missing = 0.05 s 6746s [1703/8505] TestRDocParserC#test_look_for_directives_in = 0.00 s 6746s [1704/8505] TestRDocParserC#test_find_class_comment_define_class_under = 0.00 s 6746s [1705/8505] TestRDocParserC#test_load_variable_map_empty = 0.00 s 6746s [1706/8505] TestRDocParserC#test_markup_format_default = 0.01 s 6746s [1707/8505] TestRDocParserC#test_handle_method_args_0 = 0.00 s 6746s [1708/8505] TestRDocParserC#test_load_variable_map = 0.00 s 6746s [1709/8505] TestRDocParserC#test_handle_method_args_minus_2 = 0.00 s 6746s [1710/8505] TestRDocParserC#test_handle_method_args_2 = 0.00 s 6746s [1711/8505] TestRDocParserC#test_do_aliases = 0.01 s 6746s [1712/8505] TestRDocParserC#test_find_class_comment_define_class_Init_Foo = 0.00 s 6746s [1713/8505] TestRDocParserC#test_do_classes_duplicate_class = 0.00 s 6746s [1714/8505] TestRDocParserC#test_do_aliases_singleton = 0.01 s 6746s [1715/8505] TestRDocParserC#test_find_modifiers_call_seq = 0.01 s 6746s [1716/8505] TestRDocParserC#test_find_modifiers_nodoc = 0.00 s 6746s [1717/8505] TestRDocParserC#test_initialize = 0.00 s 6746s [1718/8505] TestRDocParserC#test_do_classes_struct = 0.00 s 6746s [1719/8505] TestRDocParserC#test_do_methods_singleton_class = 0.00 s 6746s [1720/8505] TestRDocParserC#test_do_missing_cycle = 0.01 s 6746s [1721/8505] TestRDocParserC#test_handle_singleton = 0.00 s 6746s [1722/8505] TestRDocParserC#test_find_const_comment_document_const_full_name = 0.00 s 6746s [1723/8505] TestRDocParserC#test_do_classes_singleton = 0.00 s 6746s [1724/8505] TestRDocParserC#test_load_variable_map_singleton = 0.00 s 6746s [1725/8505] TestRDocParserC#test_find_alias_comment = 0.00 s 6746s [1726/8505] TestRDocParserC#test_scan_method_copy = 0.02 s 6746s [1727/8505] Rinda::TupleSpaceTest#test_core_01 = 0.15 s 6746s [1728/8505] Rinda::TupleSpaceTest#test_symbol_tuple = 0.01 s 6747s [1729/8505] Rinda::TupleSpaceTest#test_cancel_01 = 0.11 s 6747s [1730/8505] Rinda::TupleSpaceTest#test_00_tuple = 0.00 s 6747s [1731/8505] Rinda::TupleSpaceTest#test_00_DRbObject = 0.01 s 6747s [1732/8505] Rinda::TupleSpaceTest#test_cancel_02 = 0.11 s 6747s [1733/8505] Rinda::TupleSpaceTest#test_00_renewer = 0.01 s 6747s [1734/8505] Rinda::TupleSpaceTest#test_core_03_notify = 0.04 s 6747s [1735/8505] Rinda::TupleSpaceTest#test_inp_rdp = 0.01 s 6747s [1736/8505] Rinda::TupleSpaceTest#test_00_template = 0.01 s 6747s [1737/8505] Rinda::TupleSpaceTest#test_ruby_talk_264062 = 0.11 s 6747s [1738/8505] Rinda::TupleSpaceTest#test_core_02 = 0.11 s 6747s [1739/8505] TestAbbrev#test_abbrev = 0.01 s 6747s [1740/8505] TestAbbrev#test_abbrev_lf = 0.00 s 6747s [1741/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_unquoted_value_multiple_characters_col_sep = 0.00 s 6747s [1742/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_double_quote_outside_quote = 0.00 s 6747s [1743/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_quoted_value = 0.00 s 6747s [1744/8505] TestCSVParseLiberalParsing::TestBackslashQuote::DifferentOFS#test_unquoted_value = 0.00 s 6747s [1745/8505] TestBenchmark#test_benchmark_does_not_print_any_space_if_the_given_caption_is_empty = 0.01 s 6747s [1746/8505] TestBenchmark#test_report_item_shows_the_title__even_if_not_a_string = 0.01 s 6747s [1747/8505] TestBenchmark#test_tms_to_h = 0.00 s 6747s [1748/8505] TestBenchmark#test_bm_returns_an_Array_of_the_times_with_the_labels = 0.02 s 6747s [1749/8505] TestBenchmark#test_benchmark_makes_extra_calculations_with_an_Array_at_the_end_of_the_benchmark_and_show_the_result = 0.01 s 6747s [1750/8505] TestBenchmark#test_bmbm_correctly_output_when_the_label_width_is_given__bmbm_ignore_it__but_it_is_a_frequent_mistake = 0.00 s 6748s [1751/8505] TestBenchmark#test_realtime_output = 1.00 s 6748s [1752/8505] TestBenchmark#test_bm_can_make_extra_calcultations_with_an_array_at_the_end_of_the_benchmark = 0.01 s 6748s [1753/8505] TestBenchmark#test_bugs_ruby_dev_40906_can_add_in_place_the_time_of_execution_of_the_block_given = 0.10 s 6748s [1754/8505] TestBenchmark#test_bmbm_correctly_guess_the_label_width_even_when_not_given = 0.00 s 6748s [1755/8505] TestBenchmark#test_bm_correctly_output_when_no_label_is_given = 0.01 s 6748s [1756/8505] TestBenchmark#test_bm_correctly_output_when_the_label_width_is_given = 0.00 s 6748s [1757/8505] TestBenchmark#test_tms_wont_modify_the_format_String_given = 0.00 s 6748s [1758/8505] TestBenchmark#test_tms_outputs_nicely = 0.00 s 6748s [1759/8505] OpenSSL::TestDigest#test_digest = 0.00 s 6748s [1760/8505] OpenSSL::TestDigest#test_eql = 0.00 s 6748s [1761/8505] OpenSSL::TestDigest#test_dup = 0.00 s 6748s [1762/8505] OpenSSL::TestDigest#test_reset = 0.00 s 6748s [1763/8505] OpenSSL::TestDigest#test_openssl_digest = 0.00 s 6748s [1764/8505] OpenSSL::TestDigest#test_digest_constants = 0.01 s 6748s [1765/8505] OpenSSL::TestDigest#test_digest_by_oid_and_name = 0.00 s 6748s [1766/8505] OpenSSL::TestDigest#test_sha2 = 0.00 s 6748s [1767/8505] OpenSSL::TestDigest#test_info = 0.00 s 6748s [1768/8505] OpenSSL::TestDigest#test_digest_by_oid_and_name_sha2 = 0.00 s 6748s [1769/8505] TestRDocGeneratorPOTPOEntry#test_extracted_comment_normal = 0.01 s 6748s [1770/8505] TestRDocGeneratorPOTPOEntry#test_references_normal = 0.01 s 6748s [1771/8505] TestRDocGeneratorPOTPOEntry#test_msgid_back_slash = 0.00 s 6748s [1772/8505] TestRDocGeneratorPOTPOEntry#test_translator_comment_multiple_lines = 0.00 s 6748s [1773/8505] TestRDocGeneratorPOTPOEntry#test_references_multiple = 0.00 s 6748s [1774/8505] TestRDocGeneratorPOTPOEntry#test_flags_normal = 0.00 s 6748s [1775/8505] TestRDocGeneratorPOTPOEntry#test_extracted_comment_multiple_lines = 0.00 s 6748s [1776/8505] TestRDocGeneratorPOTPOEntry#test_msgid_tab = 0.00 s 6748s [1777/8505] TestRDocGeneratorPOTPOEntry#test_full = 0.00 s 6748s [1778/8505] TestRDocGeneratorPOTPOEntry#test_translator_comment_normal = 0.00 s 6748s [1779/8505] TestRDocGeneratorPOTPOEntry#test_msgid_double_quote = 0.00 s 6748s [1780/8505] TestRDocGeneratorPOTPOEntry#test_msgid_normal = 0.00 s 6748s [1781/8505] TestRDocGeneratorPOTPOEntry#test_flags_multiple = 0.00 s 6748s [1782/8505] TestRDocGeneratorPOTPOEntry#test_msgid_multiple_lines = 0.01 s 6748s [1783/8505] Psych::TestNumeric#test_non_float_with_0 = 0.00 s 6748s [1784/8505] Psych::TestNumeric#test_big_decimal_round_trip = 0.02 s 6748s [1785/8505] Psych::TestNumeric#test_does_not_attempt_numeric = 0.00 s 6748s [1786/8505] Psych::TestNumeric#test_big_decimal_tag = 0.00 s 6748s [1787/8505] Psych::TestNumeric#test_string_with_commas_with_strict_integer = 0.00 s 6748s [1788/8505] Psych::TestNumeric#test_string_with_commas = 0.00 s 6748s [1789/8505] Psych::TestNumeric#test_load_float_with_dot = 0.00 s 6748s [1790/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_double_default = 0.00 s 6748s [1791/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_quote_empty_default = 0.00 s 6748s [1792/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_default = 0.00 s 6748s [1793/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_only_false = 0.00 s 6748s [1794/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_double_false = 0.00 s 6748s [1795/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_only_default = 0.00 s 6748s [1796/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_empty_false = 0.00 s 6748s [1797/8505] TestCSVWriteQuoteEmptyGenerate::DifferentOFS#test_quote_empty_false = 0.00 s 6748s [1798/8505] HTTPSProxyTest#test_https_proxy_authentication = 0.03 s 6748s [1799/8505] TestTimeExtension#test_completion = 0.00 s 6748s [1800/8505] TestTimeExtension#test_parse_offset_hour_minute_second = 0.00 s 6748s [1801/8505] TestTimeExtension#test_encode_httpdate = 0.00 s 6748s [1802/8505] TestTimeExtension#test_xmlschema = 0.01 s 6748s [1803/8505] TestTimeExtension#test_rfc2616 = 0.01 s 6748s [1804/8505] TestTimeExtension#test_encode_rfc2822 = 0.00 s 6748s [1805/8505] TestTimeExtension#test_parse_fraction = 0.00 s 6748s [1806/8505] TestTimeExtension#test_iso8601_nsec = 0.00 s 6748s [1807/8505] TestTimeExtension#test_strptime_s_z = 0.01 s 6748s [1808/8505] TestTimeExtension#test_strptime_wuvg = 0.01 s 6748s [1809/8505] TestTimeExtension#test_rfc2822 = 0.00 s 6748s [1810/8505] TestTimeExtension#test_strptime_empty = 0.00 s 6748s [1811/8505] TestTimeExtension#test_strptime = 0.00 s 6748s [1812/8505] TestTimeExtension#test_rfc2822_utc_roundtrip_summer = 0.00 s 6748s [1813/8505] TestTimeExtension#test_ruby_talk_152866 = 0.00 s 6748s [1814/8505] TestTimeExtension#test_xmlschema_alias = 0.00 s 6748s [1815/8505] TestTimeExtension#test_xmlschema_leap_second = 0.00 s 6748s [1816/8505] TestTimeExtension#test_nsec = 0.00 s 6752s [1817/8505] TestTimeExtension#test_huge_precision = 3.15 s 6752s [1818/8505] TestTimeExtension#test_rfc2822_utc_roundtrip_winter = 0.00 s 6752s [1819/8505] TestTimeExtension#test_strptime_p = 0.00 s 6752s [1820/8505] TestTimeExtension#test_strptime_Ymd_z = 0.00 s 6752s [1821/8505] TestTimeExtension#test_parse_leap_second = 0.00 s 6752s [1822/8505] TestTimeExtension#test_strptime_j = 0.00 s 6752s [1823/8505] TestTimeExtension#test_invalid = 0.02 s 6752s [1824/8505] TestTimeExtension#test_parse_now_nil = 0.00 s 6752s [1825/8505] TestTimeExtension#test_xmlschema_fraction = 0.00 s 6752s [1826/8505] TestTimeExtension#test_iso8601_leap_second = 0.01 s 6752s [1827/8505] TestTimeExtension#test_parse_with_various_object = 0.09 s 6752s [1828/8505] TestTimeExtension#test_rfc822 = 0.00 s 6752s [1829/8505] TestTimeExtension#test_iso8601_alias = 0.01 s 6752s [1830/8505] TestTimeExtension#test_iso8601 = 0.01 s 6752s [1831/8505] TestTimeExtension#test_xmlschema_nsec = 0.00 s 6752s [1832/8505] TestTimeExtension#test_iso8601_fraction = 0.00 s 6752s [1833/8505] TestTimeExtension#test_rfc2822_leap_second = 0.00 s 6752s [1834/8505] TestLoggerSeverity#test_enum = 0.01 s 6752s [1835/8505] TestLoggerSeverity#test_level_assignment = 0.00 s 6752s [1836/8505] JSONStringMatchingTest#test_match_date = 0.00 s 6752s [1837/8505] TestShellwords#test_frozenness = 0.01 s 6752s [1838/8505] TestShellwords#test_shellwords = 0.00 s 6752s [1839/8505] TestShellwords#test_shellescape = 0.00 s 6752s [1840/8505] TestShellwords#test_backslashes = 0.00 s 6752s [1841/8505] TestShellwords#test_unmatched_double_quote = 0.00 s 6752s [1842/8505] TestShellwords#test_whitespace = 0.01 s 6752s [1843/8505] TestShellwords#test_unmatched_quotes = 0.00 s 6752s [1844/8505] TestShellwords#test_unmatched_single_quote = 0.00 s 6752s [1845/8505] TestShellwords#test_multibyte_characters = 0.00 s 6752s [1846/8505] TestStringScannerRactor#test_ractor = 0.00 s 6752s [1847/8505] Rinda::TupleSpaceProxyTest#test_symbol_tuple = 0.02 s 6752s [1848/8505] Rinda::TupleSpaceProxyTest#test_cancel_01 = 0.17 s 6752s [1849/8505] Rinda::TupleSpaceProxyTest#test_00_tuple = 0.01 s 6761s [1850/8505] Rinda::TupleSpaceProxyTest#test_take_bug_8215/usr/share/jruby/lib/ruby/stdlib/drb/drb.rb:366: warning: ObjectSpace is disabled; _id2ref only supports immediates, pass -X+O to enable 6761s = 9.32 s 6761s [1851/8505] Rinda::TupleSpaceProxyTest#test_00_DRbObject = 0.01 s 6761s [1852/8505] Rinda::TupleSpaceProxyTest#test_cancel_02 = 0.12 s 6761s [1853/8505] Rinda::TupleSpaceProxyTest#test_00_renewer = 0.01 s 6761s [1854/8505] Rinda::TupleSpaceProxyTest#test_inp_rdp = 0.02 s 6762s [1855/8505] Rinda::TupleSpaceProxyTest#test_ruby_talk_264062 = 0.23 s 6762s [1856/8505] CGICoreTest#test_cgi_core_htmltype_header = 0.02 s 6762s [1857/8505] CGICoreTest#test_cgi_core_params_GET = 0.02 s 6762s [1858/8505] CGICoreTest#test_cgi_core_environs = 0.01 s 6762s [1859/8505] CGICoreTest#test_cgi_core_out = 0.02 s 6762s [1860/8505] CGICoreTest#test_cgi_core_print = 0.00 s 6762s [1861/8505] CGICoreTest#test_cgi_parse_illegal_query = 0.00 s 6762s [1862/8505] CGICoreTest#test_cgi_core_params_encoding_check = 0.00 s 6762s [1863/8505] CGICoreTest#test_cgi_core_cookie = 0.01 s 6762s [1864/8505] CGICoreTest#test_cgi_core_params_POST = 0.00 s 6762s [1865/8505] Reline::Config::Test#test_string_value_with_parens = 0.03 s 6762s [1866/8505] Reline::Config::Test#test_default_key_bindings = 0.07 s 6762s [1867/8505] Reline::Config::Test#test_comment_line = 0.00 s 6762s [1868/8505] Reline::Config::Test#test_empty_inputrc_env = 0.00 s 6762s [1869/8505] Reline::Config::Test#test_bind_key_with_meta_chars = 0.00 s 6762s [1870/8505] Reline::Config::Test#test_string_value_with_parens_and_quotes = 0.00 s 6762s [1871/8505] Reline::Config::Test#test_invalid_keystroke = 0.00 s 6762s [1872/8505] Reline::Config::Test#test_bind_key_with_hexadecimal_number = 0.00 s 6762s [1873/8505] Reline::Config::Test#test_inputrc_with_eucjp = 0.01 s 6762s [1874/8505] Reline::Config::Test#test_inputrc = 0.00 s 6762s [1875/8505] Reline::Config::Test#test_encoding_is_ascii = 0.00 s 6762s [1876/8505] Reline::Config::Test#test_string_value_with_brackets = 0.00 s 6762s [1877/8505] Reline::Config::Test#test_inputrc_with_utf8 = 0.00 s 6762s [1878/8505] Reline::Config::Test#test_bind_key = 0.00 s 6762s [1879/8505] Reline::Config::Test#test_bind_key_with_macro = 0.00 s 6762s [1880/8505] Reline::Config::Test#test_relative_xdg_config_home = 0.01 s 6762s [1881/8505] Reline::Config::Test#test_unclosed_if = 0.00 s 6762s [1882/8505] Reline::Config::Test#test_encoding_is_not_ascii = 0.00 s 6762s [1883/8505] Reline::Config::Test#test_empty_xdg_config_home = 0.00 s 6762s [1884/8505] Reline::Config::Test#test_history_size = 0.00 s 6762s [1885/8505] Reline::Config::Test#test_bind_key_with_escaped_chars = 0.00 s 6762s [1886/8505] Reline::Config::Test#test_include = 0.01 s 6762s [1887/8505] Reline::Config::Test#test_read_lines = 0.00 s 6762s [1888/8505] Reline::Config::Test#test_read_lines_with_variable = 0.00 s 6762s [1889/8505] Reline::Config::Test#test_bind_key_with_octal_number = 0.00 s 6762s [1890/8505] Reline::Config::Test#test_string_value_with_brackets_and_quotes = 0.01 s 6762s [1891/8505] Reline::Config::Test#test_unmatched_endif = 0.01 s 6762s [1892/8505] Reline::Config::Test#test_unmatched_else = 0.00 s 6762s [1893/8505] Reline::Config::Test#test_xdg_config_home = 0.01 s 6762s [1894/8505] Reline::Config::Test#test_additional_key_bindings_for_other_keymap = 0.00 s 6762s [1895/8505] Reline::Config::Test#test_additional_key_bindings = 0.00 s 6762s [1896/8505] Reline::Config::Test#test_additional_key_bindings_with_nesting_and_comment_out = 0.00 s 6762s [1897/8505] Reline::Config::Test#test_string_value = 0.00 s 6762s [1898/8505] Reline::Config::Test#test_bind_key_with_ctrl_chars = 0.00 s 6762s [1899/8505] Reline::Config::Test#test_if_with_false = 0.00 s 6762s [1900/8505] Reline::Config::Test#test_if = 0.00 s 6762s [1901/8505] Reline::Config::Test#test_empty_inputrc = 0.00 s 6762s [1902/8505] Reline::Config::Test#test_if_with_indent = 0.00 s 6762s [1903/8505] TestDigestRactor::TestSHA1Ractor#test_s_hexdigest = 0.00 s 6762s [1904/8505] TestBigDecimalUtil#test_Float_to_d_without_precision = 0.01 s 6762s [1905/8505] TestBigDecimalUtil#test_Complex_to_d = 0.01 s 6762s [1906/8505] TestBigDecimalUtil#test_Rational_to_d = 0.00 s 6762s [1907/8505] TestBigDecimalUtil#test_Rational_to_d_with_negative_precision = 0.00 s 6762s [1908/8505] TestBigDecimalUtil#test_Integer_to_d = 0.00 s 6762s [1909/8505] TestBigDecimalUtil#test_Float_to_d_with_precision = 0.00 s 6762s [1910/8505] TestBigDecimalUtil#test_Rational_to_d_with_zero_precision = 0.00 s 6762s [1911/8505] TestBigDecimalUtil#test_Float_to_d_issue_192 = 0.00 s 6762s [1912/8505] TestBigDecimalUtil#test_String_to_d = 0.00 s 6762s [1913/8505] TestBigDecimalUtil#test_Float_to_d_bug13331 = 0.00 s 6762s [1914/8505] TestBigDecimalUtil#test_BigDecimal_to_d = 0.00 s 6762s [1915/8505] TestBigDecimalUtil#test_Nil_to_d = 0.00 s 6762s [1916/8505] TestBigDecimalUtil#test_invalid_String_to_d = 0.00 s 6762s [1917/8505] TestCSVHeaders#test_specified_empty_line = 0.00 s 6762s [1918/8505] TestCSVHeaders#test_headers_reader = 0.01 s 6762s [1919/8505] TestCSVHeaders#test_parse_empty_line = 0.00 s 6762s [1920/8505] TestCSVHeaders#test_table_support = 0.00 s 6762s [1921/8505] TestCSVHeaders#test_specified_empty = 0.00 s 6762s [1922/8505] TestCSVHeaders#test_builtin_symbol_converter_with_punctuation = 0.00 s 6762s [1923/8505] TestCSVHeaders#test_builtin_symbol_converter = 0.00 s 6762s [1924/8505] TestCSVHeaders#test_blank_row = 0.00 s 6762s [1925/8505] TestCSVHeaders#test_return_headers = 0.02 s 6762s [1926/8505] TestCSVHeaders#test_parse_empty = 0.00 s 6762s [1927/8505] TestCSVHeaders#test_nil_row_header = 0.00 s 6762s [1928/8505] TestCSVHeaders#test_array_of_headers = 0.01 s 6762s [1929/8505] TestCSVHeaders#test_csv_header_string_inherits_separators = 0.01 s 6762s [1930/8505] TestCSVHeaders#test_csv_header_string = 0.01 s 6762s [1931/8505] TestCSVHeaders#test_converters = 0.00 s 6762s [1932/8505] TestCSVHeaders#test_builtin_downcase_converter = 0.00 s 6762s [1933/8505] TestCSVHeaders#test_custom_converter = 0.00 s 6762s [1934/8505] TestCSVHeaders#test_first_row = 0.01 s 6762s [1935/8505] TestCSVHeaders#test_skip_blanks = 0.00 s 6762s [1936/8505] TestCSVHeaders#test_builtin_converters_with_blank_header = 0.00 s 6762s [1937/8505] Psych::TestDocument#test_parse_version = 0.00 s 6762s [1938/8505] Psych::TestDocument#test_emit_bad_tag = 0.00 s 6762s [1939/8505] Psych::TestDocument#test_emit_multitag = 0.00 s 6762s [1940/8505] Psych::TestDocument#test_emit_tag = 0.00 s 6762s [1941/8505] Psych::TestDocument#test_emit_version = 0.00 s 6763s [1942/8505] TestNetHTTPPartialResponse#test_partial_response = 0.43 s 6763s [1943/8505] TestRDocMethodAttr#test_initialize_copy = 0.04 s 6763s [1944/8505] TestRDocMethodAttr#test_block_params_equal = 0.07 s 6763s [1945/8505] TestRDocMethodAttr#test_output_name = 0.03 s 6763s [1946/8505] TestRDocMethodAttr#test_pretty_print = 0.06 s 6763s [1947/8505] TestRDocMethodAttr#test_is_alias_for = 0.03 s 6763s [1948/8505] TestRDocMethodAttr#test_equals2 = 0.03 s 6763s [1949/8505] TestRDocMethodAttr#test_find_method_or_attribute_recursive = 0.03 s 6763s [1950/8505] TestRDocMethodAttr#test_spaceship = 0.05 s 6763s [1951/8505] TestRDocMethodAttr#test_full_name = 0.06 s 6763s [1952/8505] TestRDocMethodAttr#test_to_s = 0.06 s 6763s [1953/8505] TestRDocMethodAttr#test_search_record = 0.07 s 6763s [1954/8505] OpenSSL::TestOCSP#test_request_nonce = 0.04 s 6763s [1955/8505] OpenSSL::TestOCSP#test_basic_response_der = 0.05 s 6763s [1956/8505] OpenSSL::TestOCSP#test_request_sign_verify = 0.04 s 6763s [1957/8505] OpenSSL::TestOCSP#test_certificate_id_hash_algorithm = 0.01 s 6763s [1958/8505] OpenSSL::TestOCSP#test_certificate_id_issuer_name_hash = 0.01 s 6763s [1959/8505] OpenSSL::TestOCSP#test_request_dup = 0.01 s 6763s [1960/8505] OpenSSL::TestOCSP#test_certificate_id_dup = 0.01 s 6763s [1961/8505] OpenSSL::TestOCSP#test_response_dup = 0.02 s 6763s [1962/8505] OpenSSL::TestOCSP#test_basic_response_dup = 0.01 s 6763s [1963/8505] OpenSSL::TestOCSP#test_certificate_id_der = 0.01 s 6763s [1964/8505] OpenSSL::TestOCSP#test_response = 0.01 s 6763s [1965/8505] OpenSSL::TestOCSP#test_response_der = 0.01 s 6763s [1966/8505] OpenSSL::TestOCSP#test_single_response_check_validity = 0.01 s 6763s [1967/8505] OpenSSL::TestOCSP#test_single_response_der = 0.01 s 6763s [1968/8505] OpenSSL::TestOCSP#test_certificate_id_issuer_key_hash = 0.01 s 6763s [1969/8505] OpenSSL::TestOCSP#test_basic_response_response_operations = 0.01 s 6763s [1970/8505] TestDigestRactor::TestSHA384Ractor#test_s_hexdigest = 0.00 s 6763s [1971/8505] TestCSVHeaders::DifferentOFS#test_specified_empty_line = 0.00 s 6763s [1972/8505] TestCSVHeaders::DifferentOFS#test_headers_reader = 0.00 s 6764s [1973/8505] TestCSVHeaders::DifferentOFS#test_parse_empty_line = 0.00 s 6764s [1974/8505] TestCSVHeaders::DifferentOFS#test_table_support = 0.00 s 6764s [1975/8505] TestCSVHeaders::DifferentOFS#test_specified_empty = 0.00 s 6764s [1976/8505] TestCSVHeaders::DifferentOFS#test_builtin_symbol_converter_with_punctuation = 0.00 s 6764s [1977/8505] TestCSVHeaders::DifferentOFS#test_builtin_symbol_converter = 0.00 s 6764s [1978/8505] TestCSVHeaders::DifferentOFS#test_blank_row = 0.00 s 6764s [1979/8505] TestCSVHeaders::DifferentOFS#test_return_headers = 0.01 s 6764s [1980/8505] TestCSVHeaders::DifferentOFS#test_parse_empty = 0.00 s 6764s [1981/8505] TestCSVHeaders::DifferentOFS#test_nil_row_header = 0.00 s 6764s [1982/8505] TestCSVHeaders::DifferentOFS#test_array_of_headers = 0.01 s 6764s [1983/8505] TestCSVHeaders::DifferentOFS#test_csv_header_string_inherits_separators = 0.01 s 6764s [1984/8505] TestCSVHeaders::DifferentOFS#test_csv_header_string = 0.02 s 6764s [1985/8505] TestCSVHeaders::DifferentOFS#test_converters = 0.01 s 6764s [1986/8505] TestCSVHeaders::DifferentOFS#test_builtin_downcase_converter = 0.00 s 6764s [1987/8505] TestCSVHeaders::DifferentOFS#test_custom_converter = 0.00 s 6764s [1988/8505] TestCSVHeaders::DifferentOFS#test_first_row = 0.01 s 6764s [1989/8505] TestCSVHeaders::DifferentOFS#test_skip_blanks = 0.01 s 6764s [1990/8505] TestCSVHeaders::DifferentOFS#test_builtin_converters_with_blank_header = 0.00 s 6764s [1991/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf = 0.00 s 6764s [1992/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr = 0.00 s 6764s [1993/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_euc_jp = 0.00 s 6764s [1994/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_comma_nil = 0.00 s 6764s [1995/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_lf = 0.00 s 6764s [1996/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_last = 0.00 s 6764s [1997/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_empty = 0.00 s 6764s [1998/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_character_double = 0.00 s 6764s [1999/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_tab = 0.00 s 6764s [2000/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_comma = 0.00 s 6764s [2001/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_last = 0.00 s 6764s [2002/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_one_element = 0.00 s 6764s [2003/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote = 0.00 s 6764s [2004/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf = 0.00 s 6764s [2005/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_with_default_internal = 0.00 s 6764s [2006/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_last = 0.00 s 6764s [2007/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_utf8 = 0.00 s 6764s [2008/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_values_only = 0.00 s 6764s [2009/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma = 0.00 s 6764s [2010/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma_and_value = 0.00 s 6764s [2011/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_force_quotes = 0.00 s 6764s [2012/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_value_lf_nil = 0.00 s 6764s [2013/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_double_only = 0.00 s 6764s [2014/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_values = 0.00 s 6764s [2015/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_row_sep = 0.00 s 6764s [2016/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_lf_cr = 0.00 s 6764s [2017/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_lf = 0.00 s 6764s [2018/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_semi_colon_values = 0.00 s 6764s [2019/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_cr = 0.00 s 6764s [2020/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_comma_double = 0.00 s 6764s [2021/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_values = 0.00 s 6764s [2022/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_semi_colon = 0.00 s 6764s [2023/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_cr = 0.00 s 6764s [2024/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_first = 0.00 s 6764s [2025/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_encoding_with_default_internal = 0.00 s 6764s [2026/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_nil_value_middle = 0.00 s 6764s [2027/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_character = 0.00 s 6764s [2028/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_tab_values = 0.00 s 6764s [2029/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_cr_dot_lf = 0.00 s 6764s [2030/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_quote_lf_value_lf = 0.00 s 6764s [2031/8505] TestCSVWriteGeneralGenerate::DifferentOFS#test_col_sep = 0.00 s 6764s [2032/8505] TestFind#test_prune = 0.01 s 6764s [2033/8505] TestFind#test_enumerator = 0.01 s 6764s [2034/8505] TestFind#test_countdown3 = 0.00 s 6764s [2035/8505] TestFind#test_to_path = 0.01 s 6764s [2036/8505] TestFind#test_countup3 = 0.01 s 6764s [2037/8505] TestFind#test_dangling_symlink = 0.01 s 6764s [2038/8505] TestFind#test_encoding_ascii = 0.01 s 6764s [2039/8505] TestFind#test_relative = 0.01 s 6764s [2040/8505] TestFind#test_change_dir_to_file = 0.02 s 6764s [2041/8505] TestFind#test_empty = 0.00 s 6764s [2042/8505] TestFind#test_rec = 0.01 s 6764s [2043/8505] TestFind#test_dont_follow_symlink = 0.00 s 6764s [2044/8505] TestFind#test_change_dir_to_symlink_loop = 0.01 s 6764s [2045/8505] TestFind#test_nonexistence = 0.00 s 6764s [2046/8505] TestFind#test_unreadable_dir = 0.01 s 6764s [2047/8505] TestFind#test_dangling_symlink_stat_error = 0.00 s 6764s [2048/8505] TestTmpdir#test_mktmpdir_mutate = 0.00 s 6764s [2049/8505] TestTmpdir#test_world_writable = 0.03 s 6764s [2050/8505] TestTmpdir#test_mktmpdir_traversal = 0.01 s 6764s [2051/8505] TestTmpdir#test_mktmpdir_nil = 0.00 s 6764s [2052/8505] TestTmpdir#test_mktmpdir_traversal_array = 0.00 s 6764s [2053/8505] TestTmpdir#test_tmpdir_modifiable = 0.00 s 6764s [2054/8505] Psych::TestParser#test_scalar_plain_implicit = 0.01 s 6764s [2055/8505] Psych::TestParser#test_alias = 0.07 s 6764s [2056/8505] Psych::TestParser#test_mapping_end = 0.00 s 6764s [2057/8505] Psych::TestParser#test_sequence_end = 0.00 s 6764s [2058/8505] Psych::TestParser#test_syntax_error_has_path_for_io = 0.00 s 6764s [2059/8505] Psych::TestParser#test_syntax_error_twice = 0.00 s 6764s [2060/8505] Psych::TestParser#test_sequence_start_tag = 0.00 s 6764s [2061/8505] Psych::TestParser#test_ast_roundtrip = 0.00 s 6764s [2062/8505] Psych::TestParser#test_bom = 0.00 s 6764s [2063/8505] Psych::TestParser#test_scalar_with_anchor = 0.00 s 6764s [2064/8505] Psych::TestParser#test_end_stream = 0.00 s 6764s [2065/8505] Psych::TestParser#test_sequence_start_flow = 0.00 s 6764s [2066/8505] Psych::TestParser#test_scalar_with_tag = 0.00 s 6764s [2067/8505] Psych::TestParser#test_external_encoding = 0.00 s 6764s [2068/8505] Psych::TestParser#test_syntax_error = 0.00 s 6764s [2069/8505] Psych::TestParser#test_bogus_io = 0.00 s 6764s [2070/8505] Psych::TestParser#test_start_stream = 0.00 s 6764s [2071/8505] Psych::TestParser#test_sequence_start_block = 0.00 s 6764s [2072/8505] Psych::TestParser#test_multiparse = 0.00 s 6764s [2073/8505] Psych::TestParser#test_syntax_error_has_path_for_string = 0.00 s 6764s [2074/8505] Psych::TestParser#test_mapping_anchor = 0.01 s 6764s [2075/8505] Psych::TestParser#test_filename = 0.00 s 6764s [2076/8505] Psych::TestParser#test_mapping_start = 0.00 s 6764s [2077/8505] Psych::TestParser#test_sequence_start_anchor = 0.00 s 6764s [2078/8505] Psych::TestParser#test_literal_scalar = 0.00 s 6764s [2079/8505] Psych::TestParser#test_scalar = 0.00 s 6764s [2080/8505] Psych::TestParser#test_mapping_tag = 0.00 s 6764s [2081/8505] Psych::TestParser#test_parse_io = 0.00 s 6764s [2082/8505] Psych::TestParser#test_exception_memory_leak = 0.05 s 6764s [2083/8505] Psych::TestParser#test_mapping_block = 0.00 s 6764s [2084/8505] Psych::TestParser#test_end_document_implicit = 0.00 s 6764s [2085/8505] Psych::TestParser#test_end_document_explicit = 0.00 s 6767s [2086/8505] TC_SortedSet#test_ok_with_gem = 3.08 s 6770s [2087/8505] TC_SortedSet#test_ok_require = 3.07 s 6770s [2088/8505] TestResolvDNS#test_query_ipv4_address = 0.04 s 6770s [2089/8505] TestResolvDNS#test_ipv6_to_s = 0.01 s 6770s [2090/8505] TestResolvDNS#test_resolv_conf_by_command = 0.00 s 6770s [2091/8505] TestResolvDNS#test_ipv6_name = 0.00 s 6770s [2092/8505] TestResolvDNS#test_case_insensitive_name = 0.00 s 6770s [2093/8505] TestResolvDNS#test_no_fd_leak_connected = 0.03 s 6771s [2094/8505] TestResolvDNS#test_too_big_label_address = 0.30 s 6771s [2095/8505] TestResolvDNS#test_each_name = 0.02 s 6771s [2096/8505] TestResolvDNS#test_ipv6_create = 0.00 s 6771s [2097/8505] TestResolvDNS#test_dots_diffences = 0.00 s 6771s [2098/8505] TestResolvDNS#test_no_server = 0.04 s 6771s [2099/8505] TestResolvDNS#test_ipv6_should_be_16 = 0.01 s 6771s [2100/8505] TestResolvDNS#test_invalid_byte_comment = 0.01 s 6771s [2101/8505] TestResolvDNS#test_no_fd_leak_unconnected = 0.01 s 6771s [2102/8505] TestResolvDNS#test_resolve_with_2_ndots = 0.00 s 6771s [2103/8505] TestResolvDNS#test_query_ipv4_address_timeout = 0.42 s 6771s [2104/8505] TestRDocMarkupHeading#test_plain_html = 0.01 s 6771s [2105/8505] TestRDocMarkupHeading#test_aref = 0.01 s 6771s [2106/8505] TestRDocMarkupHeading#test_label = 0.01 s 6771s [2107/8505] OpenSSL::TestConfig#test_get_value_ENV = 0.02 s 6771s [2108/8505] OpenSSL::TestConfig#test_inspect = 0.02 s 6771s [2109/8505] OpenSSL::TestConfig#test_dup = 0.00 s 6771s [2110/8505] OpenSSL::TestConfig#test_initialize_with_empty_file = 0.00 s 6771s [2111/8505] OpenSSL::TestConfig#test_s_load = 0.01 s 6771s [2112/8505] OpenSSL::TestConfig#test_sections = 0.00 s 6771s [2113/8505] OpenSSL::TestConfig#test_s_parse = 0.00 s 6771s [2114/8505] OpenSSL::TestConfig#test_each = 0.01 s 6771s [2115/8505] OpenSSL::TestConfig#test_get_value = 0.01 s 6771s [2116/8505] OpenSSL::TestConfig#test_initialize_with_example_file = 0.00 s 6771s [2117/8505] OpenSSL::TestConfig#test_initialize = 0.00 s 6771s [2118/8505] OpenSSL::TestConfig#test_aref = 0.00 s 6771s [2119/8505] OpenSSL::TestConfig#test_to_s = 0.00 s 6771s [2120/8505] TestForwardable#test_obj_single_delegators = 0.01 s 6771s [2121/8505] TestForwardable#test_def_instance_delegators_using_block_method_as_receiver = 0.01 s 6771s [2122/8505] TestForwardable#test_def_instance_delegator_constant = 0.00 s 6771s [2123/8505] TestForwardable#test_obj_single_delegator = 0.00 s 6771s [2124/8505] TestForwardable#test_non_module = 0.00 s 6771s [2125/8505] TestForwardable#test_def_instance_delegator_using_args_method_as_receiver = 0.00 s 6771s [2126/8505] TestForwardable#test_instance_delegate = 0.01 s 6771s [2127/8505] TestForwardable#test_aset = 0.00 s 6771s [2128/8505] TestForwardable#test_def_instance_delegator = 0.00 s 6771s [2129/8505] TestForwardable#test_obj_single_delegate = 0.02 s 6771s [2130/8505] TestForwardable#test_def_instance_delegator_kw = 0.01 s 6771s [2131/8505] TestForwardable#test_basicobject_subclass = 0.00 s 6771s [2132/8505] TestForwardable#test_on_private_method = 0.00 s 6771s [2133/8505] TestForwardable#test_def_instance_delegator_using_block_method_as_receiver = 0.00 s 6771s [2134/8505] TestForwardable#test_backtrace_adjustment = 0.00 s 6771s [2135/8505] TestForwardable#test_binop = 0.00 s 6771s [2136/8505] TestForwardable#test_uniop = 0.00 s 6771s [2137/8505] TestForwardable#test_def_instance_delegate_using_args_method_as_receiver = 0.01 s 6771s [2138/8505] TestForwardable#test_def_instance_delegate_using_block_method_as_receiver = 0.00 s 6771s [2139/8505] TestForwardable#test_def_instance_delegators = 0.01 s 6771s [2140/8505] TestForwardable#test_aref = 0.00 s 6771s [2141/8505] TestForwardable#test_class_single_delegator = 0.00 s 6771s [2142/8505] TestForwardable#test_class_single_delegate = 0.01 s 6771s [2143/8505] TestForwardable#test_class_single_delegators = 0.00 s 6771s [2144/8505] TestForwardable#test_obj_single_delegators_send_id = 0.00 s 6771s [2145/8505] TestForwardable#test_def_instance_delegators_send_id = 0.00 s 6771s [2146/8505] TestForwardable#test_def_instance_delegators_using_args_method_as_receiver = 0.01 s 6771s [2147/8505] TestRDocMarkupAttributes#test_bitmap_for = 0.00 s 6771s [2148/8505] TestRDocMarkupAttributes#test_as_string = 0.00 s 6771s [2149/8505] TestRDocMarkupAttributes#test_each_name_of = 0.00 s 6771s [2150/8505] TestZlibInflate#test_inflate_partial_input = 0.00 s 6771s [2151/8505] TestZlibInflate#test_inflate_chunked_break = 0.01 s 6771s [2152/8505] TestZlibInflate#test_set_dictionary = 0.00 s 6771s [2153/8505] TestZlibInflate#test_inflate = 0.00 s 6771s [2154/8505] TestZlibInflate#test_inflate_dictionary = 0.00 s 6771s [2155/8505] TestZlibInflate#test_sync = 0.01 s 6771s [2156/8505] TestZlibInflate#test_initialize = 0.00 s 6771s [2157/8505] PrettyPrintTest::NonString#test_7 = 0.00 s 6771s [2158/8505] PrettyPrintTest::NonString#test_6 = 0.01 s 6771s [2159/8505] TestDigest::TestBase#test_base = 0.00 s 6771s [2160/8505] Reline::TestKey#test_match_integer = 0.00 s 6771s [2161/8505] Reline::TestKey#test_match_other = 0.00 s 6771s [2162/8505] Reline::TestKey#test_match_symbol = 0.00 s 6771s [2163/8505] Reline::TestKey#test_match_key = 0.00 s 6771s [2164/8505] Psych::TestHash#test_cycles = 0.01 s 6771s [2165/8505] Psych::TestHash#test_custom_initialize_no_ivar = 0.02 s 6772s [2166/8505] Psych::TestHash#test_self_referential = 0.02 s 6772s [2167/8505] Psych::TestHash#test_recursive_hash = 0.00 s 6772s [2168/8505] Psych::TestHash#test_recursive_hash_uses_alias = 0.01 s 6772s [2169/8505] Psych::TestHash#test_anchor_reuse = 0.00 s 6772s [2170/8505] Psych::TestHash#test_raises_if_anchor_not_defined = 0.00 s 6772s [2171/8505] Psych::TestHash#test_empty_subclass = 0.00 s 6772s [2172/8505] Psych::TestHash#test_hash_subclass_with_ivars = 0.02 s 6772s [2173/8505] Psych::TestHash#test_load_with_class_syck_compatibility = 0.00 s 6772s [2174/8505] Psych::TestHash#test_map = 0.00 s 6772s [2175/8505] Psych::TestHash#test_referenced_hash_with_ivar = 0.01 s 6772s [2176/8505] Psych::TestHash#test_custom_initialized = 0.01 s 6772s [2177/8505] Psych::TestHash#test_ref_append = 0.00 s 6772s [2178/8505] TestSocket#test_timestamp = 0.00 s 6772s [2179/8505] TestSocket#test_bind = 0.00 s 6772s [2180/8505] TestSocket#test_ip_address_list_include_localhost = 0.00 s 6772s [2181/8505] TestSocket#test_ip_address_list = 0.00 s 6772s [2182/8505] TestSocket#test_tcp = 0.00 s 6772s [2183/8505] TestSocket#test_getifaddrs = 0.00 s 6772s [2184/8505] TestSocket#test_tcp_server_sockets = 0.00 s 6772s [2185/8505] TestSocket#test_bintime = 0.00 s 6772s [2186/8505] TestSocket#test_unpack_sockaddr = 0.00 s 6772s [2187/8505] TestSocket#test_connect_timeout = 0.00 s 6772s [2188/8505] TestSocket#test_socket_new = 0.00 s 6772s [2189/8505] TestSocket#test_closed_read = 0.20 s 6772s [2190/8505] TestSocket#test_tcp_server_sockets_in_rescue = 0.01 s 6772s [2191/8505] TestSocket#test_initialize = 0.00 s 6772s [2192/8505] TestSocket#test_timestampns = 0.00 s 6772s [2193/8505] TestSocket#test_tcp_server_sockets_port0 = 0.00 s 6772s [2194/8505] TestRDocMarkupAttributeManager#test_mask_protected_sequence = 0.01 s 6772s [2195/8505] TestRDocMarkupAttributeManager#test_exclude_tag = 0.01 s 6772s [2196/8505] TestRDocMarkupAttributeManager#test_exclude_tag_flow = 0.00 s 6772s [2197/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_mixed_case = 0.00 s 6772s [2198/8505] TestRDocMarkupAttributeManager#test_convert_attrs_does_not_ignore_after_tt = 0.00 s 6772s [2199/8505] TestRDocMarkupAttributeManager#test_tt_html = 0.00 s 6772s [2200/8505] TestRDocMarkupAttributeManager#test_initial_html = 0.00 s 6772s [2201/8505] TestRDocMarkupAttributeManager#test_convert_attrs_ignores_tt = 0.01 s 6772s [2202/8505] TestRDocMarkupAttributeManager#test_add_word_pair_invalid = 0.00 s 6772s [2203/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_1 = 0.01 s 6772s [2204/8505] TestRDocMarkupAttributeManager#test_add_html_tag = 0.00 s 6772s [2205/8505] TestRDocMarkupAttributeManager#test_add_regexp_handling = 0.00 s 6772s [2206/8505] TestRDocMarkupAttributeManager#test_html_like_teletype_em_bold_SGML = 0.00 s 6772s [2207/8505] TestRDocMarkupAttributeManager#test_regexp_handling = 0.01 s 6772s [2208/8505] TestRDocMarkupAttributeManager#test_basic = 0.01 s 6772s [2209/8505] TestRDocMarkupAttributeManager#test_add_word_pair_map = 0.00 s 6772s [2210/8505] TestRDocMarkupAttributeManager#test_convert_attrs = 0.00 s 6772s [2211/8505] TestRDocMarkupAttributeManager#test_convert_attrs_ignores_code = 0.00 s 6772s [2212/8505] TestRDocMarkupAttributeManager#test_bold = 0.00 s 6772s [2213/8505] TestRDocMarkupAttributeManager#test_add_word_pair_matching = 0.00 s 6772s [2214/8505] TestRDocMarkupAttributeManager#test_combined = 0.00 s 6772s [2215/8505] TestRDocMarkupAttributeManager#test_add_word_pair = 0.00 s 6772s [2216/8505] TestRDocMarkupAttributeManager#test_adding = 0.00 s 6772s [2217/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_SGML = 0.00 s 6772s [2218/8505] TestRDocMarkupAttributeManager#test_convert_attrs_preserves_double = 0.00 s 6772s [2219/8505] TestRDocMarkupAttributeManager#test_escapes = 0.01 s 6772s [2220/8505] TestRDocMarkupAttributeManager#test_bold_html_escaped = 0.00 s 6772s [2221/8505] TestRDocMarkupAttributeManager#test_protect = 0.00 s 6772s [2222/8505] TestRDocMarkupAttributeManager#test_initial_word_pairs = 0.00 s 6772s [2223/8505] TestRDocMarkupAttributeManager#test_html_like_teletype = 0.00 s 6772s [2224/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold = 0.00 s 6772s [2225/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_mixed_case = 0.00 s 6772s [2226/8505] TestRDocMarkupAttributeManager#test_add_word_pair_angle = 0.00 s 6772s [2227/8505] TestRDocMarkupAttributeManager#test_lost_tag_for_the_second_time = 0.00 s 6772s [2228/8505] TestRDocMarkupAttributeManager#test_html_like_em_bold_nested_2 = 0.00 s 6772s [2229/8505] TestDigestRactor::TestSHA256Ractor#test_s_hexdigest = 0.00 s 6772s [2230/8505] OpenSSL::TestX509CRL#test_crlnumber = 0.04 s 6772s [2231/8505] OpenSSL::TestX509CRL#test_revoked = 0.30 s 6772s [2232/8505] OpenSSL::TestX509CRL#test_basic = 0.01 s 6772s [2233/8505] OpenSSL::TestX509CRL#test_sign_and_verify = 0.02 s 6772s [2234/8505] TestCSVParseInvalid#test_ignore_invalid_line_cr_lf = 0.01 s 6772s [2235/8505] TestCSVParseInvalid#test_no_column_mixed_new_lines = 0.00 s 6772s [2236/8505] TestCSVParseColumnSeparator::DifferentOFS#test_tab = 0.00 s 6772s [2237/8505] TestCSVParseColumnSeparator::DifferentOFS#test_multiple_characters_include_sub_separator = 0.00 s 6772s [2238/8505] TestCSVParseColumnSeparator::DifferentOFS#test_comma = 0.00 s 6772s [2239/8505] TestCSVParseColumnSeparator::DifferentOFS#test_multiple_characters_leading_empty_fields = 0.00 s 6772s [2240/8505] TestCSVParseColumnSeparator::DifferentOFS#test_space = 0.00 s 6772s [2241/8505] TestCSVParseUnconvertedFields#test_no_fields = 0.00 s 6772s [2242/8505] TestCSVParseUnconvertedFields#test_custom = 0.02 s 6772s [2243/8505] TestCSVParseUnconvertedFields#test_parsed_header = 0.05 s 6772s [2244/8505] TestCSVParseUnconvertedFields#test_return_headers = 0.01 s 6772s [2245/8505] TestCSVParseUnconvertedFields#test_header_converters = 0.00 s 6772s [2246/8505] TestCSVParseUnconvertedFields#test_specified_headers = 0.00 s 6772s [2247/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_block = 0.01 s 6773s [2248/8505] TestCSVInterfaceRead::DifferentOFS#test_parse = 0.02 s 6773s [2249/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_empty_line = 0.00 s 6773s [2250/8505] TestCSVInterfaceRead::DifferentOFS#test_read = 0.04 s 6773s [2251/8505] TestCSVInterfaceRead::DifferentOFS#test_enumerator = 0.02 s 6773s [2252/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_undef_replace_and_replace_string = 0.01 s 6773s [2253/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_empty = 0.00 s 6773s [2254/8505] TestCSVInterfaceRead::DifferentOFS#test_new_nil = 0.01 s 6773s [2255/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach = 0.01 s 6773s [2256/8505] TestCSVInterfaceRead::DifferentOFS#test_open_block_return_value = 0.00 s 6773s [2257/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_headers_only = 0.01 s 6773s [2258/8505] TestCSVInterfaceRead::DifferentOFS#test_table = 0.00 s 6773s [2259/8505] TestCSVInterfaceRead::DifferentOFS#test_open_invalid_byte_sequence_in_utf_8 = 0.00 s 6773s [2260/8505] TestCSVInterfaceRead::DifferentOFS#test_shift_and_each = 0.00 s 6773s [2261/8505] TestCSVInterfaceRead::DifferentOFS#test_each_twice = 0.00 s 6773s [2262/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_replace = 0.00 s 6773s [2263/8505] TestCSVInterfaceRead::DifferentOFS#test_open_readlines = 0.00 s 6773s [2264/8505] TestCSVInterfaceRead::DifferentOFS#test_eof? = 0.01 s 6773s [2265/8505] TestCSVInterfaceRead::DifferentOFS#test_open_read = 0.01 s 6773s [2266/8505] TestCSVInterfaceRead::DifferentOFS#test_readlines = 0.02 s 6773s [2267/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_replace_and_replace_string = 0.01 s 6773s [2268/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_invalid = 0.01 s 6773s [2269/8505] TestCSVInterfaceRead::DifferentOFS#test_open_closed = 0.00 s 6773s [2270/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_nonexistent = 0.01 s 6773s [2271/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach_mode = 0.00 s 6773s [2272/8505] TestCSVInterfaceRead::DifferentOFS#test_shift = 0.01 s 6773s [2273/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line = 0.01 s 6773s [2274/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_line_shortcut = 0.01 s 6773s [2275/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_valid = 0.00 s 6773s [2276/8505] TestCSVInterfaceRead::DifferentOFS#test_open_auto_close = 0.00 s 6773s [2277/8505] TestCSVInterfaceRead::DifferentOFS#test_parse_enumerator = 0.00 s 6773s [2278/8505] TestCSVInterfaceRead::DifferentOFS#test_foreach_enumurator = 0.00 s 6773s [2279/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_undef_replace = 0.00 s 6773s [2280/8505] TestCSVInterfaceRead::DifferentOFS#test_open_with_invalid_nil = 0.00 s 6773s [2281/8505] TestCSVInterfaceRead::DifferentOFS#test_open_encoding_utf_8_with_bom = 0.01 s 6773s [2282/8505] TestCSVInterfaceRead::DifferentOFS#test_closed? = 0.00 s 6773s [2283/8505] TestCSVInterfaceRead::DifferentOFS#test_options_not_modified = 0.02 s 6773s [2284/8505] Psych::TestSafeLoad#test_permitted_symbol = 0.01 s 6773s [2285/8505] Psych::TestSafeLoad#test_safe_load_default_fallback = 0.01 s 6773s [2286/8505] Psych::TestSafeLoad#test_basic_String = 0.01 s 6773s [2287/8505] Psych::TestSafeLoad#test_anon_struct = 0.02 s 6773s [2288/8505] Psych::TestSafeLoad#test_safe_load_raises_on_bad_input = 0.00 s 6773s [2289/8505] Psych::TestSafeLoad#test_raises_when_alias_found_if_alias_parsing_not_enabled = 0.00 s 6773s [2290/8505] Psych::TestSafeLoad#test_symbol = 0.02 s 6773s [2291/8505] Psych::TestSafeLoad#test_foo = 0.01 s 6773s [2292/8505] Psych::TestSafeLoad#test_basic_Integer = 0.00 s 6773s [2293/8505] Psych::TestSafeLoad#test_safe_load = 0.00 s 6773s [2294/8505] Psych::TestSafeLoad#test_basic_Array = 0.00 s 6773s [2295/8505] Psych::TestSafeLoad#test_struct_depends_on_sym = 0.06 s 6773s [2296/8505] Psych::TestSafeLoad#test_basic_Hash = 0.00 s 6773s [2297/8505] Psych::TestSafeLoad#test_aliases_are_parsed_when_alias_parsing_is_enabled = 0.00 s 6773s [2298/8505] Psych::TestSafeLoad#test_basic_Float = 0.01 s 6773s [2299/8505] TC_Set#test_clear = 0.00 s 6773s [2300/8505] TC_Set#test_eq = 0.00 s 6773s [2301/8505] TC_Set#test_inspect = 0.00 s 6773s [2302/8505] TC_Set#test_dup = 0.00 s 6773s [2303/8505] TC_Set#test_merge = 0.00 s 6773s [2304/8505] TC_Set#test_reject! = 0.00 s 6773s [2305/8505] TC_Set#test_and = 0.00 s 6773s [2306/8505] TC_Set#test_reset = 0.00 s 6773s [2307/8505] TC_Set#test_divide = 0.03 s 6773s [2308/8505] TC_Set#test_delete = 0.00 s 6773s [2309/8505] TC_Set#test_plus = 0.00 s 6773s [2310/8505] TC_Set#test_proper_subset? = 0.00 s 6773s [2311/8505] TC_Set#test_flatten = 0.00 s 6773s [2312/8505] TC_Set#test_subset? = 0.01 s 6773s [2313/8505] TC_Set#test_freeze_dup = 0.00 s 6773s [2314/8505] TC_Set#test_proper_superset? = 0.01 s 6773s [2315/8505] TC_Set#test_minus = 0.00 s 6773s [2316/8505] TC_Set#test_spacecraft_operator = 0.00 s 6773s [2317/8505] TC_Set#test_freeze = 0.01 s 6773s [2318/8505] TC_Set#test_xor = 0.00 s 6773s [2319/8505] TC_Set#test_freeze_clone = 0.00 s 6773s [2320/8505] TC_Set#test_delete_if = 0.01 s 6773s [2321/8505] TC_Set#test_select! = 0.00 s 6773s [2322/8505] TC_Set#test_empty? = 0.00 s 6773s [2323/8505] TC_Set#test_freeze_clone_false = 0.00 s 6773s [2324/8505] TC_Set#test_each = 0.00 s 6773s [2325/8505] TC_Set#test_subtract = 0.00 s 6773s [2326/8505] TC_Set#test_classify = 0.00 s 6773s [2327/8505] TC_Set#test_size = 0.00 s 6773s [2328/8505] TC_Set#test_include? = 0.00 s 6773s [2329/8505] TC_Set#test_clone = 0.00 s 6773s [2330/8505] TC_Set#test_join = 0.00 s 6773s [2331/8505] TC_Set#test_add = 0.00 s 6773s [2332/8505] TC_Set#test_to_a = 0.00 s 6773s [2333/8505] TC_Set#test_filter! = 0.00 s 6773s [2334/8505] TC_Set#test_compare_by_identity = 0.00 s 6773s [2335/8505] TC_Set#test_aref = 0.00 s 6773s [2336/8505] TC_Set#test_superset? = 0.01 s 6773s [2337/8505] TC_Set#test_eqq = 0.00 s 6773s [2338/8505] TC_Set#test_to_s = 0.00 s 6773s [2339/8505] TC_Set#test_collect! = 0.00 s 6773s [2340/8505] TC_Set#test_replace = 0.00 s 6773s [2341/8505] TC_Set#test_keep_if = 0.00 s 6773s [2342/8505] TC_Set#test_s_new = 0.00 s 6773s [2343/8505] TestRipper::Ripper::TestInput#test_parse = 0.00 s 6773s [2344/8505] TestRipper::Ripper::TestInput#test_yydebug_equals = 0.00 s 6773s [2345/8505] TestRipper::Ripper::TestInput#test_end_seen_eh = 0.00 s 6773s [2346/8505] TestRipper::Ripper::TestInput#test_encoding = 0.00 s 6773s [2347/8505] TestRipper::Ripper::TestInput#test_column = 0.00 s 6773s [2348/8505] TestRipper::Ripper::TestInput#test_invalid_gets = 0.00 s 6773s [2349/8505] TestRipper::Ripper::TestInput#test_yydebug = 0.00 s 6773s [2350/8505] TestRipper::Ripper::TestInput#test_state = 0.00 s 6773s [2351/8505] TestRipper::Ripper::TestInput#test_regexp_with_option = 0.01 s 6773s [2352/8505] TestRipper::Ripper::TestInput#test_dedent_string = 0.01 s 6773s [2353/8505] TestRipper::Ripper::TestInput#test_filename = 0.00 s 6777s [2354/8505] TestRipper::Ripper::TestInput#test_regexp_enc_error = 3.65 s 6777s [2355/8505] TestRipper::Ripper::TestInput#test_lineno = 0.00 s 6777s [2356/8505] URI::TestCommon#test_kernel_uri = 0.00 s 6777s [2357/8505] URI::TestCommon#test_encode_www_form = 0.01 s 6777s [2358/8505] URI::TestCommon#test_encode_www_form_component = 0.00 s 6777s [2359/8505] URI::TestCommon#test_regexp = 0.00 s 6777s [2360/8505] URI::TestCommon#test_decode_www_form_component = 0.01 s 6777s [2361/8505] URI::TestCommon#test_register_scheme_lowercase = 0.00 s 6777s [2362/8505] URI::TestCommon#test_encode_uri_component = 0.00 s 6777s [2363/8505] URI::TestCommon#test_ractor = 0.00 s 6777s [2364/8505] URI::TestCommon#test_register_scheme_with_symbols = 0.00 s 6777s [2365/8505] URI::TestCommon#test_register_scheme = 0.00 s 6777s [2366/8505] URI::TestCommon#test_decode_www_form = 0.01 s 6777s [2367/8505] URI::TestCommon#test_extract = 0.01 s 6777s [2368/8505] URI::TestCommon#test_decode_uri_component = 0.00 s 6777s [2369/8505] TestFiberTimeout#test_timeout_on_main_fiber = 0.00 s 6777s [2370/8505] TestRDocMarkupParagraph#test_text = 0.00 s 6777s [2371/8505] TestRDocMarkupParagraph#test_accept = 0.00 s 6777s [2372/8505] TestRDocMarkupParagraph#test_text_break = 0.00 s 6777s [2373/8505] TestCSVWriteForceQuotesGenerate#test_field_unknown = 0.00 s 6777s [2374/8505] TestCSVWriteForceQuotesGenerate#test_field_name = 0.00 s 6777s [2375/8505] TestCSVWriteForceQuotesGenerate#test_field_name_without_headers = 0.00 s 6777s [2376/8505] TestCSVWriteForceQuotesGenerate#test_true = 0.00 s 6777s [2377/8505] TestCSVWriteForceQuotesGenerate#test_false = 0.00 s 6777s [2378/8505] TestCSVWriteForceQuotesGenerate#test_field_index = 0.00 s 6777s [2379/8505] TestCSVWriteForceQuotesGenerate#test_default = 0.00 s 6777s [2380/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_mbchar_one = 0.02 s 6777s [2381/8505] Reline::KeyActor::Emacs::Test#test_em_lower_case = 0.05 s 6777s [2382/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_with_one_word = 0.02 s 6777s [2383/8505] Reline::KeyActor::Emacs::Test#test_em_exchange_mark_without_mark = 0.01 s 6777s [2384/8505] Reline::KeyActor::Emacs::Test#test_completion = 0.04 s 6777s [2385/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_front = 0.02 s 6777s [2386/8505] Reline::KeyActor::Emacs::Test#test_search_history_twice = 0.02 s 6777s [2387/8505] Reline::KeyActor::Emacs::Test#test_modify_lines_with_wrong_rs = 0.01 s 6777s [2388/8505] Reline::KeyActor::Emacs::Test#test_ed_kill_line = 0.01 s 6777s [2389/8505] Reline::KeyActor::Emacs::Test#test_search_history_by_last_determined = 0.01 s 6777s [2390/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_back_in_the_middle_of_histories = 0.01 s 6777s [2391/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_beg_with_blank = 0.00 s 6777s [2392/8505] Reline::KeyActor::Emacs::Test#test_em_delete = 0.00 s 6777s [2393/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word_for_mbchar = 0.01 s 6777s [2394/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_end = 0.01 s 6777s [2395/8505] Reline::KeyActor::Emacs::Test#test_move_to_beg_end = 0.01 s 6777s [2396/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region_with_kill_ring = 0.01 s 6777s [2397/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char = 0.00 s 6777s [2398/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word_for_mbchar = 0.01 s 6777s [2399/8505] Reline::KeyActor::Emacs::Test#test_em_next_word_for_mbchar_by_plural_code_points = 0.01 s 6777s [2400/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word_for_mbchar = 0.01 s 6777s [2401/8505] Reline::KeyActor::Emacs::Test#test_em_upper_case = 0.02 s 6777s [2402/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_two = 0.00 s 6777s [2403/8505] Reline::KeyActor::Emacs::Test#test_ed_newline_with_cr = 0.01 s 6777s [2404/8505] Reline::KeyActor::Emacs::Test#test_em_next_word_for_mbchar = 0.02 s 6777s [2405/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_plural_mbchar_by_plural_code_points = 0.00 s 6777s [2406/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char_for_mbchar = 0.01 s 6777s [2407/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word_for_mbchar_by_plural_code_points = 0.02 s 6777s [2408/8505] Reline::KeyActor::Emacs::Test#test_halfwidth_kana_width_dakuten = 0.02 s 6777s [2409/8505] Reline::KeyActor::Emacs::Test#test_em_upper_case_with_complex_example = 0.02 s 6777s [2410/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char_for_mbchar_by_plural_code_points = 0.02 s 6777s [2411/8505] Reline::KeyActor::Emacs::Test#test_em_set_mark_and_em_exchange_mark = 0.01 s 6777s [2412/8505] Reline::KeyActor::Emacs::Test#test_em_capitol_case_with_complex_example = 0.01 s 6777s [2413/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_include_zwj_emoji = 0.01 s 6777s [2414/8505] Reline::KeyActor::Emacs::Test#test_em_delete_prev_char_for_mbchar_by_plural_code_points = 0.00 s 6777s [2415/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region_mbchar = 0.01 s 6778s [2416/8505] Reline::KeyActor::Emacs::Test#test_completion_with_perfect_match = 0.01 s 6778s [2417/8505] Reline::KeyActor::Emacs::Test#test_ed_digit = 0.00 s 6778s [2418/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words = 0.01 s 6778s [2419/8505] Reline::KeyActor::Emacs::Test#test_em_delete_or_list = 0.01 s 6778s [2420/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars = 0.01 s 6778s [2421/8505] Reline::KeyActor::Emacs::Test#test_ed_clear_screen_with_inputed = 0.00 s 6778s [2422/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_include_valiation_selector = 0.00 s 6778s [2423/8505] Reline::KeyActor::Emacs::Test#test_em_lower_case_with_complex_example = 0.01 s 6778s [2424/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history = 0.01 s 6778s [2425/8505] Reline::KeyActor::Emacs::Test#test_completion_in_middle_of_line = 0.03 s 6778s [2426/8505] Reline::KeyActor::Emacs::Test#test_em_delete_for_mbchar_by_plural_code_points = 0.01 s 6778s [2427/8505] Reline::KeyActor::Emacs::Test#test_completion_with_completion_ignore_case = 0.01 s 6778s [2428/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word = 0.00 s 6778s [2429/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_one = 0.00 s 6778s [2430/8505] Reline::KeyActor::Emacs::Test#test_ed_newline_with_lf = 0.00 s 6778s [2431/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word_for_mbchar_by_plural_code_points = 0.01 s 6778s [2432/8505] Reline::KeyActor::Emacs::Test#test_em_kill_region = 0.01 s 6778s [2433/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev = 0.00 s 6778s [2434/8505] Reline::KeyActor::Emacs::Test#test_em_prev_word = 0.01 s 6778s [2435/8505] Reline::KeyActor::Emacs::Test#test_ed_argument_digit_by_meta_num = 0.01 s 6778s [2436/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_prev_word = 0.01 s 6778s [2437/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev_for_mbchar_by_plural_code_points = 0.01 s 6778s [2438/8505] Reline::KeyActor::Emacs::Test#test_search_history_back_and_front = 0.02 s 6778s [2439/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history_with_empty = 0.00 s 6778s [2440/8505] Reline::KeyActor::Emacs::Test#test_search_history_front_and_back = 0.01 s 6778s [2441/8505] Reline::KeyActor::Emacs::Test#test_search_history_to_back = 0.01 s 6778s [2442/8505] Reline::KeyActor::Emacs::Test#test_em_capitol_case = 0.01 s 6778s [2443/8505] Reline::KeyActor::Emacs::Test#test_em_yank_pop = 0.01 s 6778s [2444/8505] Reline::KeyActor::Emacs::Test#test_ed_move_to_beg = 0.01 s 6778s [2445/8505] Reline::KeyActor::Emacs::Test#test_ed_search_next_history_with_empty = 0.01 s 6778s [2446/8505] Reline::KeyActor::Emacs::Test#test_ed_quoted_insert = 0.01 s 6778s [2447/8505] Reline::KeyActor::Emacs::Test#test_ed_clear_screen = 0.00 s 6778s [2448/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_next_history_in_multibyte = 0.01 s 6778s [2449/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char_for_mbchar = 0.00 s 6778s [2450/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars_for_mbchar_by_plural_code_points = 0.01 s 6778s [2451/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_mbchar_two = 0.00 s 6778s [2452/8505] Reline::KeyActor::Emacs::Test#test_completion_with_nil_value = 0.01 s 6778s [2453/8505] Reline::KeyActor::Emacs::Test#test_ed_delete_next_char = 0.00 s 6778s [2454/8505] Reline::KeyActor::Emacs::Test#test_em_next_word = 0.00 s 6778s [2455/8505] Reline::KeyActor::Emacs::Test#test_completion_with_indent_and_completer_quote_characters = 0.01 s 6778s [2456/8505] Reline::KeyActor::Emacs::Test#test_em_delete_next_word_for_mbchar_by_plural_code_points = 0.01 s 6778s [2457/8505] Reline::KeyActor::Emacs::Test#test_ed_search_next_history = 0.00 s 6778s [2458/8505] Reline::KeyActor::Emacs::Test#test_completion_with_indent = 0.01 s 6778s [2459/8505] Reline::KeyActor::Emacs::Test#test_ed_insert_for_mbchar_by_plural_code_points = 0.00 s 6778s [2460/8505] Reline::KeyActor::Emacs::Test#test_move_next_and_prev_for_mbchar = 0.00 s 6778s [2461/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_chars_for_mbchar = 0.01 s 6778s [2462/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_for_mbchar = 0.02 s 6778s [2463/8505] Reline::KeyActor::Emacs::Test#test_search_history_with_isearch_terminator = 0.06 s 6778s [2464/8505] Reline::KeyActor::Emacs::Test#test_em_delete_for_mbchar = 0.01 s 6778s [2465/8505] Reline::KeyActor::Emacs::Test#test_ed_transpose_words_with_one_word_for_mbchar = 0.01 s 6778s [2466/8505] Reline::KeyActor::Emacs::Test#test_larger_histories_than_history_size = 0.01 s 6778s [2467/8505] Reline::KeyActor::Emacs::Test#test_em_kill_line = 0.00 s 6778s [2468/8505] Reline::KeyActor::Emacs::Test#test_ignore_NUL_by_ed_quoted_insert = 0.00 s 6778s [2469/8505] Reline::KeyActor::Emacs::Test#test_input_unknown_char = 0.00 s 6778s [2470/8505] Reline::KeyActor::Emacs::Test#test_ed_next_and_prev_char = 0.00 s 6778s [2471/8505] Reline::KeyActor::Emacs::Test#test_vi_search_prev = 0.01 s 6778s [2472/8505] Reline::KeyActor::Emacs::Test#test_ed_search_prev_history_without_match = 0.00 s 6778s [2473/8505] Reline::KeyActor::Emacs::Test#test_completion_duplicated_list = 0.01 s 6778s [2474/8505] PPTestModule::PPDelegateTest#test_delegate = 0.00 s 6778s [2475/8505] PPTestModule::PPDelegateTest#test_delegate_cycle = 0.02 s 6778s [2476/8505] TestDateCompat#test_compat = 0.00 s 6778s [2477/8505] TestRDocParser#test_check_modeline_coding = 0.00 s 6778s [2478/8505] TestRDocParser#test_check_modeline_with_other = 0.01 s 6778s [2479/8505] TestRDocParser#test_class_binary_japanese_rdoc = 0.00 s 6778s [2480/8505] TestRDocParser#test_check_modeline_no_modeline = 0.00 s 6778s [2481/8505] TestRDocParser#test_class_binary_japanese_text = 0.00 s 6778s [2482/8505] TestRDocParser#test_class_for_forbidden = 0.00 s 6778s [2483/8505] TestRDocParser#test_class_can_parse = 0.00 s 6778s [2484/8505] TestRDocParser#test_class_use_markup_unknown = 0.00 s 6778s [2485/8505] TestRDocParser#test_class_use_markup = 0.00 s 6778s [2486/8505] TestRDocParser#test_class_for_modeline = 0.00 s 6778s [2487/8505] TestRDocParser#test_class_can_parse_zip = 0.00 s 6778s [2488/8505] TestRDocParser#test_class_use_markup_tomdoc = 0.00 s 6778s [2489/8505] TestRDocParser#test_class_use_markup_shebang = 0.00 s 6778s [2490/8505] TestRDocParser#test_check_modeline = 0.00 s 6778s [2491/8505] TestRDocParser#test_class_use_markup_none = 0.00 s 6778s [2492/8505] TestRDocParser#test_class_for_executable = 0.00 s 6778s [2493/8505] TestRDocParser#test_class_binary_eh_ISO_2022_JP = 0.00 s 6778s [2494/8505] TestRDocParser#test_class_binary_large_japanese_rdoc = 0.00 s 6778s [2495/8505] TestRDocParser#test_class_binary_eh_marshal = 0.00 s 6778s [2496/8505] TestRDocParser#test_class_for_binary = 0.00 s 6778s [2497/8505] TestRDocParser#test_class_use_markup_markdown = 0.00 s 6778s [2498/8505] TestRDocParser#test_initialize = 0.00 s 6778s [2499/8505] TestRDocParser#test_class_use_markup_modeline = 0.00 s 6778s [2500/8505] TestRDocParser#test_class_for_markup = 0.00 s 6778s [2501/8505] TestRDocParser#test_can_parse_modeline = 0.00 s 6778s [2502/8505] TestRDocParser#test_class_use_markup_modeline_shebang = 0.00 s 6778s [2503/8505] JSONExtParserTest#test_allocate = 0.00 s 6778s [2504/8505] TestRDocParserChangeLog#test_parse_entries_git = 0.01 s 6778s [2505/8505] TestRDocParserChangeLog#test_scan = 0.02 s 6778s [2506/8505] TestRDocParserChangeLog#test_scan_git = 0.13 s 6778s [2507/8505] TestRDocParserChangeLog#test_continue_entry_body = 0.00 s 6778s [2508/8505] TestRDocParserChangeLog#test_class_can_parse = 0.00 s 6778s [2509/8505] TestRDocParserChangeLog#test_parse_entries = 0.00 s 6778s [2510/8505] TestRDocParserChangeLog#test_parse_entries_bad_time = 0.00 s 6778s [2511/8505] TestRDocParserChangeLog#test_create_entries_colons = 0.00 s 6778s [2512/8505] TestRDocParserChangeLog#test_create_entries = 0.00 s 6778s [2513/8505] TestRDocParserChangeLog#test_group_entries = 0.00 s 6778s [2514/8505] TestRDocParserChangeLog#test_create_document = 0.00 s 6778s [2515/8505] TestRDocParserChangeLog#test_scan_git_commit_date = 0.02 s 6778s [2516/8505] TestRDocParserChangeLog#test_create_items = 0.00 s 6778s [2517/8505] TestRDocParserChangeLog#test_parse_entries_gnu = 0.00 s 6778s [2518/8505] TestRDocParserChangeLog#test_continue_entry_body_function = 0.00 s 6778s [2519/8505] TestRDocParserChangeLog#test_continue_entry_body_empty = 0.00 s 6779s [2520/8505] Psych::TestObjectReferences#test_datetime_has_references = 0.15 s 6779s [2521/8505] Psych::TestObjectReferences#test_binary_references = 0.00 s 6779s [2522/8505] Psych::TestObjectReferences#test_regexp_references = 0.00 s 6779s [2523/8505] Psych::TestObjectReferences#test_class_has_references = 0.01 s 6779s [2524/8505] Psych::TestObjectReferences#test_complex_has_references = 0.01 s 6779s [2525/8505] Psych::TestObjectReferences#test_module_has_references = 0.01 s 6779s [2526/8505] Psych::TestObjectReferences#test_range_has_references = 0.01 s 6779s [2527/8505] Psych::TestObjectReferences#test_float_references = 0.00 s 6779s [2528/8505] Psych::TestObjectReferences#test_struct_has_references = 0.00 s 6779s [2529/8505] Psych::TestObjectReferences#test_rational_has_references = 0.01 s 6779s [2530/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_1 = 0.53 s 6779s [2531/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_3 = 0.07 s 6779s [2532/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_0_rw = 0.01 s 6779s [2533/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_2 = 0.07 s 6780s [2534/8505] OpenSSL::TestEOF1LowlevelSocket#test_eof_0 = 0.25 s 6780s [2535/8505] TestCSVInterfaceReadWrite#test_filter_headers_true_write_headers = 0.01 s 6780s [2536/8505] TestCSVInterfaceReadWrite#test_instance_append = 0.00 s 6780s [2537/8505] TestCSVInterfaceReadWrite#test_instance_shortcut_with_io = 0.00 s 6780s [2538/8505] TestCSVInterfaceReadWrite#test_filter_headers_array_write_headers = 0.00 s 6780s [2539/8505] TestCSVInterfaceReadWrite#test_filter_headers_true = 0.01 s 6780s [2540/8505] TestCSVInterfaceReadWrite#test_filter = 0.01 s 6780s [2541/8505] TestCSVInterfaceReadWrite#test_instance_shortcut = 0.00 s 6780s [2542/8505] TestCSVInterfaceReadWrite#test_instance_same = 0.00 s 6780s [2543/8505] TestOptionParser::OptArg#test_into = 0.01 s 6780s [2544/8505] TestOptionParser::OptArg#test_nonopt_pattern = 0.01 s 6780s [2545/8505] TestOptionParser::OptArg#test_order = 0.00 s 6780s [2546/8505] TestOptionParser::OptArg#test_abbrev = 0.01 s 6780s [2547/8505] TestOptionParser::OptArg#test_regexp = 0.00 s 6780s [2548/8505] TestOptionParser::OptArg#test_hyphenize = 0.00 s 6780s [2549/8505] TestOptionParser::OptArg#test_short = 0.00 s 6780s [2550/8505] TestOptionParser::OptArg#test_long = 0.00 s 6780s [2551/8505] TestOptionParser::OptArg#test_permute = 0.00 s 6780s [2552/8505] TestOptionParser::OptArg#test_require_exact = 0.01 s 6780s [2553/8505] Reline::KillRing::Test#test_append_chain_two = 0.00 s 6780s [2554/8505] Reline::KillRing::Test#test_append_two = 0.00 s 6780s [2555/8505] Reline::KillRing::Test#test_append_complex_chain = 0.00 s 6780s [2556/8505] Reline::KillRing::Test#test_append_three_with_max_two = 0.00 s 6780s [2557/8505] Reline::KillRing::Test#test_append_three = 0.00 s 6780s [2558/8505] Reline::KillRing::Test#test_append_after = 0.00 s 6780s [2559/8505] Reline::KillRing::Test#test_append_one = 0.00 s 6780s [2560/8505] Reline::KillRing::Test#test_append_four_with_max_two = 0.00 s 6780s [2561/8505] Reline::KillRing::Test#test_append_before = 0.00 s 6780s [2562/8505] Reline::KillRing::Test#test_enumerable = 0.01 s 6780s [2563/8505] TestSyslog#test_inspect = 0.00 s 6780s [2564/8505] TestSyslog#test_opened? = 0.00 s 6780s [2565/8505] TestSyslog#test_instance = 0.00 s 6780s [2566/8505] TestSyslog#test_new = 0.00 s 6780s [2567/8505] TestSyslog#test_open = 0.00 s 6780s [2568/8505] TestSyslog#test_close = 0.00 s 6780s [2569/8505] TestRDocMarkupFormatter#test_add_regexp_handling_TIDYLINK = 0.01 s 6780s [2570/8505] TestRDocMarkupFormatter#test_convert_tt_regexp_handling = 0.01 s 6780s [2571/8505] TestRDocMarkupFormatter#test_parse_url_link_id = 0.00 s 6780s [2572/8505] TestRDocMarkupFormatter#test_parse_url = 0.01 s 6780s [2573/8505] TestRDocMarkupFormatter#test_parse_url_anchor = 0.00 s 6780s [2574/8505] TestRDocMarkupFormatter#test_parse_url_scheme = 0.00 s 6780s [2575/8505] TestRDocMarkupFormatter#test_parse_url_link = 0.01 s 6780s [2576/8505] TestRDocMarkupFormatter#test_parse_url_rdoc_label = 0.00 s 6780s [2577/8505] TestRDocMarkupFormatter#test_add_regexp_handling_RDOCLINK = 0.00 s 6780s [2578/8505] TestRDocMarkupFormatter#test_class_gen_relative_url = 0.00 s 6780s [2579/8505] Psych::TestStream#test_load_partial = 0.00 s 6780s [2580/8505] Psych::TestStream#test_load_stream_yields_documents = 0.00 s 6780s [2581/8505] Psych::TestStream#test_explicit_documents = 0.00 s 6780s [2582/8505] Psych::TestStream#test_start_takes_block = 0.00 s 6780s [2583/8505] Psych::TestStream#test_parse_stream_break = 0.00 s 6780s [2584/8505] Psych::TestStream#test_predicate_document? = 0.01 s 6780s [2585/8505] Psych::TestStream#test_parse_partial = 0.00 s 6780s [2586/8505] Psych::TestStream#test_predicate_mapping? = 0.00 s 6780s [2587/8505] Psych::TestStream#test_predicate_alias? = 0.00 s 6780s [2588/8505] Psych::TestStream#test_predicate_scalar? = 0.00 s 6780s [2589/8505] Psych::TestStream#test_parse_stream_yields_documents = 0.00 s 6780s [2590/8505] Psych::TestStream#test_predicate_stream? = 0.00 s 6780s [2591/8505] Psych::TestStream#test_no_backreferences = 0.00 s 6780s [2592/8505] Psych::TestStream#test_predicate_sequence? = 0.00 s 6780s [2593/8505] Psych::TestStream#test_load_stream_break = 0.00 s 6780s [2594/8505] TestCSVWriteForceQuotesGenerateLine#test_field_unknown = 0.00 s 6780s [2595/8505] TestCSVWriteForceQuotesGenerateLine#test_field_name = 0.00 s 6780s [2596/8505] TestCSVWriteForceQuotesGenerateLine#test_field_name_without_headers = 0.00 s 6780s [2597/8505] TestCSVWriteForceQuotesGenerateLine#test_true = 0.00 s 6780s [2598/8505] TestCSVWriteForceQuotesGenerateLine#test_false = 0.00 s 6780s [2599/8505] TestCSVWriteForceQuotesGenerateLine#test_field_index = 0.00 s 6780s [2600/8505] TestCSVWriteForceQuotesGenerateLine#test_default = 0.00 s 6780s [2601/8505] TestRDocGeneratorRI#test_generate_dry_run = 0.01 s 6780s [2602/8505] TestRDocGeneratorRI#test_generate = 0.01 s 6780s [2603/8505] TestRDocMarkupToMarkdown#test_accept_list_end_number = 0.01 s 6780s [2604/8505] TestRDocMarkupToMarkdown#test_accept_verbatim_big_indent = 0.01 s 6780s [2605/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_number = 0.01 s 6780s [2606/8505] TestRDocMarkupToMarkdown#test_accept_document = 0.00 s 6780s [2607/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_number = 0.01 s 6780s [2608/8505] TestRDocMarkupToMarkdown#test_accept_heading_b = 0.00 s 6780s [2609/8505] TestRDocMarkupToMarkdown#test_accept_verbatim_indent = 0.00 s 6780s [2610/8505] TestRDocMarkupToMarkdown#test_list_nested = 0.01 s 6780s [2611/8505] TestRDocMarkupToMarkdown#test_accept_heading_indent = 0.00 s 6780s [2612/8505] TestRDocMarkupToMarkdown#test_list_verbatim = 0.00 s 6780s [2613/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_ref = 0.00 s 6780s [2614/8505] TestRDocMarkupToMarkdown#test_accept_verbatim = 0.00 s 6780s [2615/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_i = 0.00 s 6780s [2616/8505] TestRDocMarkupToMarkdown#test_accept_block_quote = 0.00 s 6780s [2617/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_break = 0.00 s 6780s [2618/8505] TestRDocMarkupToMarkdown#test_accept_list_start_ualpha = 0.00 s 6780s [2619/8505] TestRDocMarkupToMarkdown#test_accept_heading_suppressed_crossref = 0.01 s 6780s [2620/8505] TestRDocMarkupToMarkdown#test_accept_heading_3 = 0.00 s 6780s [2621/8505] TestRDocMarkupToMarkdown#test_accept_heading_1 = 0.00 s 6780s [2622/8505] TestRDocMarkupToMarkdown#test_accept_list_start_lalpha = 0.00 s 6780s [2623/8505] TestRDocMarkupToMarkdown#test_accept_heading = 0.00 s 6780s [2624/8505] TestRDocMarkupToMarkdown#test_accept_list_end_label = 0.00 s 6780s [2625/8505] TestRDocMarkupToMarkdown#test_convert_RDOCLINK_image = 0.01 s 6780s [2626/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_bullet = 0.00 s 6780s [2627/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_underscore = 0.01 s 6780s [2628/8505] TestRDocMarkupToMarkdown#test_convert_TIDYLINK = 0.00 s 6780s [2629/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_bullet = 0.00 s 6780s [2630/8505] TestRDocMarkupToMarkdown#test_accept_rule = 0.00 s 6780s [2631/8505] TestRDocMarkupToMarkdown#test_attributes = 0.00 s 6780s [2632/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_foottext = 0.00 s 6780s [2633/8505] TestRDocMarkupToMarkdown#test_accept_list_end_bullet = 0.00 s 6780s [2634/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_label = 0.00 s 6780s [2635/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_footmark = 0.00 s 6780s [2636/8505] TestRDocMarkupToMarkdown#test_accept_list_end_note = 0.00 s 6780s [2637/8505] TestRDocMarkupToMarkdown#test_accept_list_start_number = 0.00 s 6780s [2638/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_multi_description = 0.00 s 6780s [2639/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_multi_label = 0.00 s 6780s [2640/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_wrap = 0.00 s 6780s [2641/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_note = 0.00 s 6780s [2642/8505] TestRDocMarkupToMarkdown#test_start_accepting = 0.00 s 6780s [2643/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note_2 = 0.00 s 6780s [2644/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_br = 0.00 s 6780s [2645/8505] TestRDocMarkupToMarkdown#test_convert_RDOCLINK = 0.01 s 6780s [2646/8505] TestRDocMarkupToMarkdown#test_accept_paragraph = 0.00 s 6780s [2647/8505] TestRDocMarkupToMarkdown#test_accept_blank_line = 0.00 s 6780s [2648/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_star = 0.00 s 6780s [2649/8505] TestRDocMarkupToMarkdown#test_accept_heading_2 = 0.00 s 6780s [2650/8505] TestRDocMarkupToMarkdown#test_accept_list_start_label = 0.00 s 6780s [2651/8505] TestRDocMarkupToMarkdown#test_accept_heading_4 = 0.00 s 6780s [2652/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_b = 0.00 s 6780s [2653/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_ualpha = 0.00 s 6780s [2654/8505] TestRDocMarkupToMarkdown#test_accept_rule_indent = 0.00 s 6780s [2655/8505] TestRDocMarkupToMarkdown#test_handle_rdoc_link_label_label = 0.00 s 6780s [2656/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_ualpha = 0.00 s 6780s [2657/8505] TestRDocMarkupToMarkdown#test_accept_list_end_ualpha = 0.00 s 6780s [2658/8505] TestRDocMarkupToMarkdown#test_end_accepting = 0.00 s 6780s [2659/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_lalpha = 0.00 s 6780s [2660/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_lalpha = 0.00 s 6780s [2661/8505] TestRDocMarkupToMarkdown#test_accept_list_item_start_note = 0.00 s 6780s [2662/8505] TestRDocMarkupToMarkdown#test_accept_raw = 0.00 s 6780s [2663/8505] TestRDocMarkupToMarkdown#test_accept_list_end_lalpha = 0.00 s 6780s [2664/8505] TestRDocMarkupToMarkdown#test_accept_list_start_note = 0.00 s 6780s [2665/8505] TestRDocMarkupToMarkdown#test_accept_list_start_bullet = 0.00 s 6780s [2666/8505] TestRDocMarkupToMarkdown#test_accept_list_item_end_label = 0.01 s 6780s [2667/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_plus = 0.00 s 6780s [2668/8505] TestRDocMarkupToMarkdown#test_accept_paragraph_indent = 0.01 s 6780s [2669/8505] CGIMultipartTest#test_cgi_multipart_tempfile = 0.04 s 6783s [2670/8505] CGIMultipartTest#test_cgi_multipart_without_tempfile = 2.49 s 6783s [2671/8505] CGIMultipartTest#test_cgi_multipart_badbody = 0.02 s 6783s [2672/8505] CGIMultipartTest#test_cgi_multipart_stringio = 0.01 s 6783s [2673/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartlength = 0.01 s 6783s [2674/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartcount = 0.11 s 6783s [2675/8505] CGIMultipartTest#test_cgi_multipart_quoteboundary = 0.00 s 6783s [2676/8505] CGIMultipartTest#test_cgi_multipart_boundary_10240 = 0.00 s 6783s [2677/8505] CGIMultipartTest#test_cgi_multipart_maxmultipartlength_lambda = 0.00 s 6783s [2678/8505] Reline::LineEditor::StringProcessingTest#test_calculate_width_with_escape_sequence = 0.00 s 6783s [2679/8505] Reline::LineEditor::StringProcessingTest#test_calculate_width = 0.00 s 6783s [2680/8505] Reline::LineEditor::StringProcessingTest#test_completion_proc_with_preposing_and_postposing = 0.00 s 6783s [2681/8505] TestRDocMarkup#test_convert_custom_markup = 0.00 s 6783s [2682/8505] TestRDocMarkup#test_convert = 0.01 s 6783s [2683/8505] TestRDocMarkup#test_convert_document = 0.02 s 6783s [2684/8505] TestRDocMarkup#test_class_parse = 0.00 s 6783s [2685/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_4 = 0.00 s 6783s [2686/8505] OpenSSL::TestKDF#test_pkcs5_pbkdf2_hmac_compatibility = 0.01 s 6783s [2687/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_25 = 0.27 s 6783s [2688/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_16 = 0.13 s 6785s [2689/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha256_c_20000_len_32 = 1.58 s 6785s [2690/8505] OpenSSL::TestKDF#test_scrypt_rfc7914_second = 0.00 s 6785s [2691/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_2_len_20 = 0.00 s 6785s [2692/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_1_len_20 = 0.00 s 6785s [2693/8505] OpenSSL::TestKDF#test_pbkdf2_hmac_sha1_rfc6070_c_4096_len_20 = 0.07 s 6785s [2694/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_3 = 0.01 s 6785s [2695/8505] OpenSSL::TestKDF#test_scrypt_rfc7914_first = 0.00 s 6785s [2696/8505] OpenSSL::TestKDF#test_hkdf_rfc5869_test_case_1 = 0.01 s 6785s [2697/8505] TestOpenURI#test_progress_chunked = 0.08 s 6785s [2698/8505] TestOpenURI#test_404 = 0.07 s 6785s [2699/8505] TestOpenURI#test_header = 0.03 s 6785s [2700/8505] TestOpenURI#test_multi_proxy_opt = 0.00 s 6785s [2701/8505] TestOpenURI#test_encoding = 0.08 s 6785s [2702/8505] TestOpenURI#test_proxy_http_basic_authentication_success = 0.05 s 6785s [2703/8505] TestOpenURI#test_redirect_auth_failure_r2 = 0.02 s 6785s [2704/8505] TestOpenURI#test_non_http_proxy = 0.00 s 6785s [2705/8505] TestOpenURI#test_redirect = 0.05 s 6785s [2706/8505] TestOpenURI#test_open_uri = 0.07 s 6785s [2707/8505] TestOpenURI#test_read_timeout = 0.23 s 6786s [2708/8505] TestOpenURI#test_close_in_block_big = 0.04 s 6786s [2709/8505] TestOpenURI#test_multiple_cookies = 0.04 s 6786s [2710/8505] TestOpenURI#test_content_encoding = 0.08 s 6786s [2711/8505] TestOpenURI#test_proxy_http_basic_authentication_failure = 0.12 s 6786s [2712/8505] TestOpenURI#test_redirect_relative = 0.04 s 6786s [2713/8505] TestOpenURI#test_last_modified = 0.03 s 6786s [2714/8505] TestOpenURI#test_open_too_many_arg = 0.00 s 6786s [2715/8505] TestOpenURI#test_redirect_invalid = 0.02 s 6786s [2716/8505] TestOpenURI#test_ftp_over_http_proxy = 0.03 s 6786s [2717/8505] TestOpenURI#test_authenticated_proxy_http_basic_authentication_success = 0.08 s 6786s [2718/8505] TestOpenURI#test_open_timeout = 0.02 s 6786s [2719/8505] TestOpenURI#test_200_uri_open = 0.02 s 6786s [2720/8505] TestOpenURI#test_proxy = 0.09 s 6786s [2721/8505] TestOpenURI#test_close_in_block_small = 0.02 s 6786s [2722/8505] TestOpenURI#test_200big = 0.02 s 6786s [2723/8505] TestOpenURI#test_invalid_option = 0.00 s 6786s [2724/8505] TestOpenURI#test_progress = 0.02 s 6786s [2725/8505] TestOpenURI#test_userinfo = 0.00 s 6786s [2726/8505] TestOpenURI#test_ftp_over_http_proxy_auth = 0.01 s 6786s [2727/8505] TestOpenURI#test_redirect_auth_failure_r1 = 0.04 s 6786s [2728/8505] TestOpenURI#test_redirect_auth_success = 0.01 s 6786s [2729/8505] TestOpenURI#test_uri_read = 0.02 s 6786s [2730/8505] TestOpenURI#test_redirect_loop = 0.05 s 6786s [2731/8505] TestOpenURI#test_without_block = 0.02 s 6786s [2732/8505] TestOpenURI#test_quoted_attvalue = 0.01 s 6786s [2733/8505] TestOpenURI#test_mode = 0.06 s 6786s [2734/8505] TestOpenURI#test_200 = 0.02 s 6787s [2735/8505] TestNetHTTPContinue#test_expect_continue = 0.23 s 6787s [2736/8505] TestNetHTTPContinue#test_expect_continue_timeout = 0.24 s 6787s [2737/8505] TestNetHTTPContinue#test_expect_continue_error = 0.01 s 6787s [2738/8505] TestNetHTTPContinue#test_expect_continue_error_while_waiting = 0.61 s 6788s [2739/8505] TestNetHTTPContinue#test_expect_continue_error_before_body = 0.02 s 6788s [2740/8505] JSONAdditionTest#test_raw_strings = 0.01 s 6788s [2741/8505] JSONAdditionTest#test_core = 0.02 s 6788s [2742/8505] JSONAdditionTest#test_extended_json_default = 0.00 s 6788s [2743/8505] JSONAdditionTest#test_extended_json_fail2 = 0.07 s 6788s [2744/8505] JSONAdditionTest#test_extended_json_disabled = 0.00 s 6788s [2745/8505] JSONAdditionTest#test_extended_json_fail1 = 0.00 s 6788s [2746/8505] JSONAdditionTest#test_rational_complex = 0.00 s 6788s [2747/8505] JSONAdditionTest#test_extended_json = 0.00 s 6788s [2748/8505] JSONAdditionTest#test_set = 0.00 s 6788s [2749/8505] JSONAdditionTest#test_ostruct = 0.00 s 6788s [2750/8505] JSONAdditionTest#test_bigdecimal = 0.00 s 6788s [2751/8505] PrettyPrintTest::TailGroup#test_1 = 0.00 s 6788s [2752/8505] TestNetHTTPForceEncoding#test_response_body_encoding_encoding_without_content_type = 0.02 s 6788s [2753/8505] TestNetHTTPForceEncoding#test_response_body_encoding_true_with_content_type = 0.02 s 6788s [2754/8505] TestNetHTTPForceEncoding#test_response_body_encoding_true_without_content_type = 0.01 s 6788s [2755/8505] TestNetHTTPForceEncoding#test_response_body_encoding_false = 0.01 s 6788s [2756/8505] TestNetHTTPForceEncoding#test_response_body_encoding_string_without_content_type = 0.01 s 6788s [2757/8505] JSONEncodingTest#test_parse = 0.00 s 6788s [2758/8505] JSONEncodingTest#test_chars = 0.01 s 6788s [2759/8505] JSONEncodingTest#test_generate = 0.00 s 6788s [2760/8505] JSONEncodingTest#test_unicode = 0.00 s 6788s [2761/8505] TestResolvAddr#test_valid_socket_ip_address_list = 0.01 s 6788s [2762/8505] TestResolvAddr#test_valid_ipv6_link_local_address = 0.00 s 6788s [2763/8505] TestResolvAddr#test_invalid_ipv4_address = 0.06 s 6788s [2764/8505] TestResolvAddr#test_invalid_byte_comment = 0.00 s 6788s [2765/8505] TestResolvAddr#test_hosts_by_command = 0.01 s 6788s [2766/8505] TestRDocRdInlineParser#test_parse_ref_substitute_url = 0.07 s 6788s [2767/8505] TestRDocRdInlineParser#test_parse = 0.01 s 6788s [2768/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename_quote = 0.00 s 6788s [2769/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content = 0.00 s 6788s [2770/8505] TestRDocRdInlineParser#test_parse_verb_multiple = 0.00 s 6788s [2771/8505] TestRDocRdInlineParser#test_parse_ref_quote_content_multi = 0.00 s 6788s [2772/8505] TestRDocRdInlineParser#test_parse_verb = 0.00 s 6788s [2773/8505] TestRDocRdInlineParser#test_parse_footnote = 0.00 s 6788s [2774/8505] TestRDocRdInlineParser#test_parse_var = 0.00 s 6788s [2775/8505] TestRDocRdInlineParser#test_parse_ref_substitute_quote = 0.00 s 6788s [2776/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content3 = 0.00 s 6788s [2777/8505] TestRDocRdInlineParser#test_parse_ref_quote_content = 0.00 s 6788s [2778/8505] TestRDocRdInlineParser#test_parse_verb_emphasis = 0.00 s 6788s [2779/8505] TestRDocRdInlineParser#test_parse_verb_backslash_backslash = 0.00 s 6788s [2780/8505] TestRDocRdInlineParser#test_parse_index = 0.00 s 6788s [2781/8505] TestRDocRdInlineParser#test_parse_kbd = 0.00 s 6788s [2782/8505] TestRDocRdInlineParser#test_parse_verb_backslash = 0.00 s 6788s [2783/8505] TestRDocRdInlineParser#test_parse_ref_substitute_element_quote = 0.00 s 6788s [2784/8505] TestRDocRdInlineParser#test_parse_ref_url = 0.00 s 6788s [2785/8505] TestRDocRdInlineParser#test_parse_ref_filename = 0.00 s 6788s [2786/8505] TestRDocRdInlineParser#test_parse_ref_em = 0.00 s 6788s [2787/8505] TestRDocRdInlineParser#test_parse_code = 0.00 s 6788s [2788/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename_label = 0.00 s 6788s [2789/8505] TestRDocRdInlineParser#test_parse_ref_substitute = 0.00 s 6788s [2790/8505] TestRDocRdInlineParser#test_parse_ref_substitute_multi_content2 = 0.00 s 6788s [2791/8505] TestRDocRdInlineParser#test_parse_quote = 0.00 s 6788s [2792/8505] TestRDocRdInlineParser#test_parse_ref_quote = 0.00 s 6788s [2793/8505] TestRDocRdInlineParser#test_parse_ref_substitute_filename = 0.00 s 6788s [2794/8505] TestRDocRdInlineParser#test_parse_ref = 0.00 s 6788s [2795/8505] TestRDocRdInlineParser#test_parse_newline = 0.00 s 6788s [2796/8505] TestRDocRdInlineParser#test_parse_ref_filename_quote = 0.00 s 6788s [2797/8505] TestRDocRdInlineParser#test_parse_verb_backslash_quote = 0.00 s 6788s [2798/8505] TestRDocRdInlineParser#test_parse_ref_substitute_quote_content = 0.00 s 6788s [2799/8505] TestRDocRdInlineParser#test_parse_em = 0.00 s 6788s [2800/8505] TestRDocRdInlineParser#test_parse_multiple = 0.00 s 6788s [2801/8505] TestRDocContext#test_remove_invisible_in_public = 0.06 s 6788s [2802/8505] TestRDocContext#test_find_symbol_module = 0.07 s 6788s [2803/8505] TestRDocContext#test_add_extend = 0.04 s 6788s [2804/8505] TestRDocContext#test_find_method = 0.06 s 6788s [2805/8505] TestRDocContext#test_find_enclosing_module_named = 0.05 s 6788s [2806/8505] TestRDocContext#test_remove_invisible_private = 0.05 s 6788s [2807/8505] TestRDocContext#test_add_class_object = 0.06 s 6788s [2808/8505] TestRDocContext#test_current_section = 0.03 s 6788s [2809/8505] TestRDocContext#test_section_contents_no_default = 0.04 s 6788s [2810/8505] TestRDocContext#test_methods_by_type_section = 0.03 s 6788s [2811/8505] TestRDocContext#test_add_module_alias = 0.04 s 6789s [2812/8505] TestRDocContext#test_remove_invisible_in_protected = 0.03 s 6789s [2813/8505] TestRDocContext#test_add_to_no_document_self = 0.03 s 6789s [2814/8505] TestRDocContext#test_add_alias_method_singleton = 0.04 s 6789s [2815/8505] TestRDocContext#test_find_symbol = 0.03 s 6789s [2816/8505] TestRDocContext#test_find_constant_named = 0.04 s 6789s [2817/8505] TestRDocContext#test_add_alias = 0.03 s 6789s [2818/8505] TestRDocContext#test_add_require = 0.04 s 6789s [2819/8505] TestRDocContext#test_add_module_class = 0.03 s 6789s [2820/8505] TestRDocContext#test_find_attribute_named = 0.03 s 6789s [2821/8505] TestRDocContext#test_add_to = 0.03 s 6789s [2822/8505] TestRDocContext#test_each_section_enumerator = 0.03 s 6789s [2823/8505] TestRDocContext#test_add_class = 0.03 s 6789s [2824/8505] TestRDocContext#test_add_method = 0.03 s 6789s [2825/8505] TestRDocContext#test_add_section = 0.03 s 6789s [2826/8505] TestRDocContext#test_add_method_alias = 0.04 s 6789s [2827/8505] TestRDocContext#test_methods_by_type = 0.03 s 6789s [2828/8505] TestRDocContext#test_child_name = 0.03 s 6789s [2829/8505] TestRDocContext#test_find_class_method_named = 0.03 s 6789s [2830/8505] TestRDocContext#test_each_method_enumerator = 0.03 s 6789s [2831/8505] TestRDocContext#test_add_to_done_documenting = 0.03 s 6789s [2832/8505] TestRDocContext#test_methods_matching = 0.03 s 6789s [2833/8505] TestRDocContext#test_sort_sections = 0.03 s 6789s [2834/8505] TestRDocContext#test_remove_invisible_public_force = 0.03 s 6789s [2835/8505] TestRDocContext#test_section_contents_unused = 0.03 s 6789s [2836/8505] TestRDocContext#test_remove_invisible_protected = 0.03 s 6789s [2837/8505] TestRDocContext#test_add_to_temporary_section = 0.03 s 6789s [2838/8505] TestRDocContext#test_visibility_def = 0.03 s 6789s [2839/8505] TestRDocContext#test_section_contents_only_default = 0.03 s 6789s [2840/8505] TestRDocContext#test_add_alias_method_attr = 0.04 s 6790s [2841/8505] TestRDocContext#test_add_class_basic_object = 0.03 s 6790s [2842/8505] TestRDocContext#test_find_symbol_method = 0.03 s 6790s [2843/8505] TestRDocContext#test_add_constant = 0.04 s 6790s [2844/8505] TestRDocContext#test_methods_matching_singleton = 0.06 s 6790s [2845/8505] TestRDocContext#test_equals2 = 0.03 s 6790s [2846/8505] TestRDocContext#test_add_method_duplicate_loading = 0.03 s 6790s [2847/8505] TestRDocContext#test_remove_invisible_in_public_force = 0.03 s 6790s [2848/8505] TestRDocContext#test_classes = 0.03 s 6790s [2849/8505] TestRDocContext#test_remove_invisible_public = 0.03 s 6790s [2850/8505] TestRDocContext#test_methods_matching_inherit = 0.03 s 6790s [2851/8505] TestRDocContext#test_defined_in_eh = 0.03 s 6790s [2852/8505] TestRDocContext#test_remove_invisible_nodoc = 0.03 s 6790s [2853/8505] TestRDocContext#test_remove_invisible_in_protected_force = 0.03 s 6790s [2854/8505] TestRDocContext#test_add_include = 0.03 s 6790s [2855/8505] TestRDocContext#test_find_method_named = 0.03 s 6790s [2856/8505] TestRDocContext#test_section_contents = 0.03 s 6790s [2857/8505] TestRDocContext#test_set_current_section = 0.03 s 6790s [2858/8505] TestRDocContext#test_add_module = 0.03 s 6790s [2859/8505] TestRDocContext#test_add = 0.03 s 6790s [2860/8505] TestRDocContext#test_each_section_only_display = 0.03 s 6790s [2861/8505] TestRDocContext#test_each_section = 0.03 s 6790s [2862/8505] TestRDocContext#test_add_class_upgrade = 0.06 s 6790s [2863/8505] TestRDocContext#test_spaceship = 0.03 s 6790s [2864/8505] TestRDocContext#test_initialize = 0.03 s 6790s [2865/8505] TestRDocContext#test_find_module_named = 0.03 s 6790s [2866/8505] TestRDocContext#test_fully_documented_eh = 0.03 s 6790s [2867/8505] TestRDocContext#test_sort_sections_tomdoc = 0.03 s 6790s [2868/8505] TestRDocContext#test_add_method_duplicate = 0.03 s 6790s [2869/8505] TestRDocContext#test_sort_sections_tomdoc_missing = 0.03 s 6790s [2870/8505] TestRDocContext#test_add_module_alias_top_level = 0.03 s 6791s [2871/8505] TestRDocContext#test_add_alias_method = 0.03 s 6791s [2872/8505] TestRDocContext#test_add_class_singleton = 0.03 s 6791s [2873/8505] TestRDocContext#test_add_section_no_comment = 0.05 s 6791s [2874/8505] TestRDocContext#test_find_file_named = 0.04 s 6791s [2875/8505] TestRDocContext#test_find_instance_method_named = 0.03 s 6791s [2876/8505] TestRDocContext#test_find_local_symbol = 0.04 s 6791s [2877/8505] TestRDocContext#test_add_class_superclass = 0.03 s 6791s [2878/8505] TestFiberEnumerator#test_read_characters = 0.03 s 6791s [2879/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_number = 0.00 s 6791s [2880/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_number = 0.00 s 6791s [2881/8505] TestRDocMarkupToTableOfContents#test_accept_document = 0.00 s 6791s [2882/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_number = 0.00 s 6791s [2883/8505] TestRDocMarkupToTableOfContents#test_accept_heading_b = 0.00 s 6791s [2884/8505] TestRDocMarkupToTableOfContents#test_list_nested = 0.00 s 6791s [2885/8505] TestRDocMarkupToTableOfContents#test_list_verbatim = 0.00 s 6791s [2886/8505] TestRDocMarkupToTableOfContents#test_accept_verbatim = 0.00 s 6791s [2887/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_i = 0.00 s 6791s [2888/8505] TestRDocMarkupToTableOfContents#test_accept_block_quote = 0.00 s 6791s [2889/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_break = 0.00 s 6791s [2890/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_ualpha = 0.00 s 6791s [2891/8505] TestRDocMarkupToTableOfContents#test_accept_heading_suppressed_crossref = 0.01 s 6791s [2892/8505] TestRDocMarkupToTableOfContents#test_accept_heading_3 = 0.00 s 6791s [2893/8505] TestRDocMarkupToTableOfContents#test_accept_heading_1 = 0.00 s 6791s [2894/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_lalpha = 0.00 s 6791s [2895/8505] TestRDocMarkupToTableOfContents#test_accept_heading = 0.00 s 6791s [2896/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_label = 0.00 s 6791s [2897/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_bullet = 0.00 s 6791s [2898/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_underscore = 0.00 s 6791s [2899/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_bullet = 0.00 s 6791s [2900/8505] TestRDocMarkupToTableOfContents#test_accept_rule = 0.01 s 6791s [2901/8505] TestRDocMarkupToTableOfContents#test_suppressed_eh = 0.00 s 6791s [2902/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_bullet = 0.00 s 6791s [2903/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_label = 0.00 s 6791s [2904/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_note = 0.00 s 6791s [2905/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_number = 0.00 s 6791s [2906/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_multi_description = 0.00 s 6791s [2907/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_multi_label = 0.00 s 6791s [2908/8505] TestRDocMarkupToTableOfContents#test_accept_heading_suppressed = 0.00 s 6791s [2909/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_note = 0.00 s 6791s [2910/8505] TestRDocMarkupToTableOfContents#test_start_accepting = 0.00 s 6791s [2911/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note_2 = 0.00 s 6791s [2912/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_br = 0.00 s 6791s [2913/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph = 0.00 s 6791s [2914/8505] TestRDocMarkupToTableOfContents#test_accept_blank_line = 0.00 s 6791s [2915/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_star = 0.00 s 6791s [2916/8505] TestRDocMarkupToTableOfContents#test_accept_heading_2 = 0.00 s 6791s [2917/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_label = 0.00 s 6791s [2918/8505] TestRDocMarkupToTableOfContents#test_accept_heading_4 = 0.00 s 6791s [2919/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_b = 0.00 s 6791s [2920/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_ualpha = 0.00 s 6791s [2921/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_ualpha = 0.00 s 6791s [2922/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_ualpha = 0.00 s 6791s [2923/8505] TestRDocMarkupToTableOfContents#test_end_accepting = 0.00 s 6791s [2924/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_lalpha = 0.00 s 6791s [2925/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_lalpha = 0.00 s 6791s [2926/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_start_note = 0.00 s 6791s [2927/8505] TestRDocMarkupToTableOfContents#test_accept_raw = 0.00 s 6791s [2928/8505] TestRDocMarkupToTableOfContents#test_accept_list_end_lalpha = 0.00 s 6791s [2929/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_note = 0.00 s 6791s [2930/8505] TestRDocMarkupToTableOfContents#test_accept_document_omit_headings_below = 0.00 s 6791s [2931/8505] TestRDocMarkupToTableOfContents#test_accept_list_start_bullet = 0.00 s 6791s [2932/8505] TestRDocMarkupToTableOfContents#test_accept_list_item_end_label = 0.00 s 6791s [2933/8505] TestRDocMarkupToTableOfContents#test_accept_paragraph_plus = 0.00 s 6791s [2934/8505] TestSocket_UNIXSocket#test_fd_passing_n2 = 0.00 s 6791s [2935/8505] TestSocket_UNIXSocket#test_noname_unpack_sockaddr_un = 0.01 s 6791s [2936/8505] TestSocket_UNIXSocket#test_open_nul_byte = 0.00 s 6791s [2937/8505] TestSocket_UNIXSocket#test_sendmsg = 0.00 s 6791s [2938/8505] TestSocket_UNIXSocket#test_noname_recvfrom = 0.00 s 6791s [2939/8505] TestSocket_UNIXSocket#test_abstract_unix_server_socket = 0.00 s 6791s [2940/8505] TestSocket_UNIXSocket#test_sendmsg_ancillarydata_int = 0.00 s 6791s [2941/8505] TestSocket_UNIXSocket#test_sendcred_ucred = 0.00 s 6791s [2942/8505] TestSocket_UNIXSocket#test_abstract_unix_socket_econnrefused = 0.00 s 6791s [2943/8505] TestSocket_UNIXSocket#test_abstract_namespace = 0.00 s 6791s [2944/8505] TestSocket_UNIXSocket#test_sendmsg_ancillarydata_unix_rights = 0.00 s 6791s [2945/8505] TestSocket_UNIXSocket#test_getcred_xucred = 0.00 s 6791s [2946/8505] TestSocket_UNIXSocket#test_getcred_ucred = 0.00 s 6791s [2947/8505] TestSocket_UNIXSocket#test_sendcred_cmsgcred = 0.00 s 6791s [2948/8505] TestSocket_UNIXSocket#test_autobind = 0.00 s 6791s [2949/8505] TestSocket_UNIXSocket#test_epipe = 0.00 s 6791s [2950/8505] TestSocket_UNIXSocket#test_sendcred_sockcred = 0.00 s 6791s [2951/8505] TestSocket_UNIXSocket#test_noname_addr = 0.00 s 6791s [2952/8505] TestSocket_UNIXSocket#test_noname_peeraddr = 0.00 s 6791s [2953/8505] TestSocket_UNIXSocket#test_noname_recv_nonblock = 0.00 s 6791s [2954/8505] TestSocket_UNIXSocket#test_fd_passing_class_mode = 0.00 s 6791s [2955/8505] TestSocket_UNIXSocket#test_abstract_unix_server = 0.00 s 6791s [2956/8505] TestSocket_UNIXSocket#test_initialize = 0.00 s 6791s [2957/8505] TestSocket_UNIXSocket#test_too_long_path = 0.00 s 6791s [2958/8505] TestSocket_UNIXSocket#test_recvmsg = 0.00 s 6791s [2959/8505] TestSocket_UNIXSocket#test_fd_passing_n = 0.00 s 6791s [2960/8505] TestSocket_UNIXSocket#test_noname_path = 0.00 s 6791s [2961/8505] TestSocket_UNIXSocket#test_unix_socket_pair_close_on_exec = 0.00 s 6791s [2962/8505] OpenSSL::TestPKCS12#test_new_with_no_certs = 0.17 s 6791s [2963/8505] TestBigMath#test_const = 0.01 s 6794s [2964/8505] TestBigMath#test_log = 3.27 s 6795s [2965/8505] TestBigMath#test_atan = 0.18 s 6795s [2966/8505] TestBigMath#test_cos = 0.04 s 6795s [2967/8505] TestBigMath#test_sqrt = 0.00 s 6795s [2968/8505] TestBigMath#test_sin = 0.05 s 6795s [2969/8505] TestNetHTTPSwitchingProtocols#test_info = 0.24 s 6795s [2970/8505] TestFiberThread#test_thread_join_hang = 0.03 s 6795s [2971/8505] TestFiberThread#test_thread_join = 0.01 s 6795s [2972/8505] TestFiberThread#test_thread_join_blocking = 0.01 s 6795s [2973/8505] TestFiberThread#test_thread_join_implicit = 0.11 s 6795s [2974/8505] TestLogDevice#test_reopen_file_by_file = 0.02 s 6795s [2975/8505] TestLogDevice#test_write = 0.03 s 6798s [2976/8505] TestLogDevice#test_shifting_midnight = 2.56 s 6798s [2977/8505] TestLogDevice#test_shifting_size = 0.03 s 6803s [2978/8505] TestLogDevice#test_shifting_age_in_multiprocess = 5.27 s 6803s [2979/8505] TestLogDevice#test_shifting_period_suffix = 0.02 s 6803s [2980/8505] TestLogDevice#test_reopen_file = 0.00 s 6803s [2981/8505] TestLogDevice#test_invalid_shifting_age = 0.00 s 6803s [2982/8505] TestLogDevice#test_reopen_io_by_io = 0.00 s 6806s [2983/8505] TestLogDevice#test_shifting_midnight_exist_file = 2.59 s 6806s [2984/8505] TestLogDevice#test_shifting_age = 0.01 s 6898s [2985/8505] TestLogDevice#test_open_logfile_in_multiprocess = 92.28 s 6898s [2986/8505] TestLogDevice#test_reopen_file_by_io = 0.00 s 6898s [2987/8505] TestLogDevice#test_initialize = 0.00 s 6898s [2988/8505] TestLogDevice#test_reopen_io_by_file = 0.00 s 6898s [2989/8505] TestLogDevice#test_close = 0.00 s 6903s [2990/8505] TestLogDevice#test_shifting_size_in_multiprocess = 4.86 s 6903s [2991/8505] TestLogDevice#test_reopen_io = 0.00 s 6903s [2992/8505] TestLogDevice#test_shifting_age_variants = 0.00 s 6903s [2993/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_section = 0.05 s 6903s [2994/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_percent = 0.07 s 6903s [2995/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label = 0.03 s 6903s [2996/8505] TestRDocMarkupToHtmlCrossref#test_link_for_method_traverse = 0.03 s 6903s [2997/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_TIDYLINK_rdoc = 0.08 s 6903s [2998/8505] TestRDocMarkupToHtmlCrossref#test_link = 0.03 s 6903s [2999/8505] TestRDocMarkupToHtmlCrossref#test_link_class_method_full = 0.03 s 6903s [3000/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_with_arg_looks_like_TIDYLINK = 0.03 s 6903s [3001/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF = 0.03 s 6903s [3002/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_space = 0.03 s 6903s [3003/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref = 0.03 s 6903s [3004/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_constant = 0.02 s 6903s [3005/8505] TestRDocMarkupToHtmlCrossref#test_to_html_CROSSREF_email_hyperlink_all = 0.02 s 6903s [3006/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_show_hash_false = 0.03 s 6903s [3007/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_for_md = 0.03 s 6903s [3008/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_label = 0.03 s 6903s [3009/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_TIDYLINK_label = 0.03 s 6903s [3010/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_HYPERLINK_rdoc = 0.03 s 6903s [3011/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF_label_period = 0.03 s 6903s [3012/8505] TestRDocMarkupToHtmlCrossref#test_handle_regexp_CROSSREF_label = 0.02 s 6903s [3013/8505] TestRDocMarkupToHtmlCrossref#test_convert_CROSSREF = 0.03 s 6904s [3014/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_percent_label = 0.03 s 6904s [3015/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_escape_html = 0.03 s 6904s [3016/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method = 0.03 s 6904s [3017/8505] TestRDocMarkupToHtmlCrossref#test_to_html_CROSSREF_email = 0.03 s 6904s [3018/8505] TestRDocMarkupToHtmlCrossref#test_convert_RDOCLINK_rdoc_ref_method_label = 0.03 s 6904s [3019/8505] TestRDocMarkupToHtmlCrossref#test_gen_url = 0.03 s 6904s [3020/8505] TestRDocParserSimple#test_initialize_metadata = 0.00 s 6904s [3021/8505] TestRDocParserSimple#test_scan = 0.01 s 6904s [3022/8505] TestRDocParserSimple#test_remove_coding_comment = 0.00 s 6904s [3023/8505] TestRDocParserSimple#test_remove_private_comments_rule = 0.00 s 6904s [3024/8505] TestRDocParserSimple#test_remove_private_comments_star = 0.00 s 6904s [3025/8505] TestRDocParserSimple#test_remove_private_comments = 0.00 s 6904s [3026/8505] PrettyPrintTest::StrictPrettyExample#test_00_04 = 0.01 s 6904s [3027/8505] PrettyPrintTest::StrictPrettyExample#test_11_31 = 0.01 s 6904s [3028/8505] PrettyPrintTest::StrictPrettyExample#test_06 = 0.00 s 6904s [3029/8505] PrettyPrintTest::StrictPrettyExample#test_08 = 0.00 s 6904s [3030/8505] PrettyPrintTest::StrictPrettyExample#test_07 = 0.00 s 6904s [3031/8505] PrettyPrintTest::StrictPrettyExample#test_05 = 0.00 s 6904s [3032/8505] PrettyPrintTest::StrictPrettyExample#test_09 = 0.00 s 6904s [3033/8505] PrettyPrintTest::StrictPrettyExample#test_10 = 0.00 s 6904s [3034/8505] PrettyPrintTest::StrictPrettyExample#test_32 = 0.00 s 6904s [3035/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_double_default = 0.00 s 6904s [3036/8505] TestCSVWriteQuoteEmptyGenerate#test_quote_empty_default = 0.00 s 6904s [3037/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_default = 0.00 s 6904s [3038/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_only_false = 0.00 s 6904s [3039/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_double_false = 0.00 s 6904s [3040/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_only_default = 0.00 s 6904s [3041/8505] TestCSVWriteQuoteEmptyGenerate#test_empty_false = 0.00 s 6904s [3042/8505] TestCSVWriteQuoteEmptyGenerate#test_quote_empty_false = 0.00 s 6904s [3043/8505] TestNetHTTPKeepAlive#test_keep_alive_server_close = 0.01 s 6905s [3044/8505] TestNetHTTPKeepAlive#test_keep_alive_get_auto_retry = 1.73 s 6906s [3045/8505] TestNetHTTPKeepAlive#test_http_retry_failed = 0.02 s 6907s [3046/8505] TestNetHTTPKeepAlive#test_keep_alive_reset_on_new_connection = 1.53 s 6909s [3047/8505] TestNetHTTPKeepAlive#test_keep_alive_get_auto_reconnect = 1.72 s 6909s [3048/8505] TestNetHTTPKeepAlive#test_http_retry_success = 0.01 s 6910s [3049/8505] TestNetHTTPKeepAlive#test_server_closed_connection_auto_reconnect = 1.52 s 6910s [3050/8505] TestRDocComment#test_initialize_copy = 0.00 s 6910s [3051/8505] TestRDocComment#test_format = 0.01 s 6910s [3052/8505] TestRDocComment#test_parse = 0.00 s 6910s [3053/8505] TestRDocComment#test_remove_private_star2 = 0.00 s 6910s [3054/8505] TestRDocComment#test_normalize = 0.00 s 6910s [3055/8505] TestRDocComment#test_extract_call_seq_commented = 0.00 s 6910s [3056/8505] TestRDocComment#test_extract_call_seq_undent = 0.00 s 6910s [3057/8505] TestRDocComment#test_format_equals = 0.00 s 6910s [3058/8505] TestRDocComment#test_remove_private_long = 0.00 s 6910s [3059/8505] TestRDocComment#test_remove_private_encoding = 0.00 s 6910s [3060/8505] TestRDocComment#test_extract_call_seq_blank = 0.00 s 6910s [3061/8505] TestRDocComment#test_text = 0.00 s 6910s [3062/8505] TestRDocComment#test_normalize_eh = 0.00 s 6910s [3063/8505] TestRDocComment#test_extract_call_seq = 0.00 s 6910s [3064/8505] TestRDocComment#test_text_equals = 0.00 s 6910s [3065/8505] TestRDocComment#test_extract_call_seq_c = 0.00 s 6910s [3066/8505] TestRDocComment#test_extract_call_seq_c_separator = 0.00 s 6910s [3067/8505] TestRDocComment#test_text_equals_no_text = 0.00 s 6910s [3068/8505] TestRDocComment#test_extract_call_seq_c_no_blank = 0.00 s 6910s [3069/8505] TestRDocComment#test_remove_private_hash_trail = 0.00 s 6910s [3070/8505] TestRDocComment#test_remove_private_hash = 0.00 s 6910s [3071/8505] TestRDocComment#test_remove_private_star = 0.00 s 6910s [3072/8505] TestRDocComment#test_equals2 = 0.00 s 6910s [3073/8505] TestRDocComment#test_remove_private_toggle = 0.00 s 6910s [3074/8505] TestRDocComment#test_parse_rd = 0.02 s 6910s [3075/8505] TestRDocComment#test_force_encoding = 0.00 s 6910s [3076/8505] TestRDocComment#test_normalize_document = 0.00 s 6910s [3077/8505] TestRDocComment#test_normalize_twice = 0.00 s 6910s [3078/8505] TestRDocComment#test_empty_eh = 0.00 s 6910s [3079/8505] TestRDocComment#test_location = 0.00 s 6910s [3080/8505] TestRDocComment#test_text_equals_parsed = 0.00 s 6910s [3081/8505] TestRDocComment#test_extract_call_seq_no_blank = 0.00 s 6910s [3082/8505] TestRDocComment#test_remove_private_rule = 0.00 s 6910s [3083/8505] TestRDocComment#test_remove_private_toggle_encoding_ruby_bug? = 0.00 s 6910s [3084/8505] TestRDocComment#test_tomdoc_eh = 0.00 s 6910s [3085/8505] TestRDocComment#test_remove_private_toggle_encoding = 0.00 s 6910s [3086/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_no_fields = 0.00 s 6910s [3087/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_custom = 0.01 s 6910s [3088/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_parsed_header = 0.00 s 6910s [3089/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_return_headers = 0.00 s 6910s [3090/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_header_converters = 0.00 s 6910s [3091/8505] TestCSVParseUnconvertedFields::DifferentOFS#test_specified_headers = 0.00 s 6910s [3092/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_space_no_ascii = 0.01 s 6910s [3093/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_line = 0.01 s 6910s [3094/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_unquoted_value_multiple_characters_col_sep = 0.00 s 6910s [3095/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_multiple_space = 0.00 s 6910s [3096/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_nil_nil = 0.00 s 6910s [3097/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_comma = 0.00 s 6910s [3098/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_multiple_characters_leading_empty_fields = 0.00 s 6910s [3099/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_csv_header_string = 0.00 s 6910s [3100/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_full = 0.00 s 6910s [3101/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_end_with_nil = 0.00 s 6910s [3102/8505] TestCSVParseQuoteCharNil::DifferentOFS#test_space = 0.00 s 6910s [3103/8505] TestCSVWriteConvertersGenerateLine#test_one = 0.00 s 6910s [3104/8505] TestCSVWriteConvertersGenerateLine#test_empty_value = 0.00 s 6910s [3105/8505] TestCSVWriteConvertersGenerateLine#test_nil_value = 0.00 s 6910s [3106/8505] TestCSVWriteConvertersGenerateLine#test_multiple = 0.00 s 6910s [3107/8505] Psych::TestSerializeSubclasses#test_some_object = 0.00 s 6910s [3108/8505] Psych::TestSerializeSubclasses#test_struct_subclass = 0.00 s 6910s [3109/8505] TestOptionParser::ReqArg::Def2#test_into = 0.01 s 6910s [3110/8505] TestOptionParser::ReqArg::Def2#test_nonopt_pattern = 0.01 s 6910s [3111/8505] TestOptionParser::ReqArg::Def2#test_order = 0.00 s 6910s [3112/8505] TestOptionParser::ReqArg::Def2#test_abbrev = 0.01 s 6910s [3113/8505] TestOptionParser::ReqArg::Def2#test_regexp = 0.00 s 6910s [3114/8505] TestOptionParser::ReqArg::Def2#test_hyphenize = 0.00 s 6910s [3115/8505] TestOptionParser::ReqArg::Def2#test_short = 0.00 s 6910s [3116/8505] TestOptionParser::ReqArg::Def2#test_long = 0.00 s 6910s [3117/8505] TestOptionParser::ReqArg::Def2#test_permute = 0.00 s 6911s [3118/8505] TestOptionParser::ReqArg::Def2#test_require_exact = 0.01 s 6911s [3119/8505] TestCSVRow#test_array_delegation = 0.00 s 6911s [3120/8505] TestCSVRow#test_to_csv = 0.01 s 6911s [3121/8505] TestCSVRow#test_inspect_shows_header_field_pairs = 0.00 s 6911s [3122/8505] TestCSVRow#test_set_field = 0.00 s 6911s [3123/8505] TestCSVRow#test_headers = 0.00 s 6911s [3124/8505] TestCSVRow#test_dup = 0.00 s 6911s [3125/8505] TestCSVRow#test_dig_cell_no_dig = 0.00 s 6911s [3126/8505] TestCSVRow#test_delete = 0.00 s 6911s [3127/8505] TestCSVRow#test_fields = 0.00 s 6911s [3128/8505] TestCSVRow#test_delete_if_without_block = 0.01 s 6911s [3129/8505] TestCSVRow#test_has_key? = 0.00 s 6911s [3130/8505] TestCSVRow#test_dig_by_header = 0.00 s 6911s [3131/8505] TestCSVRow#test_each_pair = 0.00 s 6911s [3132/8505] TestCSVRow#test_delete_if = 0.00 s 6911s [3133/8505] TestCSVRow#test_append = 0.00 s 6911s [3134/8505] TestCSVRow#test_field = 0.00 s 6911s [3135/8505] TestCSVRow#test_index = 0.00 s 6911s [3136/8505] TestCSVRow#test_row_type = 0.00 s 6911s [3137/8505] TestCSVRow#test_each = 0.00 s 6911s [3138/8505] TestCSVRow#test_dig_cell = 0.00 s 6911s [3139/8505] TestCSVRow#test_enumerable = 0.00 s 6911s [3140/8505] TestCSVRow#test_can_be_compared_when_not_a_row = 0.00 s 6911s [3141/8505] TestCSVRow#test_inspect_encoding_is_ascii_compatible = 0.01 s 6911s [3142/8505] TestCSVRow#test_to_a = 0.00 s 6911s [3143/8505] TestCSVRow#test_dig_by_index = 0.00 s 6911s [3144/8505] TestCSVRow#test_initialize = 0.00 s 6911s [3145/8505] TestCSVRow#test_inspect_shows_symbol_headers_as_bare_attributes = 0.00 s 6911s [3146/8505] TestCSVRow#test_to_hash = 0.00 s 6911s [3147/8505] TestCSVRow#test_queries = 0.00 s 6911s [3148/8505] TestCSVRow#test_fetch = 0.00 s 6911s [3149/8505] TestCSVRow#test_can_be_compared_with_other_classes = 0.00 s 6911s [3150/8505] TestStringScanner#test_pos_unicode = 0.00 s 6911s [3151/8505] TestStringScanner#test_string_append = 0.00 s 6911s [3152/8505] TestStringScanner#test_encoding_string = 0.00 s 6911s [3153/8505] TestStringScanner#test_fixed_anchor_true = 0.00 s 6911s [3154/8505] TestStringScanner#test_string = 0.00 s 6911s [3155/8505] TestStringScanner#test_terminate = 0.00 s 6911s [3156/8505] TestStringScanner#test_inspect = 0.00 s 6911s [3157/8505] TestStringScanner#test_values_at = 0.00 s 6911s [3158/8505] TestStringScanner#test_dup = 0.00 s 6911s [3159/8505] TestStringScanner#test_encoding = 0.00 s 6911s [3160/8505] TestStringScanner#test_reset = 0.00 s 6911s [3161/8505] TestStringScanner#test_skip_until = 0.00 s 6911s [3162/8505] TestStringScanner#test_scan = 0.00 s 6911s [3163/8505] TestStringScanner#test_scan_string = 0.00 s 6911s [3164/8505] TestStringScanner#test_peek = 0.00 s 6911s [3165/8505] TestStringScanner#test_skip_with_begenning_of_string_anchor_match = 0.00 s 6911s [3166/8505] TestStringScanner#test_get_byte = 0.00 s 6911s [3167/8505] TestStringScanner#test_string_set_is_equal = 0.00 s 6911s [3168/8505] TestStringScanner#test_check = 0.00 s 6911s [3169/8505] TestStringScanner#test_match_p = 0.00 s 6911s [3170/8505] TestStringScanner#test_set_pos = 0.00 s 6911s [3171/8505] TestStringScanner#test_invalid_encoding_string = 0.00 s 6911s [3172/8505] TestStringScanner#test_s_mustc = 0.00 s 6911s [3173/8505] TestStringScanner#test_exist_p = 0.00 s 6911s [3174/8505] TestStringScanner#test_getch = 0.00 s 6911s [3175/8505] TestStringScanner#test_scan_full = 0.00 s 6911s [3176/8505] TestStringScanner#test_fixed_anchor_false = 0.00 s 6911s [3177/8505] TestStringScanner#test_skip_with_begenning_of_line_anchor_match = 0.00 s 6911s [3178/8505] TestStringScanner#test_captures = 0.00 s 6911s [3179/8505] TestStringScanner#test_rest_size = 0.00 s 6911s [3180/8505] TestStringScanner#test_aref_without_regex = 0.00 s 6911s [3181/8505] TestStringScanner#test_check_until = 0.00 s 6911s [3182/8505] TestStringScanner#test_matched_size = 0.00 s 6911s [3183/8505] TestStringScanner#test_eos? = 0.00 s 6911s [3184/8505] TestStringScanner#test_pre_match = 0.00 s 6911s [3185/8505] TestStringScanner#test_const_Id = 0.00 s 6911s [3186/8505] TestStringScanner#test_charpos_not_use_string_methods = 0.00 s 6911s [3187/8505] TestStringScanner#test_generic_regexp = 0.00 s 6911s [3188/8505] TestStringScanner#test_matched = 0.00 s 6911s [3189/8505] TestStringScanner#test_size = 0.00 s 6911s [3190/8505] TestStringScanner#test_pos = 0.00 s 6911s [3191/8505] TestStringScanner#test_AREF = 0.00 s 6911s [3192/8505] TestStringScanner#test_skip = 0.00 s 6911s [3193/8505] TestStringScanner#test_search_full = 0.00 s 6911s [3194/8505] TestStringScanner#test_unscan = 0.00 s 6911s [3195/8505] TestStringScanner#test_bol? = 0.00 s 6911s [3196/8505] TestStringScanner#test_rest = 0.00 s 6911s [3197/8505] TestStringScanner#test_const_Version = 0.00 s 6911s [3198/8505] TestStringScanner#test_exist_p_string = 0.00 s 6911s [3199/8505] TestStringScanner#test_s_allocate = 0.00 s 6911s [3200/8505] TestStringScanner#test_post_match = 0.00 s 6911s [3201/8505] TestStringScanner#test_inspect2 = 0.00 s 6911s [3202/8505] TestStringScanner#test_concat = 0.00 s 6911s [3203/8505] TestStringScanner#test_s_new = 0.00 s 6911s [3204/8505] TestERB#test_without_filename_with_safe_level = 0.00 s 6911s [3205/8505] TestERB#test_without_filename = 0.00 s 6911s [3206/8505] TestERB#test_with_filename = 0.00 s 6911s [3207/8505] TestERB#test_with_location = 0.00 s 6911s [3208/8505] TestERB#test_with_filename_and_safe_level = 0.00 s 6911s [3209/8505] TestERB#test_with_filename_lineno = 0.00 s 6911s [3210/8505] TestERB#test_html_escape = 0.00 s 6911s [3211/8505] TestDelegateClass#test_instance_method = 0.01 s 6911s [3212/8505] TestDelegateClass#test_extend = 0.00 s 6911s [3213/8505] TestDelegateClass#test_DelegateClass_public_instance_method = 0.01 s 6911s [3214/8505] TestDelegateClass#test_copy_frozen = 0.01 s 6911s [3215/8505] TestDelegateClass#test_dir_in_delegator_class = 0.00 s 6911s [3216/8505] TestDelegateClass#test_DelegateClass_instance_method = 0.00 s 6911s [3217/8505] TestDelegateClass#test_instance_methods = 0.00 s 6911s [3218/8505] TestDelegateClass#test_marshal = 0.00 s 6911s [3219/8505] TestDelegateClass#test_eql? = 0.00 s 6911s [3220/8505] TestDelegateClass#test_unset_simple_delegator = 0.00 s 6911s [3221/8505] TestDelegateClass#test_simpledelegator_clone = 0.00 s 6911s [3222/8505] TestDelegateClass#test_public_instance_methods = 0.00 s 6911s [3223/8505] TestDelegateClass#test_delegate_class_block = 0.00 s 6911s [3224/8505] TestDelegateClass#test_override = 0.00 s 6911s [3225/8505] TestDelegateClass#test_delegateclass_class = 0.00 s 6911s [3226/8505] TestDelegateClass#test_keyword_argument = 0.00 s 6911s [3227/8505] TestDelegateClass#test_keyword_and_hash = 0.00 s 6911s [3228/8505] TestDelegateClass#test_dir_in_simple_delegator = 0.00 s 6911s [3229/8505] TestDelegateClass#test_basicobject_respond_to = 0.00 s 6911s [3230/8505] TestDelegateClass#test_unset_delegate_class = 0.00 s 6911s [3231/8505] TestDelegateClass#test_methods = 0.00 s 6911s [3232/8505] TestDelegateClass#test_method_in_delegator_class = 0.00 s 6911s [3233/8505] TestDelegateClass#test_global_function = 0.00 s 6911s [3234/8505] TestDelegateClass#test_module_methods_vs_kernel_methods = 0.00 s 6911s [3235/8505] TestDelegateClass#test_method_in_simple_delegator = 0.00 s 6911s [3236/8505] TestDelegateClass#test_send_method_in_delegator = 0.00 s 6911s [3237/8505] TestDelegateClass#test_frozen = 0.00 s 6911s [3238/8505] TestDelegateClass#test_private_method = 0.00 s 6911s [3239/8505] TestDelegateClass#test_protected_instance_methods = 0.00 s 6911s [3240/8505] TestDelegateClass#test_simpledelegator_class = 0.00 s 6911s [3241/8505] TestCSVParseGeneral#test_row_sep_auto_cr = 0.00 s 6911s [3242/8505] TestCSVParseGeneral#test_malformed_csv_cr_middle_line = 0.00 s 6911s [3243/8505] TestCSVParseGeneral#test_mastering_regex_example = 0.00 s 6911s [3244/8505] TestCSVParseGeneral#test_aras_edge_cases = 0.01 s 6911s [3245/8505] TestCSVParseGeneral#test_row_sep_auto_cr_lf = 0.00 s 6911s [3246/8505] TestCSVParseGeneral#test_field_size_limit_controls_lookahead = 0.00 s 6911s [3247/8505] TestCSVParseGeneral#test_field_size_limit_in_extended_column_not_exceeding = 0.00 s 6911s [3248/8505] TestCSVParseGeneral#test_malformed_csv_illegal_quote_middle_line = 0.00 s 6911s [3249/8505] TestCSVParseGeneral#test_field_size_limit_in_extended_column_exceeding = 0.00 s 6911s [3250/8505] TestCSVParseGeneral#test_non_regex_edge_cases = 0.00 s 6911s [3251/8505] TestCSVParseGeneral#test_malformed_csv_unclosed_quote = 0.00 s 6911s [3252/8505] TestCSVParseGeneral#test_the_parse_fails_fast_when_it_can_for_unquoted_fields = 0.00 s 6911s [3253/8505] TestCSVParseGeneral#test_rob_edge_cases = 0.01 s 6911s [3254/8505] TestCSVParseGeneral#test_row_sep_auto_lf = 0.00 s 6911s [3255/8505] TestCSVParseGeneral#test_malformed_csv_cr_first_line = 0.00 s 6911s [3256/8505] TestCSVParseGeneral#test_seeked_string_io = 0.00 s 6911s [3257/8505] TestCSVParseGeneral#test_james_edge_cases = 0.00 s 6911s [3258/8505] TestCSVParseGeneral#test_the_parse_fails_fast_when_it_can_for_unescaped_quotes = 0.00 s 6911s [3259/8505] TestCSVParseGeneral#test_std_lib_csv = 0.03 s 6911s [3260/8505] TestSocketOption#test_bool = 0.00 s 6911s [3261/8505] TestSocketOption#test_unpack = 0.00 s 6911s [3262/8505] TestSocketOption#test_new = 0.00 s 6911s [3263/8505] TestProtocol#test_write0_timeout_multi2 = 0.10 s 6911s [3264/8505] TestProtocol#test_write0_success_multi2 = 0.01 s 6911s [3265/8505] TestProtocol#test_write0_success2 = 0.00 s 6911s [3266/8505] TestProtocol#test_each_crlf_line = 0.02 s 6911s [3267/8505] TestProtocol#test_write0_success_multi1 = 0.00 s 6911s [3268/8505] TestProtocol#test_write0_timeout_multi1 = 0.10 s 6911s [3269/8505] TestProtocol#test_write0_multibyte = 0.00 s 6911s [3270/8505] TestProtocol#test_write0_timeout = 0.10 s 6911s [3271/8505] TestProtocol#test_write0_success = 0.00 s 6911s [3272/8505] TestProtocol#test_should_properly_dot_stuff_period_with_no_endline = 0.00 s 6911s [3273/8505] OpenSSL::TestPKeyRSA#test_verify_empty_rsa = 0.00 s 6911s [3274/8505] OpenSSL::TestPKeyRSA#test_sign_verify = 0.00 s 6911s [3275/8505] OpenSSL::TestPKeyRSA#test_dup = 0.00 s 6911s [3276/8505] OpenSSL::TestPKeyRSA#test_sign_verify_raw_legacy = 0.03 s 6911s [3277/8505] OpenSSL::TestPKeyRSA#test_marshal = 0.00 s 6911s [3278/8505] OpenSSL::TestPKeyRSA#test_private = 0.02 s 6911s [3279/8505] OpenSSL::TestPKeyRSA#test_RSAPrivateKey_encrypted = 0.02 s 6911s [3280/8505] OpenSSL::TestPKeyRSA#test_s_generate = 0.05 s 6911s [3281/8505] OpenSSL::TestPKeyRSA#test_new = 0.03 s 6911s [3282/8505] OpenSSL::TestPKeyRSA#test_RSAPrivateKey = 0.01 s 6911s [3283/8505] TestStringScannerFixedAnchor#test_pos_unicode = 0.00 s 6911s [3284/8505] TestStringScannerFixedAnchor#test_string_append = 0.00 s 6911s [3285/8505] TestStringScannerFixedAnchor#test_encoding_string = 0.00 s 6911s [3286/8505] TestStringScannerFixedAnchor#test_fixed_anchor_true = 0.00 s 6911s [3287/8505] TestStringScannerFixedAnchor#test_string = 0.00 s 6911s [3288/8505] TestStringScannerFixedAnchor#test_terminate = 0.00 s 6911s [3289/8505] TestStringScannerFixedAnchor#test_inspect = 0.01 s 6911s [3290/8505] TestStringScannerFixedAnchor#test_dup = 0.00 s 6911s [3291/8505] TestStringScannerFixedAnchor#test_encoding = 0.00 s 6911s [3292/8505] TestStringScannerFixedAnchor#test_reset = 0.00 s 6911s [3293/8505] TestStringScannerFixedAnchor#test_skip_until = 0.01 s 6911s [3294/8505] TestStringScannerFixedAnchor#test_scan = 0.00 s 6911s [3295/8505] TestStringScannerFixedAnchor#test_scan_string = 0.01 s 6911s [3296/8505] TestStringScannerFixedAnchor#test_peek = 0.01 s 6911s [3297/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_string_anchor_match = 0.00 s 6911s [3298/8505] TestStringScannerFixedAnchor#test_string_set_is_equal = 0.00 s 6911s [3299/8505] TestStringScannerFixedAnchor#test_check = 0.00 s 6911s [3300/8505] TestStringScannerFixedAnchor#test_match_p = 0.00 s 6911s [3301/8505] TestStringScannerFixedAnchor#test_set_pos = 0.00 s 6911s [3302/8505] TestStringScannerFixedAnchor#test_invalid_encoding_string = 0.01 s 6911s [3303/8505] TestStringScannerFixedAnchor#test_s_mustc = 0.00 s 6911s [3304/8505] TestStringScannerFixedAnchor#test_exist_p = 0.00 s 6911s [3305/8505] TestStringScannerFixedAnchor#test_scan_full = 0.00 s 6911s [3306/8505] TestStringScannerFixedAnchor#test_fixed_anchor_false = 0.00 s 6911s [3307/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_line_anchor_match = 0.00 s 6911s [3308/8505] TestStringScannerFixedAnchor#test_rest_size = 0.00 s 6911s [3309/8505] TestStringScannerFixedAnchor#test_aref_without_regex = 0.00 s 6911s [3310/8505] TestStringScannerFixedAnchor#test_check_until = 0.00 s 6911s [3311/8505] TestStringScannerFixedAnchor#test_matched_size = 0.00 s 6911s [3312/8505] TestStringScannerFixedAnchor#test_eos? = 0.00 s 6911s [3313/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_string_anchor_not_match = 0.00 s 6911s [3314/8505] TestStringScannerFixedAnchor#test_const_Id = 0.00 s 6911s [3315/8505] TestStringScannerFixedAnchor#test_charpos_not_use_string_methods = 0.00 s 6911s [3316/8505] TestStringScannerFixedAnchor#test_generic_regexp = 0.00 s 6911s [3317/8505] TestStringScannerFixedAnchor#test_size = 0.00 s 6911s [3318/8505] TestStringScannerFixedAnchor#test_pos = 0.00 s 6911s [3319/8505] TestStringScannerFixedAnchor#test_skip = 0.00 s 6911s [3320/8505] TestStringScannerFixedAnchor#test_search_full = 0.00 s 6911s [3321/8505] TestStringScannerFixedAnchor#test_unscan = 0.00 s 6911s [3322/8505] TestStringScannerFixedAnchor#test_skip_with_begenning_of_line_anchor_not_match = 0.00 s 6911s [3323/8505] TestStringScannerFixedAnchor#test_bol? = 0.00 s 6911s [3324/8505] TestStringScannerFixedAnchor#test_rest = 0.00 s 6911s [3325/8505] TestStringScannerFixedAnchor#test_const_Version = 0.00 s 6911s [3326/8505] TestStringScannerFixedAnchor#test_exist_p_string = 0.00 s 6911s [3327/8505] TestStringScannerFixedAnchor#test_s_allocate = 0.00 s 6911s [3328/8505] TestStringScannerFixedAnchor#test_inspect2 = 0.00 s 6911s [3329/8505] TestStringScannerFixedAnchor#test_concat = 0.00 s 6911s [3330/8505] TestStringScannerFixedAnchor#test_s_new = 0.00 s 6911s [3331/8505] HTTPResponsesTest#test_status_code_classes = 0.00 s 6911s [3332/8505] TestRDocMarkupParser#test_tokenize_heading_empty = 0.00 s 6911s [3333/8505] TestRDocMarkupParser#test_parse_bullet = 0.00 s 6911s [3334/8505] TestRDocMarkupParser#test_parse_lalpha_ualpha = 0.00 s 6911s [3335/8505] TestRDocMarkupParser#test_tokenize_label_newline_windows = 0.00 s 6911s [3336/8505] TestRDocMarkupParser#test_parse_label = 0.00 s 6911s [3337/8505] TestRDocMarkupParser#test_tokenize_note_newline_windows = 0.00 s 6911s [3338/8505] TestRDocMarkupParser#test_tokenize_heading = 0.00 s 6911s [3339/8505] TestRDocMarkupParser#test_tokenize_label_note = 0.00 s 6912s [3340/8505] TestRDocMarkupParser#test_parse_block_quote = 0.01 s 6912s [3341/8505] TestRDocMarkupParser#test_parse_heading_empty = 0.00 s 6912s [3342/8505] TestRDocMarkupParser#test_tokenize_label = 0.00 s 6912s [3343/8505] TestRDocMarkupParser#test_parse_note_note = 0.00 s 6912s [3344/8505] TestRDocMarkupParser#test_parse_verbatim_markup_example = 0.00 s 6912s [3345/8505] TestRDocMarkupParser#test_parse_bullet_utf_8 = 0.00 s 6912s [3346/8505] TestRDocMarkupParser#test_tokenize_heading_heading = 0.00 s 6912s [3347/8505] TestRDocMarkupParser#test_parse_verbatim_trim = 0.00 s 6912s [3348/8505] TestRDocMarkupParser#test_tokenize_verbatim_rule_fancy = 0.00 s 6912s [3349/8505] TestRDocMarkupParser#test_parse_verbatim_merge = 0.00 s 6912s [3350/8505] TestRDocMarkupParser#test_parse_verbatim_lalpha = 0.00 s 6912s [3351/8505] TestRDocMarkupParser#test_parse_dash = 0.00 s 6912s [3352/8505] TestRDocMarkupParser#test_parse_note_empty = 0.00 s 6912s [3353/8505] TestRDocMarkupParser#test_tokenize_verbatim_heading = 0.00 s 6912s [3354/8505] TestRDocMarkupParser#test_parse_bullet_heading = 0.00 s 6912s [3355/8505] TestRDocMarkupParser#test_parse_heading_three = 0.00 s 6912s [3356/8505] TestRDocMarkupParser#test_tokenize_ualpha = 0.00 s 6912s [3357/8505] TestRDocMarkupParser#test_parse_note = 0.00 s 6912s [3358/8505] TestRDocMarkupParser#test_parse_heading_note = 0.00 s 6912s [3359/8505] TestRDocMarkupParser#test_parse_verbatim_merge2 = 0.00 s 6912s [3360/8505] TestRDocMarkupParser#test_parse_heading_ualpha = 0.00 s 6912s [3361/8505] TestRDocMarkupParser#test_parse_verbatim_dash = 0.00 s 6912s [3362/8505] TestRDocMarkupParser#test_tokenize_paragraphs = 0.00 s 6912s [3363/8505] TestRDocMarkupParser#test_parse_heading = 0.00 s 6912s [3364/8505] TestRDocMarkupParser#test_parse_verbatim_note = 0.00 s 6912s [3365/8505] TestRDocMarkupParser#test_parse_list_list_1 = 0.00 s 6912s [3366/8505] TestRDocMarkupParser#test_parse_verbatim_rule2 = 0.00 s 6912s [3367/8505] TestRDocMarkupParser#test_tokenize_line_break = 0.01 s 6912s [3368/8505] TestRDocMarkupParser#test_parse_heading_lalpha = 0.00 s 6912s [3369/8505] TestRDocMarkupParser#test_parse_lists = 0.00 s 6912s [3370/8505] TestRDocMarkupParser#test_tokenize_rule = 0.00 s 6912s [3371/8505] TestRDocMarkupParser#test_parse_heading_label = 0.00 s 6912s [3372/8505] TestRDocMarkupParser#test_parse_heading_heading = 0.00 s 6912s [3373/8505] TestRDocMarkupParser#test_parse_bullet_indent_verbatim = 0.00 s 6912s [3374/8505] TestRDocMarkupParser#test_parse_verbatim_heading = 0.00 s 6912s [3375/8505] TestRDocMarkupParser#test_parse_label_bullet = 0.00 s 6912s [3376/8505] TestRDocMarkupParser#test_parse_number_bullet = 0.00 s 6912s [3377/8505] TestRDocMarkupParser#test_parse_paragraph_multiline = 0.00 s 6912s [3378/8505] TestRDocMarkupParser#test_parse_bullet_multiline = 0.01 s 6912s [3379/8505] TestRDocMarkupParser#test_parse_verbatim_ualpha = 0.00 s 6912s [3380/8505] TestRDocMarkupParser#test_parse_trailing_cr = 0.00 s 6912s [3381/8505] TestRDocMarkupParser#test_tokenize_note_not = 0.00 s 6912s [3382/8505] TestRDocMarkupParser#test_parse_bullet_multiparagraph = 0.00 s 6912s [3383/8505] TestRDocMarkupParser#test_tokenize_lalpha = 0.00 s 6912s [3384/8505] TestRDocMarkupParser#test_parse_verbatim_rule = 0.00 s 6912s [3385/8505] TestRDocMarkupParser#test_parse_label_multi_line = 0.00 s 6912s [3386/8505] TestRDocMarkupParser#test_parse_line_break = 0.00 s 6912s [3387/8505] TestRDocMarkupParser#test_peek_token = 0.00 s 6912s [3388/8505] TestRDocMarkupParser#test_tokenize_note_newline = 0.00 s 6912s [3389/8505] TestRDocMarkupParser#test_parse_label_multi_label = 0.00 s 6912s [3390/8505] TestRDocMarkupParser#test_parse_list_verbatim = 0.00 s 6912s [3391/8505] TestRDocMarkupParser#test_parse_heading_number = 0.00 s 6912s [3392/8505] TestRDocMarkupParser#test_parse_rule = 0.00 s 6912s [3393/8505] TestRDocMarkupParser#test_parse_paragraph = 0.00 s 6912s [3394/8505] TestRDocMarkupParser#test_parse_lalpha = 0.00 s 6912s [3395/8505] TestRDocMarkupParser#test_tokenize_number = 0.00 s 6912s [3396/8505] TestRDocMarkupParser#test_tokenize_verbatim_rule = 0.00 s 6912s [3397/8505] TestRDocMarkupParser#test_tokenize_note_empty = 0.00 s 6912s [3398/8505] TestRDocMarkupParser#test_tokenize_label_newline = 0.00 s 6912s [3399/8505] TestRDocMarkupParser#test_verbatim_normalize = 0.00 s 6912s [3400/8505] TestRDocMarkupParser#test_parse_verbatim_multilevel = 0.00 s 6912s [3401/8505] TestRDocMarkupParser#test_parse_ualpha = 0.00 s 6912s [3402/8505] TestRDocMarkupParser#test_unget = 0.00 s 6912s [3403/8505] TestRDocMarkupParser#test_tokenize_rule_windows = 0.00 s 6912s [3404/8505] TestRDocMarkupParser#test_parse_verbatim_number = 0.00 s 6912s [3405/8505] TestRDocMarkupParser#test_tokenize_line_break_no_short = 0.00 s 6912s [3406/8505] TestRDocMarkupParser#test_parse_bullet_verbatim_heading = 0.00 s 6912s [3407/8505] TestRDocMarkupParser#test_parse_list_list_2 = 0.00 s 6912s [3408/8505] TestRDocMarkupParser#test_skip = 0.00 s 6912s [3409/8505] TestRDocMarkupParser#test_tokenize_note = 0.00 s 6912s [3410/8505] TestRDocMarkupParser#test_parse_verbatim = 0.00 s 6912s [3411/8505] TestRDocMarkupParser#test_parse_label_newline = 0.00 s 6912s [3412/8505] TestRDocMarkupParser#test_tokenize_line_break_long = 0.00 s 6912s [3413/8505] TestRDocMarkupParser#test_get = 0.00 s 6912s [3414/8505] TestRDocMarkupParser#test_parse_verbatim_label = 0.00 s 6912s [3415/8505] TestRDocMarkupParser#test_parse_bullet_indent = 0.00 s 6912s [3416/8505] TestRDocMarkupParser#test_parse_whitespace = 0.01 s 6912s [3417/8505] TestRDocMarkupParser#test_parse_verbatim_bullet = 0.00 s 6912s [3418/8505] TestRDocMarkupParser#test_tokenize_bullet_indent = 0.00 s 6912s [3419/8505] TestRDocMarkupParser#test_parse_verbatim_multiline = 0.00 s 6912s [3420/8505] TestRDocMarkupParser#test_tokenize_number_period_continue = 0.00 s 6912s [3421/8505] TestRDocMarkupParser#test_tokenize_number_period = 0.00 s 6912s [3422/8505] TestRDocMarkupParser#test_tokenize_bullet = 0.00 s 6912s [3423/8505] TestRDocMarkupParser#test_parse_lalpha_utf_8 = 0.00 s 6912s [3424/8505] TestRDocMarkupParser#test_build_heading = 0.00 s 6912s [3425/8505] TestRDocMarkupParser#test_parse_heading_bullet = 0.00 s 6912s [3426/8505] TestRDocMarkupParser#test_parse_bullet_paragraph = 0.00 s 6912s [3427/8505] TestRDocMarkupParser#test_parse_paragraph_verbatim = 0.00 s 6912s [3428/8505] TestRDocMarkupParser#test_tokenize_heading_no_space = 0.00 s 6912s [3429/8505] TestRDocMarkupParser#test_parse_verbatim_fold = 0.00 s 6912s [3430/8505] TestRDocMarkupParser#test_tokenize_note_utf_8 = 0.00 s 6912s [3431/8505] TestRDocMarkupParser#test_parse_verbatim_heading2 = 0.00 s 6912s [3432/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_one = 0.00 s 6912s [3433/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_empty_value = 0.00 s 6912s [3434/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_nil_value = 0.00 s 6912s [3435/8505] TestCSVWriteConvertersGenerateLine::DifferentOFS#test_multiple = 0.00 s 6912s [3436/8505] TestCSVParseStrip#test_string = 0.00 s 6912s [3437/8505] TestCSVParseStrip#test_do_not_strip_cr = 0.00 s 6912s [3438/8505] TestCSVParseStrip#test_liberal_parsing = 0.00 s 6912s [3439/8505] TestCSVParseStrip#test_left = 0.00 s 6912s [3440/8505] TestCSVParseStrip#test_col_sep_incompatible_true = 0.00 s 6912s [3441/8505] TestCSVParseStrip#test_right = 0.00 s 6912s [3442/8505] TestCSVParseStrip#test_both = 0.00 s 6912s [3443/8505] TestCSVParseStrip#test_quoted = 0.00 s 6912s [3444/8505] TestCSVParseStrip#test_middle = 0.00 s 6912s [3445/8505] TestCSVParseStrip#test_do_not_strip_crlf = 0.00 s 6912s [3446/8505] TestCSVParseStrip#test_do_not_strip_lf = 0.00 s 6912s [3447/8505] TestCSVParseStrip#test_no_quote = 0.00 s 6912s [3448/8505] TestCSVParseStrip#test_col_sep_compatible_string = 0.00 s 6912s [3449/8505] TestCSVParseStrip#test_col_sep_incompatible_string = 0.00 s 6912s [3450/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf = 0.00 s 6912s [3451/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr = 0.00 s 6912s [3452/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_euc_jp = 0.00 s 6912s [3453/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_comma_nil = 0.00 s 6912s [3454/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_lf = 0.01 s 6912s [3455/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_last = 0.00 s 6912s [3456/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_empty = 0.00 s 6912s [3457/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_character_double = 0.00 s 6912s [3458/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_tab = 0.00 s 6912s [3459/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_comma = 0.00 s 6912s [3460/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_last = 0.00 s 6912s [3461/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_one_element = 0.00 s 6912s [3462/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote = 0.00 s 6912s [3463/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf = 0.00 s 6912s [3464/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_with_default_internal = 0.01 s 6912s [3465/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_last = 0.00 s 6912s [3466/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_utf8 = 0.00 s 6912s [3467/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_values_only = 0.00 s 6912s [3468/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma = 0.01 s 6912s [3469/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma_and_value = 0.00 s 6912s [3470/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_force_quotes = 0.00 s 6912s [3471/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_value_lf_nil = 0.00 s 6912s [3472/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_double_only = 0.00 s 6912s [3473/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_values = 0.00 s 6912s [3474/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_row_sep = 0.00 s 6912s [3475/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_lf_cr = 0.00 s 6912s [3476/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_lf = 0.00 s 6912s [3477/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_semi_colon_values = 0.00 s 6912s [3478/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_cr = 0.00 s 6912s [3479/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_comma_double = 0.00 s 6912s [3480/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_values = 0.00 s 6912s [3481/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_semi_colon = 0.00 s 6912s [3482/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_cr = 0.00 s 6912s [3483/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_first = 0.00 s 6912s [3484/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_encoding_with_default_internal = 0.01 s 6912s [3485/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_nil_value_middle = 0.00 s 6912s [3486/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_character = 0.00 s 6912s [3487/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_tab_values = 0.00 s 6912s [3488/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_cr_dot_lf = 0.00 s 6912s [3489/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_quote_lf_value_lf = 0.00 s 6912s [3490/8505] TestCSVWriteGeneralGenerateLine::DifferentOFS#test_col_sep = 0.00 s 6912s [3491/8505] TestCSVWriteGeneralGenerate#test_quote_lf = 0.00 s 6912s [3492/8505] TestCSVWriteGeneralGenerate#test_cr = 0.00 s 6912s [3493/8505] TestCSVWriteGeneralGenerate#test_encoding_euc_jp = 0.00 s 6912s [3494/8505] TestCSVWriteGeneralGenerate#test_cr_lf_comma_nil = 0.00 s 6912s [3495/8505] TestCSVWriteGeneralGenerate#test_cr_lf_lf = 0.00 s 6912s [3496/8505] TestCSVWriteGeneralGenerate#test_nil_value_last = 0.00 s 6912s [3497/8505] TestCSVWriteGeneralGenerate#test_nil_empty = 0.00 s 6912s [3498/8505] TestCSVWriteGeneralGenerate#test_quote_character_double = 0.00 s 6912s [3499/8505] TestCSVWriteGeneralGenerate#test_tab = 0.00 s 6912s [3500/8505] TestCSVWriteGeneralGenerate#test_cr_lf_comma = 0.00 s 6912s [3501/8505] TestCSVWriteGeneralGenerate#test_quote_last = 0.00 s 6912s [3502/8505] TestCSVWriteGeneralGenerate#test_one_element = 0.00 s 6912s [3503/8505] TestCSVWriteGeneralGenerate#test_quote = 0.00 s 6912s [3504/8505] TestCSVWriteGeneralGenerate#test_cr_lf = 0.00 s 6912s [3505/8505] TestCSVWriteGeneralGenerate#test_with_default_internal = 0.00 s 6912s [3506/8505] TestCSVWriteGeneralGenerate#test_quote_lf_last = 0.00 s 6912s [3507/8505] TestCSVWriteGeneralGenerate#test_encoding_utf8 = 0.00 s 6912s [3508/8505] TestCSVWriteGeneralGenerate#test_nil_values_only = 0.00 s 6912s [3509/8505] TestCSVWriteGeneralGenerate#test_comma = 0.00 s 6912s [3510/8505] TestCSVWriteGeneralGenerate#test_comma_and_value = 0.00 s 6912s [3511/8505] TestCSVWriteGeneralGenerate#test_force_quotes = 0.00 s 6912s [3512/8505] TestCSVWriteGeneralGenerate#test_quote_lf_value_lf_nil = 0.00 s 6912s [3513/8505] TestCSVWriteGeneralGenerate#test_nil_double_only = 0.00 s 6912s [3514/8505] TestCSVWriteGeneralGenerate#test_values = 0.00 s 6912s [3515/8505] TestCSVWriteGeneralGenerate#test_row_sep = 0.00 s 6912s [3516/8505] TestCSVWriteGeneralGenerate#test_cr_lf_cr = 0.00 s 6912s [3517/8505] TestCSVWriteGeneralGenerate#test_lf = 0.00 s 6912s [3518/8505] TestCSVWriteGeneralGenerate#test_semi_colon_values = 0.00 s 6912s [3519/8505] TestCSVWriteGeneralGenerate#test_quote_cr = 0.00 s 6912s [3520/8505] TestCSVWriteGeneralGenerate#test_comma_double = 0.00 s 6912s [3521/8505] TestCSVWriteGeneralGenerate#test_nil_values = 0.00 s 6912s [3522/8505] TestCSVWriteGeneralGenerate#test_semi_colon = 0.00 s 6912s [3523/8505] TestCSVWriteGeneralGenerate#test_nil_cr = 0.00 s 6912s [3524/8505] TestCSVWriteGeneralGenerate#test_nil_value_first = 0.00 s 6912s [3525/8505] TestCSVWriteGeneralGenerate#test_encoding_with_default_internal = 0.00 s 6912s [3526/8505] TestCSVWriteGeneralGenerate#test_nil_value_middle = 0.00 s 6912s [3527/8505] TestCSVWriteGeneralGenerate#test_quote_character = 0.00 s 6912s [3528/8505] TestCSVWriteGeneralGenerate#test_tab_values = 0.00 s 6912s [3529/8505] TestCSVWriteGeneralGenerate#test_cr_dot_lf = 0.00 s 6912s [3530/8505] TestCSVWriteGeneralGenerate#test_quote_lf_value_lf = 0.00 s 6912s [3531/8505] TestCSVWriteGeneralGenerate#test_col_sep = 0.00 s 6912s [3532/8505] TestRipper::Filter#test_filter_token = 0.00 s 6912s [3533/8505] TestRipper::Filter#test_filter_state = 0.02 s 6912s [3534/8505] TestRipper::Filter#test_filter_lineno = 0.01 s 6912s [3535/8505] TestRipper::Filter#test_filter_lineno_set = 0.01 s 6912s [3536/8505] TestRipper::Filter#test_filter_filename_unset = 0.01 s 6912s [3537/8505] TestRipper::Filter#test_filter_filename = 0.01 s 6912s [3538/8505] TestRipper::Filter#test_filter_column = 0.01 s 6912s [3539/8505] TestOptionParser::ReqArg::Def4#test_into = 0.01 s 6912s [3540/8505] TestOptionParser::ReqArg::Def4#test_nonopt_pattern = 0.00 s 6912s [3541/8505] TestOptionParser::ReqArg::Def4#test_order = 0.00 s 6912s [3542/8505] TestOptionParser::ReqArg::Def4#test_abbrev = 0.02 s 6912s [3543/8505] TestOptionParser::ReqArg::Def4#test_regexp = 0.00 s 6912s [3544/8505] TestOptionParser::ReqArg::Def4#test_hyphenize = 0.01 s 6912s [3545/8505] TestOptionParser::ReqArg::Def4#test_short = 0.01 s 6912s [3546/8505] TestOptionParser::ReqArg::Def4#test_long = 0.01 s 6912s [3547/8505] TestOptionParser::ReqArg::Def4#test_permute = 0.00 s 6912s [3548/8505] TestOptionParser::ReqArg::Def4#test_require_exact = 0.01 s 6912s [3549/8505] TestCSVTable::DifferentOFS#test_array_delegation = 0.00 s 6912s [3550/8505] TestCSVTable::DifferentOFS#test_to_csv = 0.01 s 6912s [3551/8505] TestCSVTable::DifferentOFS#test_headers = 0.00 s 6912s [3552/8505] TestCSVTable::DifferentOFS#test_values_at = 0.01 s 6912s [3553/8505] TestCSVTable::DifferentOFS#test_headers_empty = 0.00 s 6912s [3554/8505] TestCSVTable::DifferentOFS#test_dig_cell_no_dig = 0.00 s 6912s [3555/8505] TestCSVTable::DifferentOFS#test_dig_mixed = 0.00 s 6912s [3556/8505] TestCSVTable::DifferentOFS#test_dig_by_column = 0.00 s 6912s [3557/8505] TestCSVTable::DifferentOFS#test_delete_row = 0.01 s 6912s [3558/8505] TestCSVTable::DifferentOFS#test_delete_if_row = 0.00 s 6912s [3559/8505] TestCSVTable::DifferentOFS#test_append = 0.01 s 6912s [3560/8505] TestCSVTable::DifferentOFS#test_headers_only = 0.00 s 6912s [3561/8505] TestCSVTable::DifferentOFS#test_set_by_col_with_header_row = 0.00 s 6912s [3562/8505] TestCSVTable::DifferentOFS#test_set_row_or_column = 0.02 s 6912s [3563/8505] TestCSVTable::DifferentOFS#test_index = 0.01 s 6912s [3564/8505] TestCSVTable::DifferentOFS#test_delete_mixed_one = 0.00 s 6912s [3565/8505] TestCSVTable::DifferentOFS#test_each_split = 0.00 s 6912s [3566/8505] TestCSVTable::DifferentOFS#test_each = 0.01 s 6912s [3567/8505] TestCSVTable::DifferentOFS#test_dig_cell = 0.00 s 6912s [3568/8505] TestCSVTable::DifferentOFS#test_enumerable = 0.00 s 6912s [3569/8505] TestCSVTable::DifferentOFS#test_delete_if_column_without_block = 0.01 s 6912s [3570/8505] TestCSVTable::DifferentOFS#test_inspect_shows_current_mode = 0.01 s 6912s [3571/8505] TestCSVTable::DifferentOFS#test_modes = 0.00 s 6912s [3572/8505] TestCSVTable::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.00 s 6912s [3573/8505] TestCSVTable::DifferentOFS#test_dig_by_row = 0.00 s 6912s [3574/8505] TestCSVTable::DifferentOFS#test_to_a = 0.00 s 6912s [3575/8505] TestCSVTable::DifferentOFS#test_initialize = 0.00 s 6912s [3576/8505] TestCSVTable::DifferentOFS#test_delete_column = 0.00 s 6912s [3577/8505] TestCSVTable::DifferentOFS#test_delete_if_row_without_block = 0.00 s 6912s [3578/8505] TestCSVTable::DifferentOFS#test_delete_headers_only = 0.00 s 6912s [3579/8505] TestCSVTable::DifferentOFS#test_delete_if_column = 0.00 s 6912s [3580/8505] TestCSVTable::DifferentOFS#test_headers_modified_by_row = 0.00 s 6912s [3581/8505] TestCSVTable::DifferentOFS#test_delete_mixed_multiple = 0.00 s 6912s [3582/8505] TestCSVTable::DifferentOFS#test_delete_with_blank_rows = 0.00 s 6912s [3583/8505] TestRDocEncoding#test_class_read_file_encoding_invalid = 0.00 s 6912s [3584/8505] TestRDocEncoding#test_class_detect_encoding = 0.00 s 6912s [3585/8505] TestRDocEncoding#test_class_read_file_encoding_with_signature = 0.00 s 6912s [3586/8505] TestRDocEncoding#test_class_read_file_encoding_force_transcode = 0.00 s 6912s [3587/8505] TestRDocEncoding#test_class_read_file_encoding_fail = 0.00 s 6912s [3588/8505] TestRDocEncoding#test_sanity = 0.00 s 6912s [3589/8505] TestRDocEncoding#test_class_read_file_encoding = 0.00 s 6912s [3590/8505] TestRDocEncoding#test_class_read_file_encoding_iso_2022_jp = 0.00 s 6912s [3591/8505] TestRDocEncoding#test_class_read_file_encoding_fancy = 0.00 s 6912s [3592/8505] TestRDocEncoding#test_class_read_file_encoding_convert = 0.00 s 6912s [3593/8505] TestRDocEncoding#test_class_read_file = 0.00 s 6912s [3594/8505] TestRDocEncoding#test_class_read_file_encoding_guess = 0.00 s 6912s [3595/8505] TestRDocEncoding#test_class_set_encoding_bad = 0.00 s 6912s [3596/8505] TestFiberIOBuffer#test_write_nonblock = 0.00 s 6912s [3597/8505] TestCSVInterfaceWrite::DifferentOFS#test_write_headers = 0.01 s 6912s [3598/8505] TestCSVInterfaceWrite::DifferentOFS#test_headers_detection = 0.00 s 6912s [3599/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash_headers_string = 0.01 s 6912s [3600/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_append = 0.00 s 6912s [3601/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash_headers_array = 0.00 s 6912s [3602/8505] TestCSVInterfaceWrite::DifferentOFS#test_write_headers_empty = 0.00 s 6912s [3603/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_col_sep = 0.00 s 6912s [3604/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_no_new_line = 0.00 s 6912s [3605/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_hash = 0.00 s 6912s [3606/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_row_sep = 0.00 s 6912s [3607/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_default = 0.00 s 6912s [3608/8505] TestCSVInterfaceWrite::DifferentOFS#test_generate_line_shortcut = 0.00 s 6912s [3609/8505] TestCSVInterfaceWrite::DifferentOFS#test_append_row = 0.01 s 6912s [3610/8505] TestCSVInterfaceWrite::DifferentOFS#test_lineno = 0.01 s 6912s [3611/8505] TestCSVInterfaceWrite::DifferentOFS#test_options_not_modified = 0.00 s 6912s [3612/8505] TestRDocClassModule#test_parse_comment_location = 0.04 s 6912s [3613/8505] TestRDocClassModule#test_parse_comment = 0.03 s 6912s [3614/8505] TestRDocClassModule#test_update_extends_with_colons = 0.04 s 6912s [3615/8505] TestRDocClassModule#test_comment_equals_comment = 0.04 s 6913s [3616/8505] TestRDocClassModule#test_parse = 0.04 s 6913s [3617/8505] TestRDocClassModule#test_add_comment_duplicate = 0.03 s 6913s [3618/8505] TestRDocClassModule#test_search_record_merged = 0.09 s 6913s [3619/8505] TestRDocClassModule#test_merge = 0.04 s 6913s [3620/8505] TestRDocClassModule#test_parse_comment_format = 0.05 s 6913s [3621/8505] TestRDocClassModule#test_merge_includes = 0.03 s 6913s [3622/8505] TestRDocClassModule#test_merge_collections_drop = 0.03 s 6913s [3623/8505] TestRDocClassModule#test_marshal_load_version_3 = 0.05 s 6913s [3624/8505] TestRDocClassModule#test_marshal_load_version_1 = 0.03 s 6913s [3625/8505] TestRDocClassModule#test_update_extends_trim = 0.05 s 6913s [3626/8505] TestRDocClassModule#test_update_includes_trim = 0.03 s 6913s [3627/8505] TestRDocClassModule#test_update_includes = 0.05 s 6913s [3628/8505] TestRDocClassModule#test_merge_comment_version_0 = 0.03 s 6913s [3629/8505] TestRDocClassModule#test_find_class_named = 0.03 s 6913s [3630/8505] TestRDocClassModule#test_from_module_comment = 0.05 s 6913s [3631/8505] TestRDocClassModule#test_merge_attributes = 0.04 s 6913s [3632/8505] TestRDocClassModule#test_add_comment_comment = 0.03 s 6913s [3633/8505] TestRDocClassModule#test_merge_sections = 0.04 s 6913s [3634/8505] TestRDocClassModule#test_update_aliases_module = 0.03 s 6913s [3635/8505] TestRDocClassModule#test_update_includes_with_colons = 0.03 s 6913s [3636/8505] TestRDocClassModule#test_superclass = 0.03 s 6913s [3637/8505] TestRDocClassModule#test_add_comment_stopdoc = 0.03 s 6913s [3638/8505] TestRDocClassModule#test_remove_nodoc_children = 0.03 s 6913s [3639/8505] TestRDocClassModule#test_merge_attributes_version_0 = 0.03 s 6913s [3640/8505] TestRDocClassModule#test_merge_includes_version_0 = 0.04 s 6913s [3641/8505] TestRDocClassModule#test_document_self_or_methods = 0.03 s 6914s [3642/8505] TestRDocClassModule#test_merge_methods_version_0 = 0.03 s 6914s [3643/8505] TestRDocClassModule#test_each_ancestor = 0.03 s 6914s [3644/8505] TestRDocClassModule#test_merge_constants = 0.03 s 6914s [3645/8505] TestRDocClassModule#test_marshal_dump = 0.04 s 6914s [3646/8505] TestRDocClassModule#test_merge_comment = 0.03 s 6914s [3647/8505] TestRDocClassModule#test_marshal_load_version_0 = 0.03 s 6914s [3648/8505] TestRDocClassModule#test_marshal_load_version_2 = 0.03 s 6914s [3649/8505] TestRDocClassModule#test_marshal_dump_visibility = 0.03 s 6914s [3650/8505] TestRDocClassModule#test_update_aliases_reparent = 0.06 s 6914s [3651/8505] TestRDocClassModule#test_store_equals = 0.03 s 6914s [3652/8505] TestRDocClassModule#test_add_comment = 0.03 s 6914s [3653/8505] TestRDocClassModule#test_update_extends = 0.03 s 6914s [3654/8505] TestRDocClassModule#test_merge_methods = 0.03 s 6914s [3655/8505] TestRDocClassModule#test_merge_sections_overlap = 0.03 s 6914s [3656/8505] TestRDocClassModule#test_merge_extends = 0.03 s 6914s [3657/8505] TestRDocClassModule#test_comment_equals = 0.03 s 6914s [3658/8505] TestRDocClassModule#test_merge_constants_version_0 = 0.03 s 6914s [3659/8505] TestRDocClassModule#test_documented_eh = 0.04 s 6914s [3660/8505] TestRDocClassModule#test_each_ancestor_cycle = 0.03 s 6914s [3661/8505] TestRDocClassModule#test_update_aliases_reparent_root = 0.03 s 6914s [3662/8505] TestRDocClassModule#test_update_aliases_class = 0.03 s 6914s [3663/8505] TestRDocClassModule#test_search_record = 0.04 s 6914s [3664/8505] TestRDocClassModule#test_ancestors = 0.03 s 6914s [3665/8505] TC_IPAddr#test_ip6_int = 0.00 s 6914s [3666/8505] TC_IPAddr#test_zone_id = 0.01 s 6914s [3667/8505] TC_IPAddr#test_reverse = 0.00 s 6914s [3668/8505] TC_IPAddr#test_s_new_ntoh = 0.02 s 6914s [3669/8505] TC_IPAddr#test_prefix_writer = 0.03 s 6914s [3670/8505] TC_IPAddr#test_ipv4_compat = 0.01 s 6914s [3671/8505] TC_IPAddr#test_ntop = 0.00 s 6914s [3672/8505] TC_IPAddr#test_netmask = 0.00 s 6914s [3673/8505] TC_IPAddr#test_to_s = 0.00 s 6914s [3674/8505] TC_IPAddr#test_ipv4_mapped = 0.01 s 6914s [3675/8505] TC_IPAddr#test_ip6_arpa = 0.01 s 6914s [3676/8505] TC_IPAddr#test_s_new = 0.09 s 6915s [3677/8505] Random::Formatter::TestClassMethods#test_random_number_float_by_zero = 0.02 s 6915s [3678/8505] Random::Formatter::TestClassMethods#test_base64 = 0.01 s 6915s [3679/8505] Random::Formatter::TestClassMethods#test_hex_encoding = 0.00 s 6915s [3680/8505] Random::Formatter::TestClassMethods#test_hex = 0.02 s 6915s [3681/8505] Random::Formatter::TestClassMethods#test_random_number_int = 0.00 s 6915s [3682/8505] Random::Formatter::TestClassMethods#test_alphanumeric = 0.03 s 6915s [3683/8505] Random::Formatter::TestClassMethods#test_uuid = 0.00 s 6915s [3684/8505] Random::Formatter::TestClassMethods#test_urlsafe_base64 = 0.01 s 6915s [3685/8505] Random::Formatter::TestClassMethods#test_random_bytes = 0.00 s 6915s [3686/8505] Random::Formatter::TestClassMethods#test_random_number_float = 0.01 s 6915s [3687/8505] TestRDocMarkdownTest#test_links_shortcut_references = 0.04 s 6915s [3688/8505] TestRDocMarkdownTest#test_links_reference_style = 0.21 s 6915s [3689/8505] TestRDocMarkdownTest#test_amps_and_angle_encoding = 0.11 s 6915s [3690/8505] TestRDocMarkdownTest#test_ordered_and_unordered_lists = 0.32 s 6915s [3691/8505] TestRDocMarkdownTest#test_nested_blockquotes = 0.01 s 6915s [3692/8505] TestRDocMarkdownTest#test_tidyness = 0.02 s 6915s [3693/8505] TestRDocMarkdownTest#test_code_spans = 0.02 s 6915s [3694/8505] TestRDocMarkdownTest#test_inline_html_advanced = 0.02 s 6915s [3695/8505] TestRDocMarkdownTest#test_code_blocks = 0.01 s 6915s [3696/8505] TestRDocMarkdownTest#test_inline_html_comments = 0.03 s 6915s [3697/8505] TestRDocMarkdownTest#test_blockquotes_with_code_blocks = 0.01 s 6917s [3698/8505] TestRDocMarkdownTest#test_markdown_documentation_syntax = 1.95 s 6917s [3699/8505] TestRDocMarkdownTest#test_links_inline_style = 0.06 s 6917s [3700/8505] TestRDocMarkdownTest#test_literal_quotes_in_titles = 0.02 s 6918s [3701/8505] TestRDocMarkdownTest#test_inline_html_simple = 0.16 s 6918s [3702/8505] TestRDocMarkdownTest#test_backslash_escapes = 0.21 s 6918s [3703/8505] TestRDocMarkdownTest#test_auto_links = 0.03 s 6918s [3704/8505] TestRDocMarkdownTest#test_markdown_documentation_basics = 0.28 s 6918s [3705/8505] TestRDocMarkdownTest#test_hard_wrapped_paragraphs_with_list_like_lines = 0.01 s 6918s [3706/8505] TestRDocMarkdownTest#test_horizontal_rules = 0.04 s 6918s [3707/8505] TestRDocMarkdownTest#test_tabs = 0.03 s 6918s [3708/8505] TestRDocMarkdownTest#test_strong_and_em_together = 0.02 s 6918s [3709/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_cr_lf = 0.00 s 6918s [3710/8505] TestCSVFeatures::DifferentOFS#test_quote_char_special_regexp_char_liberal_parsing = 0.01 s 6918s [3711/8505] TestCSVFeatures::DifferentOFS#test_inspect_shows_headers_when_available = 0.02 s 6918s [3712/8505] TestCSVFeatures::DifferentOFS#test_failing_to_reset_headers_in_rewind = 0.01 s 6918s [3713/8505] TestCSVFeatures::DifferentOFS#test_line = 0.01 s 6918s [3714/8505] TestCSVFeatures::DifferentOFS#test_failing_to_escape_col_sep = 0.00 s 6918s [3715/8505] TestCSVFeatures::DifferentOFS#test_quote_char_special_regexp_char = 0.01 s 6918s [3716/8505] TestCSVFeatures::DifferentOFS#test_gzip_writer = 0.01 s 6918s [3717/8505] TestCSVFeatures::DifferentOFS#test_unknown_options = 0.01 s 6918s [3718/8505] TestCSVFeatures::DifferentOFS#test_csv_char_readers = 0.00 s 6918s [3719/8505] TestCSVFeatures::DifferentOFS#test_col_sep_empty = 0.00 s 6918s [3720/8505] TestCSVFeatures::DifferentOFS#test_quote_char = 0.01 s 6918s [3721/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_cr = 0.00 s 6918s [3722/8505] TestCSVFeatures::DifferentOFS#test_inspect_is_smart_about_io_types = 0.00 s 6918s [3723/8505] TestCSVFeatures::DifferentOFS#test_inspect_shows_key_attributes = 0.00 s 6918s [3724/8505] TestCSVFeatures::DifferentOFS#test_converters_reader = 0.00 s 6918s [3725/8505] TestCSVFeatures::DifferentOFS#test_row_sep = 0.00 s 6918s [3726/8505] TestCSVFeatures::DifferentOFS#test_table_nil_equality = 0.00 s 6918s [3727/8505] TestCSVFeatures::DifferentOFS#test_header_converters_reader = 0.00 s 6918s [3728/8505] TestCSVFeatures::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.00 s 6918s [3729/8505] TestCSVFeatures::DifferentOFS#test_version = 0.00 s 6918s [3730/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_lf = 0.00 s 6918s [3731/8505] TestCSVFeatures::DifferentOFS#test_row_sep_auto_discovery = 0.00 s 6918s [3732/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_1024_over_lf = 0.02 s 6918s [3733/8505] TestCSVFeatures::DifferentOFS#test_col_sep_nil = 0.00 s 6918s [3734/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_1024_over_cr_lf = 0.02 s 6919s [3735/8505] TestCSVFeatures::DifferentOFS#test_line_separator_autodetection_for_non_seekable_input_many_cr_only = 0.48 s 6919s [3736/8505] TestCSVFeatures::DifferentOFS#test_skip_blanks = 0.00 s 6919s [3737/8505] TestCSVFeatures::DifferentOFS#test_readline = 0.01 s 6919s [3738/8505] TestCSVFeatures::DifferentOFS#test_lineno = 0.00 s 6919s [3739/8505] TestCSVFeatures::DifferentOFS#test_csv_behavior_readers = 0.01 s 6919s [3740/8505] TestCSVFeatures::DifferentOFS#test_col_sep = 0.03 s 6919s [3741/8505] TestSocket_BasicSocket#test_read_write_nonblock = 0.02 s 6919s [3742/8505] TestSocket_BasicSocket#test_getsockopt = 0.00 s 6919s [3743/8505] TestSocket_BasicSocket#test_write_nonblock_buffered = 0.01 s 6919s [3744/8505] TestSocket_BasicSocket#test_close_write = 0.00 s 6919s [3745/8505] TestSocket_BasicSocket#test_read_nonblock_mix_buffered = 0.00 s 6919s [3746/8505] TestSocket_BasicSocket#test_close_read = 0.00 s 6919s [3747/8505] TestDateConv#test_to_datetime__from_datetime = 0.00 s 6919s [3748/8505] TestDateConv#test_to_date__from_datetime = 0.00 s 6919s [3749/8505] TestDateConv#test_to_datetime__from_date = 0.00 s 6919s [3750/8505] TestDateConv#test_to_time__from_date = 0.00 s 6919s [3751/8505] TestDateConv#test_to_class = 0.00 s 6919s [3752/8505] TestDateConv#test_to_time_to_date_roundtrip__from_gregorian_date = 0.00 s 6919s [3753/8505] TestDateConv#test_to_date__from_time = 0.00 s 6919s [3754/8505] TestDateConv#test_to_time__from_time = 0.00 s 6919s [3755/8505] TestDateConv#test_to_date__from_date = 0.00 s 6919s [3756/8505] TestDateConv#test_to_datetime__from_time = 0.01 s 6919s [3757/8505] TestDigest::TestSHA384#test_eq = 0.00 s 6919s [3758/8505] TestDigest::TestSHA384#test_s_base64digest = 0.00 s 6919s [3759/8505] TestDigest::TestSHA384#test_alignment = 0.00 s 6919s [3760/8505] TestDigest::TestSHA384#test_bubblebabble_class = 0.00 s 6919s [3761/8505] TestDigest::TestSHA384#test_s_hexdigest = 0.00 s 6919s [3762/8505] TestDigest::TestSHA384#test_bubblebabble = 0.00 s 6919s [3763/8505] TestDigest::TestSHA384#test_update = 0.00 s 6919s [3764/8505] TestDigest::TestSHA384#test_instance_eval = 0.00 s 6919s [3765/8505] TestDigest::TestSHA384#test_s_file = 0.00 s 6919s [3766/8505] TestDigest::TestSHA384#test_bubblebabble_instance = 0.00 s 6919s [3767/8505] TestDigest::TestSHA384#test_s_digest = 0.00 s 6919s [3768/8505] TestDigest::TestSHA384#test_s_new = 0.00 s 6919s [3769/8505] TestCSVParseRewind::DifferentOFS#test_default = 0.00 s 6919s [3770/8505] TestCSVParseRewind::DifferentOFS#test_have_headers = 0.00 s 6919s [3771/8505] HTTPRequestTest#test_header_set = 0.00 s 6919s [3772/8505] HTTPRequestTest#test_initialize_GET_range = 0.00 s 6919s [3773/8505] HTTPRequestTest#test_initialize_GET = 0.00 s 6919s [3774/8505] HTTPRequestTest#test_initialize_GET_uri = 0.00 s 6919s [3775/8505] HTTPRequestTest#test_initialize_HEAD = 0.00 s 6919s [3776/8505] HTTPRequestTest#test_initialize_accept_encoding = 0.00 s 6919s [3777/8505] TestRDocGeneratorMarkup#test_description = 0.01 s 6919s [3778/8505] TestRDocGeneratorMarkup#test_aref_to = 0.00 s 6919s [3779/8505] TestRDocGeneratorMarkup#test_as_href = 0.00 s 6919s [3780/8505] TestRDocGeneratorMarkup#test_formatter = 0.00 s 6919s [3781/8505] TestRDocGeneratorMarkup#test_cvs_url = 0.00 s 6919s [3782/8505] PPTestModule::PPSingleLineTest#test_hash = 0.01 s 6919s [3783/8505] TestCSVParseConvert::DifferentOFS#test_custom_field_info_line = 0.01 s 6919s [3784/8505] TestCSVParseConvert::DifferentOFS#test_integer_float = 0.01 s 6919s [3785/8505] TestCSVParseConvert::DifferentOFS#test_numeric = 0.00 s 6919s [3786/8505] TestCSVParseConvert::DifferentOFS#test_custom = 0.01 s 6919s [3787/8505] TestCSVParseConvert::DifferentOFS#test_empty_value = 0.00 s 6919s [3788/8505] TestCSVParseConvert::DifferentOFS#test_nil_value = 0.00 s 6919s [3789/8505] TestCSVParseConvert::DifferentOFS#test_float = 0.01 s 6919s [3790/8505] TestCSVParseConvert::DifferentOFS#test_all = 0.01 s 6919s [3791/8505] TestCSVParseConvert::DifferentOFS#test_float_integer = 0.00 s 6919s [3792/8505] TestCSVParseConvert::DifferentOFS#test_builtin_custom = 0.00 s 6919s [3793/8505] TestCSVParseConvert::DifferentOFS#test_integer = 0.01 s 6919s [3794/8505] TestCSVParseConvert::DifferentOFS#test_custom_blank_field = 0.00 s 6919s [3795/8505] TestCSVParseConvert::DifferentOFS#test_custom_field_info_header = 0.00 s 6919s [3796/8505] TestCSVInterfaceWrite#test_write_headers = 0.01 s 6919s [3797/8505] TestCSVInterfaceWrite#test_headers_detection = 0.00 s 6919s [3798/8505] TestCSVInterfaceWrite#test_append_hash_headers_string = 0.01 s 6919s [3799/8505] TestCSVInterfaceWrite#test_generate_append = 0.00 s 6919s [3800/8505] TestCSVInterfaceWrite#test_append_hash_headers_array = 0.00 s 6919s [3801/8505] TestCSVInterfaceWrite#test_write_headers_empty = 0.00 s 6919s [3802/8505] TestCSVInterfaceWrite#test_generate_line_col_sep = 0.01 s 6919s [3803/8505] TestCSVInterfaceWrite#test_generate_no_new_line = 0.00 s 6919s [3804/8505] TestCSVInterfaceWrite#test_append_hash = 0.00 s 6919s [3805/8505] TestCSVInterfaceWrite#test_generate_line_row_sep = 0.00 s 6919s [3806/8505] TestCSVInterfaceWrite#test_generate_default = 0.00 s 6919s [3807/8505] TestCSVInterfaceWrite#test_generate_line_shortcut = 0.00 s 6919s [3808/8505] TestCSVInterfaceWrite#test_append_row = 0.00 s 6919s [3809/8505] TestCSVInterfaceWrite#test_lineno = 0.00 s 6919s [3810/8505] TestCSVInterfaceWrite#test_options_not_modified = 0.00 s 6919s [3811/8505] Rinda::TestRingServer#test_shutdown = 0.01 s 6919s [3812/8505] Rinda::TestRingServer#test_make_socket_unicast = 0.01 s 6919s [3813/8505] TestOptionParser::AutoConf#test_without = 0.01 s 6919s [3814/8505] TestOptionParser::AutoConf#test_help = 0.02 s 6919s [3815/8505] TestOptionParser::AutoConf#test_disable = 0.00 s 6919s [3816/8505] TestOptionParser::AutoConf#test_enable_value = 0.00 s 6919s [3817/8505] TestOptionParser::AutoConf#test_with = 0.00 s 6919s [3818/8505] TestOptionParser::AutoConf#test_enable = 0.00 s 6919s [3819/8505] PPTestModule::PPTest#test_list0123_11 = 0.00 s 6919s [3820/8505] PPTestModule::PPTest#test_struct_override_members = 0.00 s 6919s [3821/8505] PPTestModule::PPTest#test_redefined_method = 0.00 s 6919s [3822/8505] PPTestModule::PPTest#test_list0123_12 = 0.00 s 6919s [3823/8505] TestWeakRef#test_ref = 0.00 s 6919s [3824/8505] TestWeakRef#test_not_reference_different_object = 0.01 s 6919s [3825/8505] URI::TestFile#test_parse = 0.00 s 6919s [3826/8505] URI::TestFile#test_build = 0.01 s 6919s [3827/8505] Psych::TestDateTime#test_string_tag = 0.00 s 6919s [3828/8505] Psych::TestDateTime#test_proleptic_gregorian_datetime = 0.01 s 6919s [3829/8505] Psych::TestDateTime#test_datetime_timezone_offset = 0.00 s 6919s [3830/8505] Psych::TestDateTime#test_datetime_non_utc = 0.02 s 6919s [3831/8505] Psych::TestDateTime#test_non_utc = 0.01 s 6919s [3832/8505] Psych::TestDateTime#test_proleptic_gregorian_date = 0.02 s 6919s [3833/8505] Psych::TestDateTime#test_julian_datetime = 0.01 s 6919s [3834/8505] Psych::TestDateTime#test_alias_with_time = 0.00 s 6919s [3835/8505] Psych::TestDateTime#test_timezone_offset = 0.00 s 6919s [3836/8505] Psych::TestDateTime#test_julian_date = 0.01 s 6919s [3837/8505] Psych::TestDateTime#test_invalid_date = 0.00 s 6919s [3838/8505] Psych::TestDateTime#test_usec = 0.01 s 6919s [3839/8505] Psych::TestDateTime#test_negative_year = 0.00 s 6919s [3840/8505] Psych::TestDateTime#test_round_trip = 0.01 s 6919s [3841/8505] Psych::TestDateTime#test_new_datetime = 0.01 s 6919s [3842/8505] IMAPTest#test_format_date = 0.00 s 6920s [3843/8505] IMAPTest#test_imaps_unknown_ca = 0.09 s 6920s [3844/8505] IMAPTest#test_encode_utf7 = 0.00 s 6920s [3845/8505] IMAPTest#test_imaps_verify_none = 0.19 s 6920s [3846/8505] IMAPTest#test_decode_utf7 = 0.00 s 6920s [3847/8505] IMAPTest#test_default_port = 0.00 s 6920s [3848/8505] IMAPTest#test_format_datetime = 0.00 s 6920s [3849/8505] IMAPTest#test_imaps_with_ca_file = 0.16 s 6920s [3850/8505] OpenSSL::TestX509Store#test_dup = 0.00 s 6920s [3851/8505] OpenSSL::TestX509Store#test_verify_purpose = 0.06 s 6920s [3852/8505] OpenSSL::TestX509Store#test_add_cert_duplicate = 0.00 s 6920s [3853/8505] OpenSSL::TestX509Store#test_ctx_cleanup = 0.00 s 6920s [3854/8505] OpenSSL::TestX509Store#test_verify_validity_period = 0.10 s 6920s [3855/8505] TestRDocAnyMethod#test_param_list_ampersand_param_block_params = 0.03 s 6920s [3856/8505] TestRDocAnyMethod#test_call_seq_returns_nil_if_alias_is_missing_from_call_seq = 0.02 s 6920s [3857/8505] TestRDocAnyMethod#test_call_seq_handles_aliases = 0.02 s 6920s [3858/8505] TestRDocAnyMethod#test_marshal_load_aliased_method_with_nil_singleton = 0.02 s 6920s [3859/8505] TestRDocAnyMethod#test_param_list_block_params = 0.02 s 6920s [3860/8505] TestRDocAnyMethod#test_arglists = 0.02 s 6920s [3861/8505] TestRDocAnyMethod#test_param_list_params_block_params = 0.03 s 6920s [3862/8505] TestRDocAnyMethod#test_param_seq_call_seq = 0.03 s 6920s [3863/8505] TestRDocAnyMethod#test_superclass_method_multilevel = 0.03 s 6920s [3864/8505] TestRDocAnyMethod#test_param_seq = 0.03 s 6920s [3865/8505] TestRDocAnyMethod#test_marshal_dump_version_2 = 0.03 s 6920s [3866/8505] TestRDocAnyMethod#test_call_seq_equals = 0.03 s 6920s [3867/8505] TestRDocAnyMethod#test_parent_name = 0.03 s 6920s [3868/8505] TestRDocAnyMethod#test_is_alias_for = 0.03 s 6921s [3869/8505] TestRDocAnyMethod#test_param_list_call_seq = 0.05 s 6921s [3870/8505] TestRDocAnyMethod#test_markup_code_empty = 0.02 s 6921s [3871/8505] TestRDocAnyMethod#test_param_list_params = 0.02 s 6921s [3872/8505] TestRDocAnyMethod#test_markup_code = 0.03 s 6921s [3873/8505] TestRDocAnyMethod#test_name_call_seq_dot = 0.03 s 6921s [3874/8505] TestRDocAnyMethod#test_param_list_ampersand_param = 0.02 s 6921s [3875/8505] TestRDocAnyMethod#test_superclass_method = 0.03 s 6921s [3876/8505] TestRDocAnyMethod#test_marshal_dump = 0.03 s 6921s [3877/8505] TestRDocAnyMethod#test_param_list_default = 0.02 s 6921s [3878/8505] TestRDocAnyMethod#test_param_list_empty_params_with_block = 0.02 s 6921s [3879/8505] TestRDocAnyMethod#test_marshal_load_version_0 = 0.03 s 6921s [3880/8505] TestRDocAnyMethod#test_store_equals = 0.02 s 6921s [3881/8505] TestRDocAnyMethod#test_aref = 0.02 s 6921s [3882/8505] TestRDocAnyMethod#test_full_name = 0.02 s 6921s [3883/8505] TestRDocAnyMethod#test_name = 0.03 s 6921s [3884/8505] TestRDocAnyMethod#test_marshal_load_instance_method = 0.03 s 6921s [3885/8505] TestRDocAnyMethod#test_c_function = 0.02 s 6921s [3886/8505] TestRDocAnyMethod#test_markup_code_with_variable_expansion = 0.02 s 6921s [3887/8505] TestRDocAnyMethod#test_marshal_load_aliased_method = 0.02 s 6921s [3888/8505] TestRDocAnyMethod#test_marshal_load_class_method = 0.02 s 6921s [3889/8505] TestRDocAnyMethod#test_name_call_seq = 0.02 s 6921s [3890/8505] TestRDocAnyMethod#test_markup_code_with_line_numbers = 0.03 s 6921s [3891/8505] URI::TestParser#test_parse = 0.02 s 6921s [3892/8505] URI::TestParser#test_inspect = 0.00 s 6921s [3893/8505] URI::TestParser#test_raise_bad_uri_for_integer = 0.00 s 6921s [3894/8505] URI::TestParser#test_parse_query_pct_encoded = 0.00 s 6921s [3895/8505] URI::TestParser#test_compare = 0.01 s 6921s [3896/8505] URI::TestParser#test_split = 0.00 s 6921s [3897/8505] URI::TestParser#test_parse_auth = 0.00 s 6921s [3898/8505] URI::TestParser#test_unescape = 0.00 s 6921s [3899/8505] TestIRB::TestCompletion#test_complete_symbol = 0.20 s 6921s [3900/8505] TestIRB::TestCompletion#test_complete_class_method = 0.01 s 6921s [3901/8505] TestIRB::TestCompletion#test_complete_variable = 0.01 s 6926s [3902/8505] TestIRB::TestCompletion#test_nonstring_module_name = 4.47 s 6926s [3903/8505] TestIRB::TestCompletion#test_complete_invalid_three_colons = 0.01 s 6926s [3904/8505] TestIRB::TestCompletion#test_complete_require = 0.22 s 6926s [3905/8505] TestIRB::TestCompletion#test_complete_numeric = 0.00 s 6926s [3906/8505] TestIRB::TestCompletion#test_complete_predicate? = 0.00 s 6926s [3907/8505] TestIRB::TestCompletion#test_complete_absolute_constants_with_special_characters = 0.01 s 6926s [3908/8505] TestIRB::TestCompletion#test_complete_symbol_failure = 0.06 s 6926s [3909/8505] TestIRB::TestCompletion#test_complete_reserved_words = 0.00 s 6926s [3910/8505] TestIRB::TestCompletion#test_complete_require_library_name_first = 0.00 s 6926s [3911/8505] TC_Enumerable#test_to_set = 0.00 s 6926s [3912/8505] TestFileUtilsDryRun#test_singleton_visibility_identical? = 0.00 s 6926s [3913/8505] TestFileUtilsDryRun#test_visibility_fu_windows? = 0.00 s 6926s [3914/8505] TestFileUtilsDryRun#test_visibility_chdir = 0.00 s 6926s [3915/8505] TestFileUtilsDryRun#test_visibility_move = 0.00 s 6926s [3916/8505] TestFileUtilsDryRun#test_visibility_cp = 0.00 s 6926s [3917/8505] TestFileUtilsDryRun#test_visibility_mkpath = 0.00 s 6926s [3918/8505] TestFileUtilsDryRun#test_singleton_visibility_cd = 0.00 s 6926s [3919/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_f = 0.00 s 6926s [3920/8505] TestFileUtilsDryRun#test_visibility_fu_stream_blksize = 0.00 s 6926s [3921/8505] TestFileUtilsDryRun#test_singleton_visibility_mkpath = 0.00 s 6926s [3922/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_blksize = 0.00 s 6926s [3923/8505] TestFileUtilsDryRun#test_singleton_visibility_getwd = 0.00 s 6926s [3924/8505] TestFileUtilsDryRun#test_visibility_safe_unlink = 0.00 s 6926s [3925/8505] TestFileUtilsDryRun#test_visibility_install = 0.00 s 6926s [3926/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_stream = 0.00 s 6926s [3927/8505] TestFileUtilsDryRun#test_visibility_rm_rf = 0.00 s 6926s [3928/8505] TestFileUtilsDryRun#test_visibility_cd = 0.00 s 6926s [3929/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_default_blksize = 0.00 s 6926s [3930/8505] TestFileUtilsDryRun#test_singleton_visibility_chown = 0.00 s 6926s [3931/8505] TestFileUtilsDryRun#test_visibility_copy = 0.00 s 6926s [3932/8505] TestFileUtilsDryRun#test_singleton_visibility_chown_R = 0.00 s 6926s [3933/8505] TestFileUtilsDryRun#test_visibility_symlink = 0.00 s 6926s [3934/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_file = 0.00 s 6926s [3935/8505] TestFileUtilsDryRun#test_visibility_touch = 0.00 s 6926s [3936/8505] TestFileUtilsDryRun#test_visibility_link = 0.00 s 6926s [3937/8505] TestFileUtilsDryRun#test_singleton_visibility_compare_file = 0.00 s 6926s [3938/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_r = 0.00 s 6926s [3939/8505] TestFileUtilsDryRun#test_singleton_visibility_makedirs = 0.00 s 6926s [3940/8505] TestFileUtilsDryRun#test_singleton_visibility_cp = 0.00 s 6926s [3941/8505] TestFileUtilsDryRun#test_visibility_link_entry = 0.00 s 6926s [3942/8505] TestFileUtilsDryRun#test_singleton_visibility_link = 0.00 s 6926s [3943/8505] TestFileUtilsDryRun#test_visibility_rm_r = 0.00 s 6926s [3944/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_file = 0.00 s 6926s [3945/8505] TestFileUtilsDryRun#test_visibility_copy_entry = 0.00 s 6926s [3946/8505] TestFileUtilsDryRun#test_visibility_uptodate? = 0.00 s 6926s [3947/8505] TestFileUtilsDryRun#test_visibility_makedirs = 0.00 s 6926s [3948/8505] TestFileUtilsDryRun#test_singleton_visibility_copy = 0.00 s 6926s [3949/8505] TestFileUtilsDryRun#test_visibility_mv = 0.00 s 6926s [3950/8505] TestFileUtilsDryRun#test_singleton_visibility_mkdir_p = 0.00 s 6926s [3951/8505] TestFileUtilsDryRun#test_visibility_chmod = 0.00 s 6926s [3952/8505] TestFileUtilsDryRun#test_visibility_fu_default_blksize = 0.00 s 6926s [3953/8505] TestFileUtilsDryRun#test_singleton_visibility_mv = 0.00 s 6926s [3954/8505] TestFileUtilsDryRun#test_visibility_remove = 0.00 s 6926s [3955/8505] TestFileUtilsDryRun#test_singleton_visibility_cp_lr = 0.00 s 6926s [3956/8505] TestFileUtilsDryRun#test_singleton_visibility_ln_sf = 0.00 s 6926s [3957/8505] TestFileUtilsDryRun#test_visibility_chmod_R = 0.00 s 6926s [3958/8505] TestFileUtilsDryRun#test_visibility_rm_f = 0.00 s 6926s [3959/8505] TestFileUtilsDryRun#test_visibility_compare_file = 0.00 s 6926s [3960/8505] TestFileUtilsDryRun#test_visibility_mkdir = 0.00 s 6926s [3961/8505] TestFileUtilsDryRun#test_singleton_visibility_remove = 0.00 s 6926s [3962/8505] TestFileUtilsDryRun#test_singleton_visibility_move = 0.00 s 6926s [3963/8505] TestFileUtilsDryRun#test_visibility_remove_dir = 0.00 s 6926s [3964/8505] TestFileUtilsDryRun#test_singleton_visibility_rmdir = 0.00 s 6926s [3965/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_dir = 0.00 s 6926s [3966/8505] TestFileUtilsDryRun#test_singleton_visibility_rm = 0.00 s 6926s [3967/8505] TestFileUtilsDryRun#test_singleton_visibility_compare_stream = 0.00 s 6926s [3968/8505] TestFileUtilsDryRun#test_visibility_pwd = 0.00 s 6926s [3969/8505] TestFileUtilsDryRun#test_visibility_getwd = 0.00 s 6926s [3970/8505] TestFileUtilsDryRun#test_visibility_copy_stream = 0.00 s 6926s [3971/8505] TestFileUtilsDryRun#test_singleton_visibility_cmp = 0.00 s 6926s [3972/8505] TestFileUtilsDryRun#test_singleton_visibility_symlink = 0.00 s 6926s [3973/8505] TestFileUtilsDryRun#test_visibility_chown_R = 0.00 s 6926s [3974/8505] TestFileUtilsDryRun#test_singleton_visibility_pwd = 0.00 s 6926s [3975/8505] TestFileUtilsDryRun#test_visibility_ln_s = 0.00 s 6926s [3976/8505] TestFileUtilsDryRun#test_singleton_visibility_ln = 0.00 s 6926s [3977/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_entry = 0.00 s 6926s [3978/8505] TestFileUtilsDryRun#test_singleton_visibility_chdir = 0.00 s 6926s [3979/8505] TestFileUtilsDryRun#test_singleton_visibility_remove_entry_secure = 0.00 s 6926s [3980/8505] TestFileUtilsDryRun#test_visibility_remove_file = 0.00 s 6926s [3981/8505] TestFileUtilsDryRun#test_visibility_cmp = 0.00 s 6926s [3982/8505] TestFileUtilsDryRun#test_visibility_ln = 0.00 s 6926s [3983/8505] TestFileUtilsDryRun#test_singleton_visibility_touch = 0.00 s 6926s [3984/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_windows? = 0.00 s 6926s [3985/8505] TestFileUtilsDryRun#test_visibility_chown = 0.00 s 6926s [3986/8505] TestFileUtilsDryRun#test_singleton_visibility_safe_unlink = 0.00 s 6926s [3987/8505] TestFileUtilsDryRun#test_visibility_rm = 0.00 s 6926s [3988/8505] TestFileUtilsDryRun#test_singleton_visibility_rm_rf = 0.00 s 6926s [3989/8505] TestFileUtilsDryRun#test_singleton_visibility_copy_entry = 0.00 s 6926s [3990/8505] TestFileUtilsDryRun#test_singleton_visibility_install = 0.00 s 6926s [3991/8505] TestFileUtilsDryRun#test_visibility_cp_r = 0.00 s 6926s [3992/8505] TestFileUtilsDryRun#test_singleton_visibility_link_entry = 0.00 s 6926s [3993/8505] TestFileUtilsDryRun#test_visibility_remove_entry = 0.00 s 6926s [3994/8505] TestFileUtilsDryRun#test_visibility_rmtree = 0.00 s 6926s [3995/8505] TestFileUtilsDryRun#test_singleton_visibility_cp_r = 0.00 s 6926s [3996/8505] TestFileUtilsDryRun#test_singleton_visibility_chmod = 0.00 s 6926s [3997/8505] TestFileUtilsDryRun#test_singleton_visibility_chmod_R = 0.00 s 6926s [3998/8505] TestFileUtilsDryRun#test_visibility_copy_file = 0.00 s 6926s [3999/8505] TestFileUtilsDryRun#test_singleton_visibility_uptodate? = 0.00 s 6926s [4000/8505] TestFileUtilsDryRun#test_singleton_visibility_rmtree = 0.00 s 6926s [4001/8505] TestFileUtilsDryRun#test_visibility_remove_entry_secure = 0.00 s 6926s [4002/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_copy_stream0 = 0.00 s 6926s [4003/8505] TestFileUtilsDryRun#test_visibility_fu_blksize = 0.00 s 6926s [4004/8505] TestFileUtilsDryRun#test_visibility_rmdir = 0.00 s 6926s [4005/8505] TestFileUtilsDryRun#test_singleton_visibility_ln_s = 0.00 s 6926s [4006/8505] TestFileUtilsDryRun#test_visibility_compare_stream = 0.00 s 6926s [4007/8505] TestFileUtilsDryRun#test_singleton_visibility_fu_stream_blksize = 0.00 s 6926s [4008/8505] TestFileUtilsDryRun#test_singleton_visibility_mkdir = 0.00 s 6926s [4009/8505] TestFileUtilsDryRun#test_visibility_ln_sf = 0.00 s 6926s [4010/8505] TestFileUtilsDryRun#test_visibility_cp_lr = 0.00 s 6926s [4011/8505] TestFileUtilsDryRun#test_visibility_fu_copy_stream0 = 0.00 s 6926s [4012/8505] TestFileUtilsDryRun#test_visibility_identical? = 0.00 s 6926s [4013/8505] TestFileUtilsDryRun#test_visibility_mkdir_p = 0.00 s 6926s [4014/8505] TestRDocRdInline#test_inspect = 0.00 s 6926s [4015/8505] TestRDocRdInline#test_append_inline = 0.00 s 6926s [4016/8505] TestRDocRdInline#test_class_new = 0.00 s 6926s [4017/8505] TestRDocRdInline#test_equals2 = 0.00 s 6926s [4018/8505] TestRDocRdInline#test_append_string = 0.00 s 6926s [4019/8505] TestRDocRdInline#test_initialize_inline = 0.00 s 6926s [4020/8505] TestRDocRdInline#test_initialize = 0.00 s 6926s [4021/8505] TestRDocRdInline#test_to_s = 0.00 s 6926s [4022/8505] Psych::Visitors::TestToRuby#test_struct = 0.00 s 6926s [4023/8505] Psych::Visitors::TestToRuby#test_tz_00_00_loads_without_error = 0.00 s 6926s [4024/8505] Psych::Visitors::TestToRuby#test_alias = 0.00 s 6926s [4025/8505] Psych::Visitors::TestToRuby#test_boolean_false = 0.00 s 6926s [4026/8505] Psych::Visitors::TestToRuby#test_rational_string = 0.00 s 6926s [4027/8505] Psych::Visitors::TestToRuby#test_date = 0.00 s 6926s [4028/8505] Psych::Visitors::TestToRuby#test_anon_struct = 0.00 s 6926s [4029/8505] Psych::Visitors::TestToRuby#test_rational = 0.00 s 6926s [4030/8505] Psych::Visitors::TestToRuby#test_anon_struct_legacy = 0.00 s 6926s [4031/8505] Psych::Visitors::TestToRuby#test_range_string_triple = 0.01 s 6926s [4032/8505] Psych::Visitors::TestToRuby#test_int_ignore = 0.00 s 6926s [4033/8505] Psych::Visitors::TestToRuby#test_time = 0.00 s 6926s [4034/8505] Psych::Visitors::TestToRuby#test_mapping_with_str_tag = 0.00 s 6926s [4035/8505] Psych::Visitors::TestToRuby#test_regexp = 0.00 s 6926s [4036/8505] Psych::Visitors::TestToRuby#test_exception = 0.00 s 6926s [4037/8505] Psych::Visitors::TestToRuby#test_float = 0.00 s 6926s [4038/8505] Psych::Visitors::TestToRuby#test_range_string = 0.00 s 6926s [4039/8505] Psych::Visitors::TestToRuby#test_object = 0.00 s 6926s [4040/8505] Psych::Visitors::TestToRuby#test_stream = 0.01 s 6926s [4041/8505] Psych::Visitors::TestToRuby#test_float_ignore = 0.00 s 6926s [4042/8505] Psych::Visitors::TestToRuby#test_binary = 0.01 s 6926s [4043/8505] Psych::Visitors::TestToRuby#test_complex = 0.00 s 6926s [4044/8505] Psych::Visitors::TestToRuby#test_time_utc_no_z = 0.00 s 6926s [4045/8505] Psych::Visitors::TestToRuby#test_boolean_true = 0.00 s 6926s [4046/8505] Psych::Visitors::TestToRuby#test_legacy_struct = 0.00 s 6926s [4047/8505] Psych::Visitors::TestToRuby#test_scalar = 0.00 s 6926s [4048/8505] Psych::Visitors::TestToRuby#test_integer = 0.00 s 6926s [4049/8505] Psych::Visitors::TestToRuby#test_complex_string = 0.00 s 6926s [4050/8505] Psych::Visitors::TestToRuby#test_time_utc = 0.00 s 6926s [4051/8505] Psych::Visitors::TestToRuby#test_mapping = 0.00 s 6926s [4052/8505] Psych::Visitors::TestToRuby#test_document = 0.00 s 6926s [4053/8505] Psych::Visitors::TestToRuby#test_sequence = 0.00 s 6926s [4054/8505] Psych::Visitors::TestToRuby#test_exp_float = 0.00 s 6926s [4055/8505] Psych::TestTreeBuilder#test_alias = 0.00 s 6926s [4056/8505] Psych::TestTreeBuilder#test_stream = 0.00 s 6926s [4057/8505] Psych::TestTreeBuilder#test_scalar = 0.00 s 6926s [4058/8505] Psych::TestTreeBuilder#test_mapping = 0.00 s 6926s [4059/8505] Psych::TestTreeBuilder#test_sequence = 0.00 s 6926s [4060/8505] TestCSVParseLiberalParsing#test_space_quote = 0.00 s 6926s [4061/8505] TestCSVParseLiberalParsing#test_middle_quote_end = 0.00 s 6926s [4062/8505] TestCSVParseLiberalParsing#test_double_quote_outside_quote = 0.00 s 6926s [4063/8505] TestCSVParseLiberalParsing#test_middle_quote_start = 0.01 s 6926s [4064/8505] TestCSVParseLiberalParsing#test_quote_after_column_separator = 0.01 s 6926s [4065/8505] TestCSVParseLiberalParsing#test_backslash_quote = 0.00 s 6926s [4066/8505] TestCSVParseLiberalParsing#test_quote_before_column_separator = 0.00 s 6926s [4067/8505] TestCSVParseRewind#test_default = 0.00 s 6926s [4068/8505] TestCSVParseRewind#test_have_headers = 0.00 s 6926s [4069/8505] TestZlibGzipFile#test_os_code = 0.00 s 6926s [4070/8505] TestZlibGzipFile#test_level = 0.00 s 6926s [4071/8505] TestZlibGzipFile#test_to_io = 0.00 s 6926s [4072/8505] TestZlibGzipFile#test_closed_p = 0.00 s 6926s [4073/8505] TestZlibGzipFile#test_crc = 0.00 s 6926s [4074/8505] TestZlibGzipFile#test_orig_name = 0.00 s 6926s [4075/8505] TestZlibGzipFile#test_pos = 0.00 s 6926s [4076/8505] TestZlibGzipFile#test_path = 0.00 s 6926s [4077/8505] TestZlibGzipFile#test_sync = 0.00 s 6926s [4078/8505] TestZlibGzipFile#test_comment = 0.00 s 6926s [4079/8505] TestZlibGzipFile#test_gzip_reader_zcat = 0.00 s 6926s [4080/8505] TestZlibGzipFile#test_lineno = 0.01 s 6926s [4081/8505] Psych::TestOmap#test_self_referential = 0.00 s 6926s [4082/8505] Psych::TestOmap#test_dump = 0.00 s 6926s [4083/8505] Psych::TestOmap#test_order = 0.00 s 6926s [4084/8505] Psych::TestOmap#test_square = 0.00 s 6926s [4085/8505] Psych::TestOmap#test_parse_as_map = 0.00 s 6926s [4086/8505] Psych::TestOmap#test_load_shorthand = 0.00 s 6926s [4087/8505] Psych::TestOmap#test_load = 0.00 s 6926s [4088/8505] Psych::TestOmap#test_round_trip = 0.01 s 6926s [4089/8505] Psych::TestOmap#test_keys = 0.00 s 6926s [4090/8505] Psych::TestAliasAndAnchor#test_mri_compatibility_substring_with_ivars = 0.01 s 6926s [4091/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip_object_with_ivars = 0.00 s 6926s [4092/8505] Psych::TestAliasAndAnchor#test_mri_compatibility_object_with_ivars = 0.00 s 6926s [4093/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip_substring_with_ivars = 0.01 s 6926s [4094/8505] Psych::TestAliasAndAnchor#test_mri_compatibility = 0.00 s 6926s [4095/8505] Psych::TestAliasAndAnchor#test_anchor_alias_round_trip = 0.01 s 6934s [4096/8505] TestIO_Console#test_stringio_getch = 8.12 s 6934s [4097/8505] TestIO_Console#test_cursor_position = 0.00 s 6934s [4098/8505] TestIO_Console#test_sync = 0.00 s 6935s [4099/8505] TestIO_Console#test_set_winsize_invalid_dev = 0.02 s 6935s [4100/8505] TestIO_Console#test_intr = 0.00 s 6935s [4101/8505] TestIO_Console#test_getpass = 0.01 s 6935s [4102/8505] TestIO_Console#test_failed_path = 0.01 s 6935s [4103/8505] TestIO_Console#test_close = 0.00 s 6935s [4104/8505] OpenSSL::TestPKeyDSA#test_DSAPrivateKey = 0.01 s 6935s [4105/8505] OpenSSL::TestPKeyDSA#test_sign_verify = 0.00 s 6935s [4106/8505] OpenSSL::TestPKeyDSA#test_dup = 0.00 s 6935s [4107/8505] OpenSSL::TestPKeyDSA#test_marshal = 0.00 s 6935s [4108/8505] OpenSSL::TestPKeyDSA#test_DSAPrivateKey_encrypted = 0.00 s 6935s [4109/8505] OpenSSL::TestPKCS7#test_enveloped = 0.02 s 6935s [4110/8505] OpenSSL::TestPKCS7#test_degenerate_pkcs7 = 0.01 s 6935s [4111/8505] OpenSSL::TestPKCS7#test_set_type_enveloped = 0.01 s 6935s [4112/8505] OpenSSL::TestPKCS7#test_set_type_encrypted = 0.01 s 6935s [4113/8505] OpenSSL::TestPKCS7#test_set_type_signed = 0.01 s 6935s [4114/8505] OpenSSL::TestPKCS7#test_set_type_signed_and_enveloped = 0.01 s 6935s [4115/8505] OpenSSL::TestPKCS7#test_signed = 0.02 s 6935s [4116/8505] OpenSSL::TestPKCS7#test_set_type_data = 0.01 s 6935s [4117/8505] OpenSSL::TestPKCS7#test_detached_sign = 0.01 s 6935s [4118/8505] OpenSSL::TestPKCS7#test_split_content = 0.02 s 6935s [4119/8505] OpenSSL::TestX509Request#test_sign_and_verify_rsa_md5OpenSSL::X509::Request#version= has no effect on certification request 6935s = 0.01 s 6935s [4120/8505] OpenSSL::TestX509Request#test_public_keyOpenSSL::X509::Request#version= has no effect on certification request 6935s OpenSSL::X509::Request#version= has no effect on certification request 6935s = 0.01 s 6935s [4121/8505] OpenSSL::TestX509Request#test_sign_and_verify_dsaOpenSSL::X509::Request#version= has no effect on certification request 6935s = 0.00 s 6935s [4122/8505] OpenSSL::TestX509Request#test_sign_and_verify_dsa_md5OpenSSL::X509::Request#version= has no effect on certification request 6935s = 0.00 s 6935s [4123/8505] OpenSSL::TestX509Request#test_subject = 0.00 s 6935s [4124/8505] TestFiberMutex#test_mutex_threadOpenSSL::X509::Request#version= has no effect on certification request 6935s = 0.20 s 6935s [4125/8505] TestFiberMutex#test_mutex_interleaved_locking = 0.20 s 6935s [4126/8505] TestFiberMutex#test_queue = 0.31 s 6935s [4127/8505] TestFiberMutex#test_mutex_synchronize = 0.00 s 6935s [4128/8505] TestRipper::Ripper#test_parse = 0.00 s 6935s [4129/8505] TestRipper::Ripper#test_yydebug_equals = 0.00 s 6935s [4130/8505] TestRipper::Ripper#test_end_seen_eh = 0.00 s 6935s [4131/8505] TestRipper::Ripper#test_encoding = 0.00 s 6935s [4132/8505] TestRipper::Ripper#test_column = 0.00 s 6935s [4133/8505] TestRipper::Ripper#test_yydebug = 0.00 s 6935s [4134/8505] TestRipper::Ripper#test_state = 0.00 s 6935s [4135/8505] TestRipper::Ripper#test_regexp_with_option = 0.00 s 6935s [4136/8505] TestRipper::Ripper#test_dedent_string = 0.01 s 6935s [4137/8505] TestRipper::Ripper#test_filename = 0.00 s 6939s [4138/8505] TestRipper::Ripper#test_regexp_enc_error = 3.64 s 6939s [4139/8505] TestRipper::Ripper#test_lineno = 0.00 s 6939s [4140/8505] TestPsych#test_safe_dump_symbols = 0.02 s 6939s [4141/8505] TestPsych#test_parse_stream_with_block = 0.01 s 6939s [4142/8505] TestPsych#test_parse = 0.00 s 6939s [4143/8505] TestPsych#test_parse_stream_default_fallback = 0.00 s 6939s [4144/8505] TestPsych#test_header = 0.01 s 6939s [4145/8505] TestPsych#test_domain_types = 0.00 s 6939s [4146/8505] TestPsych#test_line_width_invalid = 0.00 s 6939s [4147/8505] TestPsych#test_load_file_with_fallback_nil_or_false = 0.00 s 6939s [4148/8505] TestPsych#test_load_file_with_fallback = 0.00 s 6939s [4149/8505] TestPsych#test_load_file_freeze = 0.00 s 6939s [4150/8505] TestPsych#test_version_array = 0.00 s 6939s [4151/8505] TestPsych#test_libyaml_version = 0.00 s 6939s [4152/8505] TestPsych#test_safe_dump_unpermitted_class = 0.00 s 6939s [4153/8505] TestPsych#test_safe_load_file_with_permitted_classe = 0.01 s 6939s [4154/8505] TestPsych#test_load_file_with_fallback_for_nil = 0.00 s 6939s [4155/8505] TestPsych#test_callbacks = 0.00 s 6939s [4156/8505] TestPsych#test_symbolize_names = 0.00 s 6939s [4157/8505] TestPsych#test_indent = 0.01 s 6939s [4158/8505] TestPsych#test_load_file_default_fallback = 0.00 s 6939s [4159/8505] TestPsych#test_parse_file_default_fallback = 0.00 s 6939s [4160/8505] TestPsych#test_line_width_no_limit = 0.00 s 6939s [4161/8505] TestPsych#test_parse_stream_with_block_default_fallback = 0.00 s 6939s [4162/8505] TestPsych#test_load_default_fallback = 0.00 s 6939s [4163/8505] TestPsych#test_dump_stream = 0.00 s 6939s [4164/8505] TestPsych#test_load_with_fallback_for_false = 0.00 s 6939s [4165/8505] TestPsych#test_safe_dump_defaults = 0.00 s 6939s [4166/8505] TestPsych#test_load_file_with_fallback_for_false = 0.00 s 6939s [4167/8505] TestPsych#test_load_with_fallback_hash = 0.00 s 6939s [4168/8505] TestPsych#test_parse_raises_on_bad_input = 0.00 s 6939s [4169/8505] TestPsych#test_simple = 0.00 s 6939s [4170/8505] TestPsych#test_line_width_limit = 0.00 s 6939s [4171/8505] TestPsych#test_canonical = 0.01 s 6939s [4172/8505] TestPsych#test_load_file_symbolize_names = 0.00 s 6939s [4173/8505] TestPsych#test_load_with_fallback_for_nil = 0.00 s 6939s [4174/8505] TestPsych#test_load_argument_error = 0.00 s 6939s [4175/8505] TestPsych#test_non_existing_class_on_deserialize = 0.01 s 6939s [4176/8505] TestPsych#test_load_stream_default_fallback = 0.00 s 6939s [4177/8505] TestPsych#test_load_with_fallback_nil_or_false = 0.00 s 6939s [4178/8505] TestPsych#test_load_file = 0.00 s 6939s [4179/8505] TestPsych#test_load_stream_freeze = 0.00 s 6939s [4180/8505] TestPsych#test_safe_dump_extra_permitted_classes = 0.01 s 6939s [4181/8505] TestPsych#test_safe_dump_aliases = 0.00 s 6939s [4182/8505] TestPsych#test_load_with_fallback = 0.00 s 6939s [4183/8505] TestPsych#test_load_stream_symbolize_names = 0.00 s 6939s [4184/8505] TestPsych#test_version_bool = 0.00 s 6939s [4185/8505] TestPsych#test_add_builtin_type = 0.00 s 6939s [4186/8505] TestPsych#test_parse_default_fallback = 0.00 s 6939s [4187/8505] TestPsych#test_parse_stream = 0.00 s 6939s [4188/8505] TestPsych#test_parse_stream_raises_on_bad_input = 0.00 s 6939s [4189/8505] TestPsych#test_dump_file = 0.00 s 6939s [4190/8505] TestPsych#test_load_stream_raises_on_bad_input = 0.00 s 6939s [4191/8505] TestPsych#test_dump_io = 0.00 s 6939s [4192/8505] TestPsych#test_parse_file = 0.00 s 6939s [4193/8505] TestPsych#test_version_string = 0.00 s 6939s [4194/8505] TestPsych#test_degenerate_strings = 0.00 s 6939s [4195/8505] TestPsych#test_load_file_with_fallback_hash = 0.00 s 6939s [4196/8505] TestPsych#test_load_stream = 0.00 s 6939s [4197/8505] TestOptionParser::ReqArg::Def1#test_into = 0.01 s 6939s [4198/8505] TestOptionParser::ReqArg::Def1#test_nonopt_pattern = 0.01 s 6939s [4199/8505] TestOptionParser::ReqArg::Def1#test_order = 0.00 s 6939s [4200/8505] TestOptionParser::ReqArg::Def1#test_abbrev = 0.01 s 6939s [4201/8505] TestOptionParser::ReqArg::Def1#test_regexp = 0.00 s 6939s [4202/8505] TestOptionParser::ReqArg::Def1#test_hyphenize = 0.00 s 6939s [4203/8505] TestOptionParser::ReqArg::Def1#test_short = 0.00 s 6939s [4204/8505] TestOptionParser::ReqArg::Def1#test_long = 0.00 s 6939s [4205/8505] TestOptionParser::ReqArg::Def1#test_permute = 0.01 s 6939s [4206/8505] TestOptionParser::ReqArg::Def1#test_require_exact = 0.01 s 6939s [4207/8505] TestSH#test_commercial = 0.01 s 6939s [4208/8505] TestSH#test_marshal192 = 0.00 s 6939s [4209/8505] TestSH#test_inspect = 0.00 s 6939s [4210/8505] TestSH#test_dup = 0.00 s 6939s [4211/8505] TestSH#test_eqeqeq = 0.00 s 6939s [4212/8505] TestSH#test_jd = 0.00 s 6939s [4213/8505] TestSH#test_ordinal = 0.01 s 6939s [4214/8505] TestSH#test_fractional = 0.00 s 6939s [4215/8505] TestSH#test_cmp = 0.00 s 6939s [4216/8505] TestSH#test_canon24oc = 0.00 s 6939s [4217/8505] TestSH#test_different_alignments = 0.00 s 6939s [4218/8505] TestSH#test_new = 0.01 s 6939s [4219/8505] TestSH#test_enc = 0.01 s 6939s [4220/8505] TestSH#test_marshal14 = 0.00 s 6939s [4221/8505] TestSH#test_marshal16 = 0.01 s 6939s [4222/8505] TestSH#test_period = 0.00 s 6939s [4223/8505] TestSH#test_marshal18 = 0.00 s 6939s [4224/8505] TestSH#test_zone = 0.00 s 6939s [4225/8505] TestSH#test_to_s = 0.00 s 6939s [4226/8505] TestOptionParser::KwArg#test_kwarg = 0.01 s 6939s [4227/8505] TestOptionParser#test_into = 0.00 s 6939s [4228/8505] TestOptionParser#test_nonopt_pattern = 0.00 s 6939s [4229/8505] TestOptionParser#test_order = 0.00 s 6939s [4230/8505] TestOptionParser#test_regexp = 0.00 s 6939s [4231/8505] TestOptionParser#test_permute = 0.00 s 6939s [4232/8505] TestOptionParser#test_require_exact = 0.01 s 6939s [4233/8505] TestAddressResolve#test_addrinfo_getaddrinfo_no_host_non_blocking = 0.00 s 6940s [4234/8505] TestAddressResolve#test_addrinfo_getaddrinfo_non_existing_domain_blocking = 0.17 s 6940s [4235/8505] TestAddressResolve#test_addrinfo_getaddrinfo_numeric_non_blocking = 0.00 s 6940s [4236/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_unquoted_value_multiple_characters_col_sep = 0.00 s 6940s [4237/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_double_quote_outside_quote = 0.06 s 6940s [4238/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_quoted_value = 0.00 s 6940s [4239/8505] TestCSVParseLiberalParsing::TestBackslashQuote#test_unquoted_value = 0.00 s 6940s [4240/8505] Reline::Unicode::Test#test_take_range = 0.01 s 6940s [4241/8505] Reline::Unicode::Test#test_ambiguous_width = 0.00 s 6940s [4242/8505] Reline::Unicode::Test#test_get_mbchar_width = 0.00 s 6940s [4243/8505] TestSocketNonblock#test_sendmsg_nonblock_error = 0.00 s 6940s [4244/8505] TestSocketNonblock#test_recv_nonblock_error = 0.00 s 6940s [4245/8505] TestSocketNonblock#test_sendmsg_nonblock_no_exception = 0.00 s 6940s [4246/8505] TestSocketNonblock#test_read_nonblock_no_exception = 0.00 s 6940s [4247/8505] TestSocketNonblock#test_read_nonblock = 0.00 s 6940s [4248/8505] TestSocketNonblock#test_sendmsg_nonblock_seqpacket = 0.00 s 6940s [4249/8505] TestSocketNonblock#test_connect_nonblock_error = 0.00 s 6940s [4250/8505] TestRDocMarkupHardBreak#test_equals2 = 0.00 s 6940s [4251/8505] TestRDocMarkupHardBreak#test_accept = 0.00 s 6940s [4252/8505] TestDateStrftime#test_strftime__gnuext_LN = 0.00 s 6940s [4253/8505] TestDateStrftime#test_strftime__gnuext = 0.00 s 6940s [4254/8505] TestDateStrftime#test_strftime__3_2 = 0.32 s 6940s [4255/8505] TestDateStrftime#test_strftime__4 = 0.01 s 6940s [4256/8505] TestDateStrftime#test_overflow = 0.00 s 6940s [4257/8505] TestDateStrftime#test_strftime__2 = 0.00 s 6940s [4258/8505] TestDateStrftime#test_strftime__minus = 0.00 s 6941s [4259/8505] TestDateStrftime#test_strftime__3_1 = 0.50 s 6941s [4260/8505] TestDateStrftime#test_strftime__gnuext_z = 0.00 s 6941s [4261/8505] TestDateStrftime#test_strftime_milli = 0.00 s 6941s [4262/8505] TestDateStrftime#test_strftime = 0.03 s 6941s [4263/8505] TestOptionParser::ReqArg::Def3#test_into = 0.01 s 6941s [4264/8505] TestOptionParser::ReqArg::Def3#test_nonopt_pattern = 0.01 s 6941s [4265/8505] TestOptionParser::ReqArg::Def3#test_order = 0.01 s 6941s [4266/8505] TestOptionParser::ReqArg::Def3#test_abbrev = 0.01 s 6941s [4267/8505] TestOptionParser::ReqArg::Def3#test_regexp = 0.01 s 6941s [4268/8505] TestOptionParser::ReqArg::Def3#test_hyphenize = 0.01 s 6941s [4269/8505] TestOptionParser::ReqArg::Def3#test_short = 0.00 s 6941s [4270/8505] TestOptionParser::ReqArg::Def3#test_long = 0.01 s 6941s [4271/8505] TestOptionParser::ReqArg::Def3#test_permute = 0.01 s 6941s [4272/8505] TestOptionParser::ReqArg::Def3#test_require_exact = 0.02 s 6941s [4273/8505] TestDigestExtend::DifferentOFS#test_digest = 0.01 s 6941s [4274/8505] TestDigestExtend::DifferentOFS#test_digest_s_hexencode = 0.01 s 6941s [4275/8505] TestDigestExtend::DifferentOFS#test_digest_length = 0.00 s 6941s [4276/8505] TestDigestExtend::DifferentOFS#test_length = 0.00 s 6941s [4277/8505] TestDigestExtend::DifferentOFS#test_block_length = 0.00 s 6941s [4278/8505] TestDigestExtend::DifferentOFS#test_new = 0.01 s 6941s [4279/8505] TestDigestExtend::DifferentOFS#test_hexdigest = 0.00 s 6941s [4280/8505] TestDigestExtend::DifferentOFS#test_context = 0.01 s 6941s [4281/8505] TestDigestExtend::DifferentOFS#test_class_reset = 0.00 s 6941s [4282/8505] TestDigestExtend::DifferentOFS#test_digest_hexdigest = 0.01 s 6941s [4283/8505] TestDigestExtend::DifferentOFS#test_to_s = 0.00 s 6941s [4284/8505] TestDigestExtend::DifferentOFS#test_digest_hexdigest_bang = 0.00 s 6941s [4285/8505] TestCSVParseRowSeparator::DifferentOFS#test_multiple_characters = 0.01 s 6941s [4286/8505] TestRipper::ScannerEvents#test_int = 0.01 s 6941s [4287/8505] TestRipper::ScannerEvents#test_embdoc_end = 0.00 s 6941s [4288/8505] TestRipper::ScannerEvents#test_rparen = 0.00 s 6941s [4289/8505] TestRipper::ScannerEvents#test_heredoc_beg = 0.00 s 6941s [4290/8505] TestRipper::ScannerEvents#test_ident = 0.01 s 6941s [4291/8505] TestRipper::ScannerEvents#test_tstring_content = 0.00 s 6941s [4292/8505] TestRipper::ScannerEvents#test_ivar = 0.00 s 6941s [4293/8505] TestRipper::ScannerEvents#test_op = 0.01 s 6941s [4294/8505] TestRipper::ScannerEvents#test___end__ = 0.00 s 6941s [4295/8505] TestRipper::ScannerEvents#test_tokenize = 0.01 s 6941s [4296/8505] TestRipper::ScannerEvents#test_tstring_beg = 0.00 s 6941s [4297/8505] TestRipper::ScannerEvents#test_ignored_sp = 0.00 s 6941s [4298/8505] TestRipper::ScannerEvents#test_cvar = 0.00 s 6941s [4299/8505] TestRipper::ScannerEvents#test_const = 0.00 s 6941s [4300/8505] TestRipper::ScannerEvents#test_embvar = 0.00 s 6941s [4301/8505] TestRipper::ScannerEvents#test_embexpr_beg = 0.00 s 6941s [4302/8505] TestRipper::ScannerEvents#test_embdoc = 0.00 s 6941s [4303/8505] TestRipper::ScannerEvents#test_rational = 0.00 s 6941s [4304/8505] TestRipper::ScannerEvents#test_lbrace = 0.01 s 6941s [4305/8505] TestRipper::ScannerEvents#test_kw = 0.01 s 6941s [4306/8505] TestRipper::ScannerEvents#test_tlambda_arg = 0.00 s 6941s [4307/8505] TestRipper::ScannerEvents#test_imaginary = 0.00 s 6941s [4308/8505] TestRipper::ScannerEvents#test_qwords_beg = 0.00 s 6941s [4309/8505] TestRipper::ScannerEvents#test_float = 0.00 s 6941s [4310/8505] TestRipper::ScannerEvents#test_regexp_beg = 0.00 s 6941s [4311/8505] TestRipper::ScannerEvents#test_ignored_nl = 0.00 s 6941s [4312/8505] TestRipper::ScannerEvents#test_tlambeg = 0.00 s 6941s [4313/8505] TestRipper::ScannerEvents#test_qsymbols_beg = 0.00 s 6941s [4314/8505] TestRipper::ScannerEvents#test_symbeg = 0.00 s 6941s [4315/8505] TestRipper::ScannerEvents#test_comma = 0.00 s 6941s [4316/8505] TestRipper::ScannerEvents#test_embexpr_end = 0.00 s 6941s [4317/8505] TestRipper::ScannerEvents#test_label_end = 0.00 s 6941s [4318/8505] TestRipper::ScannerEvents#test_invalid_hex_escape = 0.00 s 6941s [4319/8505] TestRipper::ScannerEvents#test_tstring_end = 0.00 s 6941s [4320/8505] TestRipper::ScannerEvents#test_backref = 0.00 s 6941s [4321/8505] TestRipper::ScannerEvents#test_words_sep = 0.00 s 6941s [4322/8505] TestRipper::ScannerEvents#test_lex = 0.01 s 6941s [4323/8505] TestRipper::ScannerEvents#test_lbracket = 0.00 s 6941s [4324/8505] TestRipper::ScannerEvents#test_lparen = 0.00 s 6941s [4325/8505] TestRipper::ScannerEvents#test_location = 0.01 s 6941s [4326/8505] TestRipper::ScannerEvents#test_embdoc_beg = 0.00 s 6941s [4327/8505] TestRipper::ScannerEvents#test_sp = 0.01 s 6941s [4328/8505] TestRipper::ScannerEvents#test_tlambda = 0.00 s 6941s [4329/8505] TestRipper::ScannerEvents#test_heredoc_end = 0.00 s 6941s [4330/8505] TestRipper::ScannerEvents#test_tstring_content_HEREDOC = 0.00 s 6941s [4331/8505] TestRipper::ScannerEvents#test_words_beg = 0.00 s 6941s [4332/8505] TestRipper::ScannerEvents#test_period = 0.00 s 6941s [4333/8505] TestRipper::ScannerEvents#test_comment = 0.00 s 6941s [4334/8505] TestRipper::ScannerEvents#test_regexp_end = 0.00 s 6941s [4335/8505] TestRipper::ScannerEvents#test_rbrace = 0.00 s 6941s [4336/8505] TestRipper::ScannerEvents#test_nl = 0.00 s 6941s [4337/8505] TestRipper::ScannerEvents#test_label = 0.00 s 6941s [4338/8505] TestRipper::ScannerEvents#test_gvar = 0.00 s 6941s [4339/8505] TestRipper::ScannerEvents#test_backtick = 0.00 s 6941s [4340/8505] TestRipper::ScannerEvents#test_symbols_beg = 0.00 s 6941s [4341/8505] TestRipper::ScannerEvents#test_semicolon = 0.00 s 6941s [4342/8505] TestRipper::ScannerEvents#test_rbracket = 0.00 s 6941s [4343/8505] PPTestModule::PPInspectTest#test_hasinspect = 0.00 s 6941s [4344/8505] PPTestModule::PPInspectTest#test_hasprettyprint = 0.00 s 6941s [4345/8505] PPTestModule::PPInspectTest#test_hasboth = 0.00 s 6941s [4346/8505] PPTestModule::PPInspectTest#test_pretty_print_inspect = 0.01 s 6941s [4347/8505] Psych::TestScalarScanner#test_scan_int_commas_and_underscores = 0.01 s 6941s [4348/8505] Psych::TestScalarScanner#test_scan_strict_int_commas_and_underscores = 0.00 s 6941s [4349/8505] Psych::TestScalarScanner#test_scan_plus_dot = 0.00 s 6941s [4350/8505] Psych::TestScalarScanner#test_scan_float_with_exponent_but_no_fraction = 0.00 s 6941s [4351/8505] Psych::TestScalarScanner#test_scan_unicode_matches_quickly = 0.00 s 6941s [4352/8505] Psych::TestScalarScanner#test_scan_sexagesimal_int = 0.00 s 6941s [4353/8505] Psych::TestScalarScanner#test_scan_null = 0.00 s 6941s [4354/8505] Psych::TestScalarScanner#test_scan_strings_starting_with_number = 0.00 s 6941s [4355/8505] Psych::TestScalarScanner#test_scan_strings_starting_with_underscores = 0.00 s 6941s [4356/8505] Psych::TestScalarScanner#test_scan_sexagesimal_float = 0.00 s 6941s [4357/8505] Psych::TestScalarScanner#test_scan_nan = 0.00 s 6941s [4358/8505] Psych::TestScalarScanner#test_scan_symbol = 0.00 s 6941s [4359/8505] Psych::TestScalarScanner#test_scan_bad_dates = 0.00 s 6941s [4360/8505] Psych::TestScalarScanner#test_scan_plus_inf = 0.00 s 6941s [4361/8505] Psych::TestScalarScanner#test_scan_time = 0.00 s 6941s [4362/8505] Psych::TestScalarScanner#test_scan_strings_ending_with_underscores = 0.00 s 6941s [4363/8505] Psych::TestScalarScanner#test_scan_bad_time = 0.01 s 6941s [4364/8505] Psych::TestScalarScanner#test_scan_float = 0.00 s 6941s [4365/8505] Psych::TestScalarScanner#test_scan_not_sexagesimal = 0.00 s 6941s [4366/8505] Psych::TestScalarScanner#test_scan_inf = 0.00 s 6941s [4367/8505] Psych::TestScalarScanner#test_scan_bad_edge_date = 0.01 s 6941s [4368/8505] Psych::TestScalarScanner#test_scan_ascii_matches_quickly = 0.00 s 6941s [4369/8505] Psych::TestScalarScanner#test_scan_dot = 0.00 s 6941s [4370/8505] Psych::TestScalarScanner#test_scan_date = 0.00 s 6941s [4371/8505] Psych::TestScalarScanner#test_scan_minus_inf = 0.00 s 6941s [4372/8505] Psych::TestScalarScanner#test_scan_true = 0.00 s 6941s [4373/8505] Psych::TestScalarScanner#test_scan_good_edge_date = 0.00 s 6941s [4374/8505] Psych_Unit_Tests#test_ruby_rational = 0.02 s 6941s [4375/8505] Psych_Unit_Tests#test_spec_complex_invoice = 0.02 s 6941s [4376/8505] Psych_Unit_Tests#test_spec_domain_prefix = 0.02 s 6941s [4377/8505] Psych_Unit_Tests#test_spec_single_literal = 0.00 s 6941s [4378/8505] Psych_Unit_Tests#test_ruby_struct = 0.06 s 6941s [4379/8505] Psych_Unit_Tests#test_spec_simple_implicit_sequence = 0.01 s 6941s [4380/8505] Psych_Unit_Tests#test_spec_application_family = 0.02 s 6941s [4381/8505] Psych_Unit_Tests#test_spec_nested_comments = 0.00 s 6941s [4382/8505] Psych_Unit_Tests#test_spec_builtin_literal_blocks = 0.01 s 6941s [4383/8505] Psych_Unit_Tests#test_string_dump_with_colon = 0.00 s 6941s [4384/8505] Psych_Unit_Tests#test_empty_map_key = 0.01 s 6941s [4385/8505] Psych_Unit_Tests#test_range_cycle = 0.10 s 6941s [4386/8505] Psych_Unit_Tests#test_spec_mapping_of_mappings = 0.00 s 6941s [4387/8505] Psych_Unit_Tests#test_spec_override_anchor = 0.00 s 6941s [4388/8505] Psych_Unit_Tests#test_spec_simple_implicit_map = 0.01 s 6941s [4389/8505] Psych_Unit_Tests#test_string_starting_with_non_word_character_uses_double_quotes_without_exclamation_mark = 0.00 s 6941s [4390/8505] Psych_Unit_Tests#test_spec_mapping_between_sequences = 0.02 s 6941s [4391/8505] Psych_Unit_Tests#test_spec_preserve_indent = 0.00 s 6941s [4392/8505] Psych_Unit_Tests#test_spec_span_single_quote = 0.00 s 6941s [4393/8505] Psych_Unit_Tests#test_string_dump_starting_with_star = 0.00 s 6941s [4394/8505] Psych_Unit_Tests#test_spec_type_int = 0.00 s 6941s [4395/8505] Psych_Unit_Tests#test_ambiguous_comments = 0.01 s 6941s [4396/8505] Psych_Unit_Tests#test_spec_float_explicit = 0.00 s 6941s [4397/8505] Psych_Unit_Tests#test_spec_sequence_in_sequence_shortcut = 0.00 s 6941s [4398/8505] Psych_Unit_Tests#test_spec_root_fold = 0.00 s 6941s [4399/8505] Psych_Unit_Tests#test_akira = 0.02 s 6941s [4400/8505] Psych_Unit_Tests#test_spec_builtin_time = 0.01 s 6941s [4401/8505] Psych_Unit_Tests#test_ruby_regexp = 0.01 s 6942s [4402/8505] Psych_Unit_Tests#test_numeric_cycle = 0.02 s 6942s [4403/8505] Psych_Unit_Tests#test_spec_anchors_and_aliases = 0.04 s 6942s [4404/8505] Psych_Unit_Tests#test_basic_map = 0.00 s 6942s [4405/8505] Psych_Unit_Tests#test_spec_multiline_scalars = 0.00 s 6942s [4406/8505] Psych_Unit_Tests#test_spec_builtin_map = 0.00 s 6942s [4407/8505] Psych_Unit_Tests#test_spec_builtin_binary = 0.00 s 6942s [4408/8505] Psych_Unit_Tests#test_spec_indentation_determines_scope = 0.00 s 6942s [4409/8505] Psych_Unit_Tests#test_ruby_complex = 0.01 s 6942s [4410/8505] Psych_Unit_Tests#test_multiline_regexp = 0.01 s 6942s [4411/8505] Psych_Unit_Tests#test_syck_compat = 0.00 s 6942s [4412/8505] Psych_Unit_Tests#test_spec_type_misc = 0.01 s 6942s [4413/8505] Psych_Unit_Tests#test_multiline_string_uses_literal_style = 0.00 s 6942s [4414/8505] Psych_Unit_Tests#test_ranges = 0.02 s 6942s [4415/8505] Psych_Unit_Tests#test_spec_log_file = 0.01 s 6942s [4416/8505] Psych_Unit_Tests#test_spec_simple_map_with_nested_sequences = 0.01 s 6942s [4417/8505] Psych_Unit_Tests#test_spec_throwaway = 0.00 s 6942s [4418/8505] Psych_Unit_Tests#test_spec_explicit_families = 0.00 s 6942s [4419/8505] Psych_Unit_Tests#test_spec_single_folded = 0.00 s 6942s [4420/8505] Psych_Unit_Tests#test_spec_force_implicit = 0.00 s 6942s [4421/8505] Psych_Unit_Tests#test_spec_span_double_quote = 0.00 s 6942s [4422/8505] Psych_Unit_Tests#test_symbol_cycle = 0.00 s 6942s [4423/8505] Psych_Unit_Tests#test_circular_references = 0.01 s 6942s [4424/8505] Psych_Unit_Tests#test_spec_builtin_seq = 0.00 s 6942s [4425/8505] Psych_Unit_Tests#test_y_method = 0.01 s 6942s [4426/8505] Psych_Unit_Tests#test_spec_type_float = 0.01 s 6942s [4427/8505] Psych_Unit_Tests#test_spec_sequence_key_shortcut = 0.01 s 6942s [4428/8505] Psych_Unit_Tests#test_object_id_collision = 0.28 s 6942s [4429/8505] Psych_Unit_Tests#test_spec_simple_sequence_with_nested_map = 0.01 s 6942s [4430/8505] Psych_Unit_Tests#test_emitting_indicators = 0.00 s 6942s [4431/8505] Psych_Unit_Tests#test_basic_strings = 0.01 s 6942s [4432/8505] Psych_Unit_Tests#test_spec_sequence_of_sequences = 0.00 s 6942s [4433/8505] Psych_Unit_Tests#test_spec_root_mapping = 0.00 s 6942s [4434/8505] Psych_Unit_Tests#test_normal_exit = 0.00 s 6942s [4435/8505] Psych_Unit_Tests#test_spec_oneline_docs = 0.00 s 6942s [4436/8505] Psych_Unit_Tests#test_regexp_with_n = 0.00 s 6942s [4437/8505] Psych_Unit_Tests#test_date_out_of_range = 0.00 s 6942s [4438/8505] Psych_Unit_Tests#test_spec_sequence_shortcuts = 0.00 s 6942s [4439/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_dss1 = 0.01 s 6942s [4440/8505] OpenSSL::TestX509Certificate#test_check_private_key = 0.01 s 6942s [4441/8505] OpenSSL::TestX509Certificate#test_validity = 0.01 s 6942s [4442/8505] OpenSSL::TestX509Certificate#test_marshal = 0.00 s 6942s [4443/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_sha1 = 0.01 s 6942s [4444/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_rsa_md5 = 0.01 s 6942s [4445/8505] OpenSSL::TestX509Certificate#test_public_key = 0.02 s 6942s [4446/8505] OpenSSL::TestX509Certificate#test_dsa_with_sha2 = 0.00 s 6942s [4447/8505] OpenSSL::TestX509Certificate#test_serial = 0.03 s 6942s [4448/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_dsa = 0.01 s 6942s [4449/8505] OpenSSL::TestX509Certificate#test_sign_and_verify_dsa_md5 = 0.00 s 6942s [4450/8505] OpenSSL::TestX509Certificate#test_read_from_file = 0.01 s 6942s [4451/8505] TestNetHTTPS#test_timeout_during_SSL_handshake = 0.05 s 6942s [4452/8505] TestNetHTTPS#test_get_SNI_proxy = 0.02 s 6942s [4453/8505] TestNetHTTPS#test_fail_if_verify_hostname_is_true = 0.22 s 6942s [4454/8505] TestNetHTTPS#test_verify_none = 0.09 s 6943s [4455/8505] TestNetHTTPS#test_certificate_verify_failure = 0.21 s 6943s [4456/8505] TestRDocMarkupRaw#test_pretty_print = 0.00 s 6943s [4457/8505] TestRDocMarkupRaw#test_push = 0.00 s 6943s [4458/8505] CGISessionTest#test_cgi_session_filestore = 0.04 s 6943s [4459/8505] CGISessionTest#test_cgi_session_specify_session_key = 0.02 s 6943s [4460/8505] CGISessionTest#test_cgi_session_pstore = 0.01 s 6943s [4461/8505] CGISessionTest#test_cgi_session_specify_session_id = 0.01 s 6943s [4462/8505] TestOptionParser::DidYouMean#test_into = 0.01 s 6943s [4463/8505] TestOptionParser::DidYouMean#test_nonopt_pattern = 0.01 s 6943s [4464/8505] TestOptionParser::DidYouMean#test_no_suggestion = 0.01 s 6943s [4465/8505] TestOptionParser::DidYouMean#test_order = 0.00 s 6943s [4466/8505] TestOptionParser::DidYouMean#test_regexp = 0.00 s 6943s [4467/8505] TestOptionParser::DidYouMean#test_plain = 0.02 s 6943s [4468/8505] TestOptionParser::DidYouMean#test_ambiguous = 0.00 s 6943s [4469/8505] TestOptionParser::DidYouMean#test_permute = 0.00 s 6943s [4470/8505] TestOptionParser::DidYouMean#test_require_exact = 0.01 s 6943s [4471/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf = 0.00 s 6943s [4472/8505] TestCSVWriteGeneralGenerateLine#test_cr = 0.00 s 6943s [4473/8505] TestCSVWriteGeneralGenerateLine#test_encoding_euc_jp = 0.00 s 6943s [4474/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_comma_nil = 0.00 s 6943s [4475/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_lf = 0.00 s 6943s [4476/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_last = 0.00 s 6943s [4477/8505] TestCSVWriteGeneralGenerateLine#test_nil_empty = 0.00 s 6943s [4478/8505] TestCSVWriteGeneralGenerateLine#test_quote_character_double = 0.00 s 6943s [4479/8505] TestCSVWriteGeneralGenerateLine#test_tab = 0.00 s 6943s [4480/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_comma = 0.00 s 6943s [4481/8505] TestCSVWriteGeneralGenerateLine#test_quote_last = 0.00 s 6943s [4482/8505] TestCSVWriteGeneralGenerateLine#test_one_element = 0.00 s 6943s [4483/8505] TestCSVWriteGeneralGenerateLine#test_quote = 0.00 s 6943s [4484/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf = 0.00 s 6943s [4485/8505] TestCSVWriteGeneralGenerateLine#test_with_default_internal = 0.00 s 6943s [4486/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_last = 0.05 s 6943s [4487/8505] TestCSVWriteGeneralGenerateLine#test_encoding_utf8 = 0.00 s 6943s [4488/8505] TestCSVWriteGeneralGenerateLine#test_nil_values_only = 0.00 s 6943s [4489/8505] TestCSVWriteGeneralGenerateLine#test_comma = 0.00 s 6943s [4490/8505] TestCSVWriteGeneralGenerateLine#test_comma_and_value = 0.00 s 6943s [4491/8505] TestCSVWriteGeneralGenerateLine#test_force_quotes = 0.00 s 6943s [4492/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_value_lf_nil = 0.00 s 6943s [4493/8505] TestCSVWriteGeneralGenerateLine#test_nil_double_only = 0.00 s 6943s [4494/8505] TestCSVWriteGeneralGenerateLine#test_values = 0.00 s 6943s [4495/8505] TestCSVWriteGeneralGenerateLine#test_row_sep = 0.00 s 6943s [4496/8505] TestCSVWriteGeneralGenerateLine#test_cr_lf_cr = 0.00 s 6943s [4497/8505] TestCSVWriteGeneralGenerateLine#test_lf = 0.00 s 6943s [4498/8505] TestCSVWriteGeneralGenerateLine#test_semi_colon_values = 0.00 s 6943s [4499/8505] TestCSVWriteGeneralGenerateLine#test_quote_cr = 0.00 s 6943s [4500/8505] TestCSVWriteGeneralGenerateLine#test_comma_double = 0.00 s 6943s [4501/8505] TestCSVWriteGeneralGenerateLine#test_nil_values = 0.00 s 6943s [4502/8505] TestCSVWriteGeneralGenerateLine#test_semi_colon = 0.00 s 6943s [4503/8505] TestCSVWriteGeneralGenerateLine#test_nil_cr = 0.00 s 6943s [4504/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_first = 0.00 s 6943s [4505/8505] TestCSVWriteGeneralGenerateLine#test_encoding_with_default_internal = 0.00 s 6943s [4506/8505] TestCSVWriteGeneralGenerateLine#test_nil_value_middle = 0.00 s 6943s [4507/8505] TestCSVWriteGeneralGenerateLine#test_quote_character = 0.00 s 6943s [4508/8505] TestCSVWriteGeneralGenerateLine#test_tab_values = 0.00 s 6943s [4509/8505] TestCSVWriteGeneralGenerateLine#test_cr_dot_lf = 0.00 s 6943s [4510/8505] TestCSVWriteGeneralGenerateLine#test_quote_lf_value_lf = 0.00 s 6943s [4511/8505] TestCSVWriteGeneralGenerateLine#test_col_sep = 0.00 s 6943s [4512/8505] Rinda::TestRingFinger#test_make_socket_unicast = 0.00 s 6943s [4513/8505] TestRDocI18nLocale#test_translate_existent_message = 0.00 s 6943s [4514/8505] TestRDocI18nLocale#test_translate_nonexistent_message = 0.01 s 6943s [4515/8505] TestRDocI18nLocale#test_load_existent_po = 0.01 s 6943s [4516/8505] TestRDocI18nLocale#test_load_nonexistent_po = 0.00 s 6943s [4517/8505] TestRDocI18nLocale#test_name = 0.00 s 6943s [4518/8505] TestRDocAttr#test_arglists = 0.00 s 6943s [4519/8505] TestRDocAttr#test_call_seq = 0.00 s 6943s [4520/8505] TestRDocAttr#test_marshal_load_version_1 = 0.01 s 6943s [4521/8505] TestRDocAttr#test_type = 0.00 s 6943s [4522/8505] TestRDocAttr#test_block_params = 0.00 s 6943s [4523/8505] TestRDocAttr#test_params = 0.00 s 6943s [4524/8505] TestRDocAttr#test_marshal_dump_singleton = 0.01 s 6943s [4525/8505] TestRDocAttr#test_definition = 0.00 s 6943s [4526/8505] TestRDocAttr#test_marshal_dump = 0.00 s 6943s [4527/8505] TestRDocAttr#test_singleton = 0.00 s 6943s [4528/8505] TestRDocAttr#test_marshal_load_version_2 = 0.00 s 6943s [4529/8505] TestRDocAttr#test_aref = 0.00 s 6943s [4530/8505] TestRDocAttr#test_full_name = 0.00 s 6943s [4531/8505] TestDateArith#test_prev_year = 0.00 s 6943s [4532/8505] TestDateArith#test__plus__ex = 0.00 s 6943s [4533/8505] TestDateArith#test_step__noblock = 0.00 s 6943s [4534/8505] TestDateArith#test__compare = 0.00 s 6943s [4535/8505] TestDateArith#test_next_month = 0.00 s 6943s [4536/8505] TestDateArith#test_next_year = 0.00 s 6943s [4537/8505] TestDateArith#test__minus = 0.00 s 6943s [4538/8505] TestDateArith#test_prev_month = 0.00 s 6943s [4539/8505] TestDateArith#test_prev = 0.00 s 6943s [4540/8505] TestDateArith#test_step__compare = 0.00 s 6943s [4541/8505] TestDateArith#test__minus__ex = 0.00 s 6943s [4542/8505] TestDateArith#test_next_day = 0.00 s 6943s [4543/8505] TestDateArith#test_next_month__2 = 0.00 s 6943s [4544/8505] TestDateArith#test_prev_day = 0.00 s 6943s [4545/8505] TestDateArith#test_step = 0.00 s 6943s [4546/8505] TestDateArith#test__plus = 0.00 s 6943s [4547/8505] TestDateArith#test_prev_month__2 = 0.00 s 6943s [4548/8505] TestDateArith#test_next = 0.00 s 6943s [4549/8505] TestDateArith#test_downto = 0.00 s 6943s [4550/8505] TestDateArith#test_upto = 0.00 s 6943s [4551/8505] TestDateArith#test_downto__noblock = 0.00 s 6943s [4552/8505] TestDateArith#test_upto__noblock = 0.00 s 6943s [4553/8505] OpenSSL::TestASN1#test_utctime = 0.01 s 6943s [4554/8505] OpenSSL::TestASN1#test_decode_all = 0.00 s 6943s [4555/8505] OpenSSL::TestASN1#test_constructive_each = 0.00 s 6943s [4556/8505] OpenSSL::TestASN1#test_enumerated = 0.00 s 6943s [4557/8505] OpenSSL::TestASN1#test_integer = 0.00 s 6943s [4558/8505] OpenSSL::TestASN1#test_generalizedtime = 0.00 s 6943s [4559/8505] OpenSSL::TestASN1#test_object_id_register = 0.00 s 6943s [4560/8505] OpenSSL::TestASN1#test_boolean = 0.00 s 6943s [4561/8505] OpenSSL::TestHMAC#test_eq = 0.00 s 6943s [4562/8505] OpenSSL::TestHMAC#test_binary_update = 0.00 s 6943s [4563/8505] OpenSSL::TestHMAC#test_dup = 0.00 s 6943s [4564/8505] OpenSSL::TestHMAC#test_reset_keep_key = 0.00 s 6943s [4565/8505] TestFiberScheduler#test_closed_when_set_to_nil = 0.00 s 6943s [4566/8505] TestFiberScheduler#test_current_scheduler = 0.00 s 6943s [4567/8505] TestFiberScheduler#test_fiber_new = 0.01 s 6943s [4568/8505] TestFiberScheduler#test_closed_at_thread_exit = 0.00 s 6943s [4569/8505] TestFiberScheduler#test_fiber_new_with_options = 0.01 s 6943s [4570/8505] TestFiberScheduler#test_deadlock = 0.01 s 6943s [4571/8505] TestFiberScheduler#test_fiber_blocking = 0.00 s 6943s [4572/8505] TestFiberScheduler#test_minimal_interface = 0.00 s 6945s [4573/8505] TestFiberScheduler#test_close_at_exit = 2.16 s 6945s [4574/8505] TestFiberScheduler#test_fiber_without_scheduler = 0.00 s 6945s [4575/8505] TestFiberScheduler#test_autoload = 0.22 s 6946s [4576/8505] Reline::WithinPipeTest#test_unknown_macro = 0.11 s 6946s [4577/8505] Reline::WithinPipeTest#test_simple_input = 0.07 s 6946s [4578/8505] Reline::WithinPipeTest#test_delete_text_in_multiline = 0.03 s 6946s [4579/8505] Reline::WithinPipeTest#test_macro_commands_for_editing = 0.08 s 6946s [4580/8505] Reline::WithinPipeTest#test_macro_commands_for_moving = 0.06 s 6946s [4581/8505] TestOptionParser::ZshCompletion#test_compsys = 0.01 s 6946s [4582/8505] TestCSVParseSkipLines#test_string = 0.00 s 6946s [4583/8505] TestCSVParseSkipLines#test_regexp_quoted = 0.01 s 6946s [4584/8505] TestCSVParseSkipLines#test_not_matchable = 0.00 s 6946s [4585/8505] TestCSVParseSkipLines#test_regexp = 0.00 s 6946s [4586/8505] TestCSVParseSkipLines#test_multibyte_data = 0.00 s 6946s [4587/8505] TestCSVParseSkipLines#test_crlf = 0.00 s 6946s [4588/8505] TestCSVParseSkipLines#test_matchable = 0.00 s 6946s [4589/8505] TestCSVParseSkipLines#test_default = 0.00 s 6946s [4590/8505] TestCSVParseSkipLines#test_empty_line_and_liberal_parsing = 0.00 s 6946s [4591/8505] TestResolvResource#test_coord = 0.00 s 6946s [4592/8505] TestResolvResource#test_hash = 0.01 s 6946s [4593/8505] TestResolvResource#test_equality = 0.00 s 6946s [4594/8505] TestRDocCodeObject#test_full_name_equals = 0.03 s 6946s [4595/8505] TestRDocCodeObject#test_document_self_equals = 0.03 s 6946s [4596/8505] TestRDocCodeObject#test_suppress = 0.02 s 6946s [4597/8505] TestRDocCodeObject#test_comment_equals_comment = 0.02 s 6946s [4598/8505] TestRDocCodeObject#test_line = 0.02 s 6946s [4599/8505] TestRDocCodeObject#test_file_name = 0.02 s 6946s [4600/8505] TestRDocCodeObject#test_document_children_equals = 0.03 s 6946s [4601/8505] TestRDocCodeObject#test_parent_file_name = 0.03 s 6946s [4602/8505] TestRDocCodeObject#test_comment_equals_document = 0.02 s 6946s [4603/8505] TestRDocCodeObject#test_stop_doc = 0.02 s 6946s [4604/8505] TestRDocCodeObject#test_section = 0.02 s 6946s [4605/8505] TestRDocCodeObject#test_start_doc_ignored = 0.02 s 6946s [4606/8505] TestRDocCodeObject#test_ignore = 0.02 s 6946s [4607/8505] TestRDocCodeObject#test_ignore_eh = 0.02 s 6946s [4608/8505] TestRDocCodeObject#test_display_eh_document_self = 0.02 s 6946s [4609/8505] TestRDocCodeObject#test_parent_name = 0.02 s 6946s [4610/8505] TestRDocCodeObject#test_comment_equals_encoding_blank = 0.02 s 6946s [4611/8505] TestRDocCodeObject#test_options = 0.02 s 6946s [4612/8505] TestRDocCodeObject#test_record_location_suppressed = 0.02 s 6946s [4613/8505] TestRDocCodeObject#test_record_location = 0.02 s 6946s [4614/8505] TestRDocCodeObject#test_received_ndoc = 0.02 s 6946s [4615/8505] TestRDocCodeObject#test_done_documenting = 0.02 s 6946s [4616/8505] TestRDocCodeObject#test_start_doc = 0.02 s 6946s [4617/8505] TestRDocCodeObject#test_display_eh_suppress = 0.02 s 6947s [4618/8505] TestRDocCodeObject#test_each_parent = 0.02 s 6947s [4619/8505] TestRDocCodeObject#test_suppress_eh = 0.02 s 6947s [4620/8505] TestRDocCodeObject#test_store_equals = 0.02 s 6947s [4621/8505] TestRDocCodeObject#test_record_location_ignored = 0.02 s 6947s [4622/8505] TestRDocCodeObject#test_metadata = 0.02 s 6947s [4623/8505] TestRDocCodeObject#test_initialize = 0.02 s 6947s [4624/8505] TestRDocCodeObject#test_comment_equals = 0.02 s 6947s [4625/8505] TestRDocCodeObject#test_documented_eh = 0.02 s 6947s [4626/8505] TestRDocCodeObject#test_comment_equals_encoding = 0.02 s 6947s [4627/8505] TestRDocCodeObject#test_display_eh_ignore = 0.02 s 6947s [4628/8505] TestRDocCodeObject#test_start_doc_suppressed = 0.02 s 6947s [4629/8505] TestRDocMarkupToAnsi#test_accept_list_end_number = 0.01 s 6947s [4630/8505] TestRDocMarkupToAnsi#test_accept_verbatim_big_indent = 0.01 s 6947s [4631/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_number = 0.00 s 6947s [4632/8505] TestRDocMarkupToAnsi#test_accept_document = 0.00 s 6947s [4633/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_number = 0.00 s 6947s [4634/8505] TestRDocMarkupToAnsi#test_accept_heading_b = 0.00 s 6947s [4635/8505] TestRDocMarkupToAnsi#test_accept_verbatim_indent = 0.00 s 6947s [4636/8505] TestRDocMarkupToAnsi#test_list_nested = 0.00 s 6947s [4637/8505] TestRDocMarkupToAnsi#test_accept_heading_indent = 0.00 s 6947s [4638/8505] TestRDocMarkupToAnsi#test_list_verbatim = 0.00 s 6947s [4639/8505] TestRDocMarkupToAnsi#test_accept_verbatim = 0.00 s 6947s [4640/8505] TestRDocMarkupToAnsi#test_accept_paragraph_i = 0.00 s 6947s [4641/8505] TestRDocMarkupToAnsi#test_accept_block_quote = 0.00 s 6947s [4642/8505] TestRDocMarkupToAnsi#test_accept_paragraph_break = 0.00 s 6947s [4643/8505] TestRDocMarkupToAnsi#test_accept_list_start_ualpha = 0.00 s 6947s [4644/8505] TestRDocMarkupToAnsi#test_accept_heading_suppressed_crossref = 0.00 s 6947s [4645/8505] TestRDocMarkupToAnsi#test_accept_heading_3 = 0.00 s 6947s [4646/8505] TestRDocMarkupToAnsi#test_accept_heading_1 = 0.00 s 6947s [4647/8505] TestRDocMarkupToAnsi#test_accept_list_start_lalpha = 0.00 s 6947s [4648/8505] TestRDocMarkupToAnsi#test_accept_heading = 0.00 s 6947s [4649/8505] TestRDocMarkupToAnsi#test_accept_list_end_label = 0.00 s 6947s [4650/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_bullet = 0.00 s 6947s [4651/8505] TestRDocMarkupToAnsi#test_accept_paragraph_underscore = 0.00 s 6947s [4652/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_bullet = 0.00 s 6947s [4653/8505] TestRDocMarkupToAnsi#test_accept_rule = 0.00 s 6947s [4654/8505] TestRDocMarkupToAnsi#test_attributes = 0.00 s 6947s [4655/8505] TestRDocMarkupToAnsi#test_accept_list_end_bullet = 0.00 s 6947s [4656/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_label = 0.00 s 6947s [4657/8505] TestRDocMarkupToAnsi#test_accept_list_end_note = 0.00 s 6947s [4658/8505] TestRDocMarkupToAnsi#test_accept_list_start_number = 0.00 s 6947s [4659/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_multi_description = 0.00 s 6947s [4660/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_multi_label = 0.00 s 6947s [4661/8505] TestRDocMarkupToAnsi#test_accept_paragraph_wrap = 0.00 s 6947s [4662/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_note = 0.00 s 6947s [4663/8505] TestRDocMarkupToAnsi#test_start_accepting = 0.00 s 6947s [4664/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note_2 = 0.00 s 6947s [4665/8505] TestRDocMarkupToAnsi#test_accept_paragraph_br = 0.00 s 6947s [4666/8505] TestRDocMarkupToAnsi#test_accept_paragraph = 0.00 s 6947s [4667/8505] TestRDocMarkupToAnsi#test_accept_blank_line = 0.00 s 6947s [4668/8505] TestRDocMarkupToAnsi#test_accept_paragraph_star = 0.00 s 6947s [4669/8505] TestRDocMarkupToAnsi#test_accept_heading_2 = 0.00 s 6947s [4670/8505] TestRDocMarkupToAnsi#test_accept_list_start_label = 0.00 s 6947s [4671/8505] TestRDocMarkupToAnsi#test_accept_heading_4 = 0.00 s 6947s [4672/8505] TestRDocMarkupToAnsi#test_accept_paragraph_b = 0.00 s 6947s [4673/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_ualpha = 0.00 s 6947s [4674/8505] TestRDocMarkupToAnsi#test_accept_rule_indent = 0.00 s 6947s [4675/8505] TestRDocMarkupToAnsi#test_convert_list_note = 0.00 s 6947s [4676/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_ualpha = 0.00 s 6947s [4677/8505] TestRDocMarkupToAnsi#test_accept_list_end_ualpha = 0.00 s 6947s [4678/8505] TestRDocMarkupToAnsi#test_end_accepting = 0.00 s 6947s [4679/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_lalpha = 0.00 s 6947s [4680/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_lalpha = 0.00 s 6947s [4681/8505] TestRDocMarkupToAnsi#test_accept_list_item_start_note = 0.00 s 6947s [4682/8505] TestRDocMarkupToAnsi#test_accept_raw = 0.00 s 6947s [4683/8505] TestRDocMarkupToAnsi#test_accept_list_end_lalpha = 0.00 s 6947s [4684/8505] TestRDocMarkupToAnsi#test_accept_list_start_note = 0.00 s 6947s [4685/8505] TestRDocMarkupToAnsi#test_accept_list_start_bullet = 0.00 s 6947s [4686/8505] TestRDocMarkupToAnsi#test_accept_list_item_end_label = 0.00 s 6947s [4687/8505] TestRDocMarkupToAnsi#test_accept_paragraph_plus = 0.00 s 6947s [4688/8505] TestRDocMarkupToAnsi#test_accept_paragraph_indent = 0.00 s 6947s [4689/8505] Psych::TestArray#test_enumerator = 0.00 s 6947s [4690/8505] Psych::TestArray#test_self_referential = 0.01 s 6947s [4691/8505] Psych::TestArray#test_recursive_array = 0.00 s 6947s [4692/8505] Psych::TestArray#test_cycle = 0.00 s 6947s [4693/8505] Psych::TestArray#test_subclass_with_attributes = 0.00 s 6947s [4694/8505] Psych::TestArray#test_another_subclass_with_attributes = 0.01 s 6947s [4695/8505] Psych::TestArray#test_subclass = 0.00 s 6947s [4696/8505] Psych::TestArray#test_backwards_with_syck = 0.00 s 6947s [4697/8505] Psych::TestArray#test_recursive_array_uses_alias = 0.00 s 6947s [4698/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_unknown = 0.00 s 6947s [4699/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_name = 0.00 s 6947s [4700/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_name_without_headers = 0.00 s 6947s [4701/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_true = 0.00 s 6947s [4702/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_false = 0.00 s 6947s [4703/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_field_index = 0.00 s 6947s [4704/8505] TestCSVWriteForceQuotesGenerateLine::DifferentOFS#test_default = 0.00 s 6947s [4705/8505] CGIUtilPureRubyTest#test_cgi_unescapeHTML_with_invalid_byte_sequence = 0.00 s 6947s [4706/8505] CGIUtilPureRubyTest#test_cgi_escapeHTML_with_invalid_byte_sequence = 0.00 s 6947s [4707/8505] TestFiberBacktrace#test_backtrace = 0.00 s 6947s [4708/8505] TestFiberBacktrace#test_backtrace_locations = 0.00 s 6947s [4709/8505] TestFiberBacktrace#test_local_backtrace = 0.00 s 6947s [4710/8505] TestOptionParser::Getopts#test_long_noarg = 0.00 s 6947s [4711/8505] TestOptionParser::Getopts#test_long_arg = 0.01 s 6947s [4712/8505] TestOptionParser::Getopts#test_short_noarg = 0.00 s 6947s [4713/8505] TestOptionParser::Getopts#test_short_arg = 0.00 s 6949s [4714/8505] TestFiberSleep#test_sleep_returns_seconds_slept = 2.00 s 6949s [4715/8505] TestRipper::Sexp#test_pattern_matching_234 = 0.01 s 6949s [4716/8505] TestRipper::Sexp#test_pattern_matching_257 = 0.01 s 6949s [4717/8505] TestRipper::Sexp#test_pattern_matching_166 = 0.00 s 6949s [4718/8505] TestRipper::Sexp#test_dsym = 0.00 s 6949s [4719/8505] TestRipper::Sexp#test_pattern_matching_363 = 0.00 s 6949s [4720/8505] TestRipper::Sexp#test_pattern_matching_452 = 0.00 s 6949s [4721/8505] TestRipper::Sexp#test_pattern_matching_439 = 0.00 s 6949s [4722/8505] TestRipper::Sexp#test_pattern_matching_286 = 0.00 s 6949s [4723/8505] TestRipper::Sexp#test_pattern_matching_171 = 0.00 s 6949s [4724/8505] TestRipper::Sexp#test_pattern_matching_246 = 0.00 s 6949s [4725/8505] TestRipper::Sexp#test_pattern_matching_229 = 0.00 s 6949s [4726/8505] TestRipper::Sexp#test_hash_value_omission = 0.00 s 6949s [4727/8505] TestRipper::Sexp#test_squiggly_heredoc = 0.00 s 6949s [4728/8505] TestRipper::Sexp#test_defs_fname = 0.00 s 6949s [4729/8505] TestRipper::Sexp#test_pattern_matching_470 = 0.00 s 6949s [4730/8505] TestRipper::Sexp#test_pattern_matching_216 = 0.00 s 6949s [4731/8505] TestRipper::Sexp#test_pattern_matching_415 = 0.00 s 6949s [4732/8505] TestRipper::Sexp#test_hshptn = 0.00 s 6949s [4733/8505] TestRipper::Sexp#test_pattern_matching_476 = 0.00 s 6949s [4734/8505] TestRipper::Sexp#test_pattern_matching_383 = 0.00 s 6949s [4735/8505] TestRipper::Sexp#test_regexp_content = 0.00 s 6949s [4736/8505] TestRipper::Sexp#test_pattern_matching_465 = 0.00 s 6949s [4737/8505] TestRipper::Sexp#test_pattern_matching_352 = 0.00 s 6949s [4738/8505] TestRipper::Sexp#test_pattern_matching_394 = 0.00 s 6949s [4739/8505] TestRipper::Sexp#test_pattern_matching_402 = 0.00 s 6949s [4740/8505] TestRipper::Sexp#test_pattern_matching_158 = 0.00 s 6949s [4741/8505] TestRipper::Sexp#test_compile_error = 0.00 s 6949s [4742/8505] TestRipper::Sexp#test_pattern_matching_460 = 0.00 s 6949s [4743/8505] TestRipper::Sexp#test_pattern_matching_150 = 0.00 s 6949s [4744/8505] TestRipper::Sexp#test_pattern_matching_332 = 0.00 s 6949s [4745/8505] TestRipper::Sexp#test_pattern_matching_196 = 0.00 s 6949s [4746/8505] TestRipper::Sexp#test_pattern_matching_265 = 0.00 s 6949s [4747/8505] TestRipper::Sexp#test_pattern_matching_204 = 0.00 s 6949s [4748/8505] TestRipper::Sexp#test_pattern_matching_278 = 0.00 s 6949s [4749/8505] TestRipper::Sexp#test_pattern_matching_479 = 0.00 s 6949s [4750/8505] TestRipper::Sexp#test_pattern_matching_183 = 0.00 s 6949s [4751/8505] TestRipper::Sexp#test_pattern_matching_145 = 0.00 s 6949s [4752/8505] TestRipper::Sexp#test_pattern_matching_473 = 0.00 s 6949s [4753/8505] TestRipper::Sexp#test_pattern_matching_321 = 0.00 s 6949s [4754/8505] TestRipper::Sexp#test_pattern_matching_410 = 0.00 s 6949s [4755/8505] TestRipper::Sexp#test_pattern_matching_270 = 0.00 s 6949s [4756/8505] TestRipper::Sexp#test_named_with_default = 0.01 s 6949s [4757/8505] TestRipper::Sexp#test_pattern_matching_340 = 0.00 s 6949s [4758/8505] TestRipper::Sexp#test_pattern_matching_427 = 0.00 s 6949s [4759/8505] TestRipper::Sexp#test_pattern_matching_482 = 0.00 s 6949s [4760/8505] TestRipper::Sexp#test_pattern_matching_371 = 0.00 s 6949s [4761/8505] TestRipper::Sexp#test_params_mlhs = 0.00 s 6949s [4762/8505] TestRipper::Sexp#test_raise_errors_keyword = 0.01 s 6949s [4763/8505] TestRipper::Sexp#test_def_fname = 0.00 s 6949s [4764/8505] TestRipper::Sexp#test_pattern_matching_309 = 0.00 s 6949s [4765/8505] TestRipper::Sexp#test_pattern_matching_298 = 0.00 s 6949s [4766/8505] TestCSVParseStrip::DifferentOFS#test_string = 0.00 s 6949s [4767/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_cr = 0.00 s 6949s [4768/8505] TestCSVParseStrip::DifferentOFS#test_liberal_parsing = 0.00 s 6949s [4769/8505] TestCSVParseStrip::DifferentOFS#test_left = 0.00 s 6949s [4770/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_incompatible_true = 0.00 s 6949s [4771/8505] TestCSVParseStrip::DifferentOFS#test_right = 0.00 s 6949s [4772/8505] TestCSVParseStrip::DifferentOFS#test_both = 0.00 s 6949s [4773/8505] TestCSVParseStrip::DifferentOFS#test_quoted = 0.00 s 6949s [4774/8505] TestCSVParseStrip::DifferentOFS#test_middle = 0.00 s 6949s [4775/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_crlf = 0.00 s 6949s [4776/8505] TestCSVParseStrip::DifferentOFS#test_do_not_strip_lf = 0.00 s 6949s [4777/8505] TestCSVParseStrip::DifferentOFS#test_no_quote = 0.00 s 6949s [4778/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_compatible_string = 0.00 s 6949s [4779/8505] TestCSVParseStrip::DifferentOFS#test_col_sep_incompatible_string = 0.00 s 6949s [4780/8505] Reline::History::Test#test_history_size_zero = 0.01 s 6949s [4781/8505] Reline::History::Test#test_each__enumerator = 0.00 s 6949s [4782/8505] Reline::History::Test#test_get__negative = 0.01 s 6949s [4783/8505] Reline::History::Test#test_get__out_of_range = 0.01 s 6949s [4784/8505] Reline::History::Test#test_history_size_negative_unlimited = 0.00 s 6949s [4785/8505] Reline::History::Test#test_push__operator = 0.01 s 6949s [4786/8505] Reline::History::Test#test_empty_p = 0.00 s 6949s [4787/8505] Reline::History::Test#test_pop = 0.00 s 6949s [4788/8505] Reline::History::Test#test_shift = 0.00 s 6949s [4789/8505] Reline::History::Test#test_push = 0.00 s 6949s [4790/8505] Reline::History::Test#test_set__out_of_range = 0.01 s 6949s [4791/8505] Reline::History::Test#test_length = 0.00 s 6949s [4792/8505] Reline::History::Test#test_each = 0.00 s 6949s [4793/8505] Reline::History::Test#test_delete_at__out_of_range = 0.01 s 6949s [4794/8505] Reline::History::Test#test_set = 0.00 s 6949s [4795/8505] Reline::History::Test#test_get = 0.00 s 6949s [4796/8505] Reline::History::Test#test_push__plural = 0.00 s 6949s [4797/8505] Reline::History::Test#test_to_s = 0.00 s 6949s [4798/8505] Reline::History::Test#test_delete_at = 0.01 s 6949s [4799/8505] Reline::History::Test#test_ancestors = 0.00 s 6949s [4800/8505] Psych::TestEmitter#test_start_sequence_arg_error = 0.00 s 6949s [4801/8505] Psych::TestEmitter#test_line_width = 0.00 s 6949s [4802/8505] Psych::TestEmitter#test_indentation_set = 0.00 s 6949s [4803/8505] Psych::TestEmitter#test_resizing_tags = 0.00 s 6949s [4804/8505] Psych::TestEmitter#test_emit_utf_8 = 0.00 s 6949s [4805/8505] Psych::TestEmitter#test_start_doc_arg_error = 0.00 s 6949s [4806/8505] Psych::TestEmitter#test_scalar_arg_error = 0.00 s 6949s [4807/8505] Psych::TestEmitter#test_start_stream_arg_error = 0.00 s 6949s [4808/8505] Psych::TestEmitter#test_set_canonical = 0.00 s 6949s [4809/8505] TestCSVParseConvert#test_custom_field_info_line = 0.00 s 6949s [4810/8505] TestCSVParseConvert#test_integer_float = 0.00 s 6949s [4811/8505] TestCSVParseConvert#test_numeric = 0.00 s 6949s [4812/8505] TestCSVParseConvert#test_custom = 0.01 s 6949s [4813/8505] TestCSVParseConvert#test_empty_value = 0.00 s 6949s [4814/8505] TestCSVParseConvert#test_nil_value = 0.00 s 6949s [4815/8505] TestCSVParseConvert#test_float = 0.00 s 6949s [4816/8505] TestCSVParseConvert#test_all = 0.01 s 6949s [4817/8505] TestCSVParseConvert#test_float_integer = 0.01 s 6949s [4818/8505] TestCSVParseConvert#test_builtin_custom = 0.00 s 6949s [4819/8505] TestCSVParseConvert#test_integer = 0.00 s 6949s [4820/8505] TestCSVParseConvert#test_custom_blank_field = 0.00 s 6949s [4821/8505] TestCSVParseConvert#test_custom_field_info_header = 0.00 s 6949s [4822/8505] Psych::TestSymbol#test_cycle_empty = 0.00 s 6949s [4823/8505] Psych::TestSymbol#test_cycle = 0.00 s 6949s [4824/8505] Psych::TestSymbol#test_stringy = 0.00 s 6949s [4825/8505] Psych::TestSymbol#test_load_quoted = 0.00 s 6949s [4826/8505] Psych::TestSymbol#test_cycle_colon = 0.00 s 6949s [4827/8505] Psych::YAMLStoreTest#test_changes_are_not_written_on_abort = 0.01 s 6949s [4828/8505] Psych::YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.02 s 6949s [4829/8505] Psych::YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.01 s 6949s [4830/8505] Psych::YAMLStoreTest#test_changes_after_commit_are_discarded = 0.01 s 6949s [4831/8505] Psych::YAMLStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.00 s 6949s [4832/8505] Psych::YAMLStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 6949s [4833/8505] Psych::YAMLStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 6949s [4834/8505] TestRDocParserMarkdown#test_scan = 0.01 s 6949s [4835/8505] TestRDocParserMarkdown#test_file = 0.01 s 6949s [4836/8505] TestRDocParserMarkdown#test_class_can_parse = 0.00 s 6949s [4837/8505] TestOptionParser::WithPattern#test_into = 0.00 s 6949s [4838/8505] TestOptionParser::WithPattern#test_nonopt_pattern = 0.00 s 6949s [4839/8505] TestOptionParser::WithPattern#test_order = 0.00 s 6949s [4840/8505] TestOptionParser::WithPattern#test_regexp = 0.00 s 6949s [4841/8505] TestOptionParser::WithPattern#test_pattern = 0.00 s 6949s [4842/8505] TestOptionParser::WithPattern#test_permute = 0.00 s 6949s [4843/8505] TestOptionParser::WithPattern#test_require_exact = 0.01 s 6949s [4844/8505] YAMLStoreTest#test_changes_are_not_written_on_abort = 0.00 s 6949s [4845/8505] YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readonly_mode = 0.01 s 6949s [4846/8505] YAMLStoreTest#test_data_should_be_loaded_correctly_when_in_readwrite_mode = 0.00 s 6949s [4847/8505] YAMLStoreTest#test_changes_after_commit_are_discarded = 0.00 s 6949s [4848/8505] YAMLStoreTest#test_opening_new_file_in_readonly_mode_should_result_in_empty_values = 0.00 s 6949s [4849/8505] YAMLStoreTest#test_with_options = 0.01 s 6949s [4850/8505] YAMLStoreTest#test_writing_inside_readonly_transaction_raises_error = 0.00 s 6949s [4851/8505] YAMLStoreTest#test_nested_transaction_raises_error = 0.01 s 6949s [4852/8505] YAMLStoreTest#test_thread_safe = 0.01 s 6949s [4853/8505] YAMLStoreTest#test_opening_new_file_in_readwrite_mode_should_result_in_empty_values = 0.00 s 6949s [4854/8505] TestBigDecimalRactor#test_ractor_shareable = 0.00 s 6949s [4855/8505] Psych::TestNull#test_null_list = 0.00 s 6949s [4856/8505] URI::TestWS#test_request_uri = 0.00 s 6949s [4857/8505] URI::TestWS#test_parse = 0.00 s 6949s [4858/8505] URI::TestWS#test_normalize = 0.00 s 6949s [4859/8505] URI::TestWS#test_equal = 0.00 s 6949s [4860/8505] URI::TestWS#test_build = 0.00 s 6949s [4861/8505] URI::TestWS#test_select = 0.00 s 6949s [4862/8505] URI::TestFTP#test_parse = 0.00 s 6949s [4863/8505] URI::TestFTP#test_paths = 0.00 s 6949s [4864/8505] URI::TestFTP#test_parse_invalid = 0.00 s 6949s [4865/8505] URI::TestFTP#test_assemble = 0.01 s 6949s [4866/8505] URI::TestFTP#test_select = 0.00 s 6949s [4867/8505] Psych::TestMergeKeys#test_merge_array = 0.00 s 6949s [4868/8505] Psych::TestMergeKeys#test_merge_is_not_partial = 0.01 s 6949s [4869/8505] Psych::TestMergeKeys#test_bad_seq_merge = 0.00 s 6949s [4870/8505] Psych::TestMergeKeys#test_explicit_string = 0.00 s 6949s [4871/8505] Psych::TestMergeKeys#test_merge_seq_nil = 0.00 s 6949s [4872/8505] Psych::TestMergeKeys#test_override = 0.00 s 6949s [4873/8505] Psych::TestMergeKeys#test_merge_key_with_bare_hash = 0.00 s 6949s [4874/8505] Psych::TestMergeKeys#test_missing_merge_key = 0.00 s 6949s [4875/8505] Psych::TestMergeKeys#test_merge_nil = 0.00 s 6949s [4876/8505] Psych::TestMergeKeys#test_mergekey_with_object = 0.00 s 6949s [4877/8505] Psych::TestMergeKeys#test_roundtrip_with_chevron_key = 0.01 s 6949s [4878/8505] Psych::TestMergeKeys#test_merge_key = 0.00 s 6949s [4879/8505] Psych::TestMergeKeys#test_multiple_maps = 0.00 s 6949s [4880/8505] Psych::TestMergeKeys#test_merge_key_with_bare_hash_symbolized_names = 0.00 s 6949s [4881/8505] TestSingleton#test_include_in_module_raises_exception = 0.00 s 6949s [4882/8505] TestSingleton#test_allocate_raises_exception = 0.00 s 6949s [4883/8505] TestSingleton#test_marshal = 0.00 s 6949s [4884/8505] TestSingleton#test_instance_never_changes = 0.00 s 6949s [4885/8505] TestSingleton#test_initialize_raises_exception = 0.00 s 6949s [4886/8505] TestSingleton#test_dup_raises_exception = 0.00 s 6949s [4887/8505] TestSingleton#test_clone_raises_exception = 0.00 s 6949s [4888/8505] TestSingleton#test_class_level_cloning_preserves_singleton_behavior = 0.00 s 6949s [4889/8505] TestSingleton#test_inheritance_works_with_overridden_inherited_method = 0.00 s 6949s [4890/8505] TestSingleton#test_extending_singleton_raises_exception = 0.00 s 6950s [4891/8505] TestRDocRIPaths#test_class_gem_dir = 0.05 s 6950s [4892/8505] TestRDocRIPaths#test_class_path_nonexistent = 0.02 s 6950s [4893/8505] TestRDocRIPaths#test_class_each = 0.01 s 6950s [4894/8505] TestRDocRIPaths#test_class_home_dir = 0.01 s 6950s [4895/8505] TestRDocRIPaths#test_class_raw_path = 0.02 s 6950s [4896/8505] TestRDocRIPaths#test_class_raw_path_extra_dirs = 0.01 s 6950s [4897/8505] TestRDocRIPaths#test_class_gemdirs_all = 0.01 s 6950s [4898/8505] TestRDocRIPaths#test_class_site_dir = 0.01 s 6950s [4899/8505] TestRDocRIPaths#test_class_gemdirs_latest = 0.01 s 6950s [4900/8505] TestRDocRIPaths#test_class_system_dir = 0.01 s 6950s [4901/8505] TestRDocRIPaths#test_class_gemdirs_legacy = 0.01 s 6950s [4902/8505] TestFiberProcess#test_system = 0.00 s 6950s [4903/8505] TestFiberProcess#test_process_wait = 0.00 s 6950s [4904/8505] TestRDocGeneratorPOTPO#test_empty = 0.00 s 6950s [4905/8505] TestRDocGeneratorPOTPO#test_have_entry = 0.01 s 6950s [4906/8505] Psych::Visitors::TestYAMLTree#test_struct = 0.00 s 6950s [4907/8505] Psych::Visitors::TestYAMLTree#test_int = 0.01 s 6950s [4908/8505] Psych::Visitors::TestYAMLTree#test_struct_anon = 0.00 s 6950s [4909/8505] Psych::Visitors::TestYAMLTree#test_delegator = 0.01 s 6950s [4910/8505] Psych::Visitors::TestYAMLTree#test_tree_can_be_called_twice = 0.00 s 6950s [4911/8505] Psych::Visitors::TestYAMLTree#test_simple_delegator = 0.01 s 6950s [4912/8505] Psych::Visitors::TestYAMLTree#test_string = 0.00 s 6950s [4913/8505] Psych::Visitors::TestYAMLTree#test_range_exclusive = 0.00 s 6950s [4914/8505] Psych::Visitors::TestYAMLTree#test_binary_formatting = 0.00 s 6950s [4915/8505] Psych::Visitors::TestYAMLTree#test_yaml_tree_can_take_an_emitter = 0.00 s 6950s [4916/8505] Psych::Visitors::TestYAMLTree#test_date = 0.00 s 6950s [4917/8505] Psych::Visitors::TestYAMLTree#test_anon_class = 0.00 s 6950s [4918/8505] Psych::Visitors::TestYAMLTree#test_rational = 0.00 s 6950s [4919/8505] Psych::Visitors::TestYAMLTree#test_time = 0.00 s 6950s [4920/8505] Psych::Visitors::TestYAMLTree#test_symbol = 0.00 s 6950s [4921/8505] Psych::Visitors::TestYAMLTree#test_regexp = 0.01 s 6950s [4922/8505] Psych::Visitors::TestYAMLTree#test_float = 0.01 s 6950s [4923/8505] Psych::Visitors::TestYAMLTree#test_nil = 0.01 s 6950s [4924/8505] Psych::Visitors::TestYAMLTree#test_override_method = 0.00 s 6950s [4925/8505] Psych::Visitors::TestYAMLTree#test_hash = 0.00 s 6950s [4926/8505] Psych::Visitors::TestYAMLTree#test_object_has_no_class = 0.00 s 6950s [4927/8505] Psych::Visitors::TestYAMLTree#test_list = 0.00 s 6950s [4928/8505] Psych::Visitors::TestYAMLTree#test_complex = 0.00 s 6950s [4929/8505] Psych::Visitors::TestYAMLTree#test_range_inclusive = 0.01 s 6950s [4930/8505] Psych::Visitors::TestYAMLTree#test_scalar = 0.01 s 6950s [4931/8505] Psych::Visitors::TestYAMLTree#test_struct_const = 0.01 s 6950s [4932/8505] Psych::Visitors::TestYAMLTree#test_boolean = 0.02 s 6950s [4933/8505] OpenSSL::TestCipher#test_non_aead_cipher_set_auth_data = 0.01 s 6950s [4934/8505] OpenSSL::TestCipher#test_update_raise_if_key_not_set = 0.00 s 6950s [4935/8505] OpenSSL::TestCipher#test_dup = 0.00 s 6950s [4936/8505] OpenSSL::TestCipher#test_aes_gcm_key_iv_order_issue = 0.01 s 6950s [4937/8505] OpenSSL::TestCipher#test_reset = 0.00 s 6950s [4938/8505] OpenSSL::TestCipher#test_encrypt_decrypt = 0.01 s 6950s [4939/8505] OpenSSL::TestCipher#test_pkcs5_keyivgen = 0.04 s 6950s [4940/8505] OpenSSL::TestCipher#test_ctr_if_exists = 0.00 s 6950s [4941/8505] OpenSSL::TestCipher#test_empty_data = 0.00 s 6950s [4942/8505] OpenSSL::TestCipher#test_authenticated = 0.00 s 6950s [4943/8505] OpenSSL::TestCipher#test_initialize = 0.00 s 6950s [4944/8505] OpenSSL::TestCipher#test_info = 0.00 s 6950s [4945/8505] OpenSSL::TestCipher#test_aes_gcm_variable_iv_len = 0.00 s 6950s [4946/8505] OpenSSL::TestCipher#test_random_key_iv = 0.00 s 6950s [4947/8505] TestRDocRIDriver#test_display_page_missing = 0.04 s 6950s [4948/8505] TestRDocRIDriver#test_display_method_params = 0.06 s 6950s [4949/8505] TestRDocRIDriver#test_expand_class = 0.03 s 6950s [4950/8505] TestRDocRIDriver#test_load_methods_matching_inherited = 0.05 s 6950s [4951/8505] TestRDocRIDriver#test_add_method_attribute = 0.04 s 6950s [4952/8505] TestRDocRIDriver#test_output_width = 0.00 s 6950s [4953/8505] TestRDocRIDriver#test_ancestors_of = 0.00 s 6950s [4954/8505] TestRDocRIDriver#test_display_name_not_found_method = 0.03 s 6950s [4955/8505] TestRDocRIDriver#test_display_class_multi_no_doc = 0.05 s 6950s [4956/8505] TestRDocRIDriver#test_display_method_attribute = 0.03 s 6950s [4957/8505] TestRDocRIDriver#test_complete_classes = 0.11 s 6950s [4958/8505] TestRDocRIDriver#test_expand_class_2 = 0.01 s 6950s [4959/8505] TestRDocRIDriver#test_display_class_all = 0.07 s 6951s [4960/8505] TestRDocRIDriver#test_display_method_overridden = 0.05 s 6951s [4961/8505] TestRDocRIDriver#test_add_method_that_is_alias_for_original = 0.03 s 6951s [4962/8505] TestRDocRIDriver#test_load_method = 0.03 s 6951s [4963/8505] TestRDocRIDriver#test_add_class = 0.04 s 6951s [4964/8505] TestRDocRIDriver#test_add_method = 0.03 s 6951s [4965/8505] TestRDocRIDriver#test_in_path_eh = 0.01 s 6951s [4966/8505] TestRDocRIDriver#test_display_name = 0.02 s 6951s [4967/8505] TestRDocRIDriver#test_list_known_classes = 0.02 s 6951s [4968/8505] TestRDocRIDriver#test_filter_methods = 0.03 s 6951s [4969/8505] TestRDocRIDriver#test_complete_ancestor = 0.01 s 6951s [4970/8505] TestRDocRIDriver#test_add_method_overridden = 0.03 s 6951s [4971/8505] TestRDocRIDriver#test_add_includes = 0.02 s 6951s [4972/8505] TestRDocRIDriver#test_expand_name = 0.03 s 6951s [4973/8505] TestRDocRIDriver#test_display_class_ambiguous = 0.03 s 6951s [4974/8505] TestRDocRIDriver#test_display_method_inherited = 0.03 s 6951s [4975/8505] TestRDocRIDriver#test_add_method_list_none = 0.00 s 6951s [4976/8505] TestRDocRIDriver#test_add_from = 0.02 s 6951s [4977/8505] TestRDocRIDriver#test_parse_name_single_class = 0.00 s 6951s [4978/8505] TestRDocRIDriver#test_complete_multistore = 0.03 s 6951s [4979/8505] TestRDocRIDriver#test_find_store = 0.00 s 6951s [4980/8505] TestRDocRIDriver#test_display_name_not_found_class = 0.03 s 6951s [4981/8505] TestRDocRIDriver#test_list_methods_matching_inherit = 0.04 s 6951s [4982/8505] TestRDocRIDriver#test_add_method_inherited = 0.04 s 6951s [4983/8505] TestRDocRIDriver#test_ancestors_of_chained_inclusion = 0.00 s 6951s [4984/8505] TestRDocRIDriver#test_add_also_in = 0.05 s 6951s [4985/8505] TestRDocRIDriver#test_load_methods_matching = 0.03 s 6951s [4986/8505] TestRDocRIDriver#test_add_method_list_interative = 0.00 s 6951s [4987/8505] TestRDocRIDriver#test_did_you_mean = 0.01 s 6951s [4988/8505] TestRDocRIDriver#test_add_extension_modules_empty = 0.00 s 6951s [4989/8505] TestRDocRIDriver#test_add_extension_modules_many = 0.03 s 6951s [4990/8505] TestRDocRIDriver#test_display_method = 0.02 s 6951s [4991/8505] TestRDocRIDriver#test_add_extension_modules_many_no_doc = 0.02 s 6951s [4992/8505] TestRDocRIDriver#test_formatter = 0.00 s 6951s [4993/8505] TestRDocRIDriver#test_add_method_documentation = 0.02 s 6951s [4994/8505] TestRDocRIDriver#test_filter_methods_not_found = 0.03 s 6951s [4995/8505] TestRDocRIDriver#test_display_name_not_found_special = 0.02 s 6951s [4996/8505] TestRDocRIDriver#test_classes = 0.03 s 6951s [4997/8505] TestRDocRIDriver#test_self_dump = 0.04 s 6951s [4998/8505] TestRDocRIDriver#test_display_page_extension = 0.03 s 6951s [4999/8505] TestRDocRIDriver#test_parse_name_namespace = 0.00 s 6951s [5000/8505] TestRDocRIDriver#test_add_method_list = 0.00 s 6951s [5001/8505] TestRDocRIDriver#test_list_known_classes_name = 0.02 s 6951s [5002/8505] TestRDocRIDriver#test_display_page_list = 0.02 s 6951s [5003/8505] TestRDocRIDriver#test_list_methods_matching = 0.02 s 6952s [5004/8505] TestRDocRIDriver#test_display_class_module = 0.02 s 6952s [5005/8505] TestRDocRIDriver#test_add_extends = 0.02 s 6952s [5006/8505] TestRDocRIDriver#test_list_methods_matching_regexp = 0.03 s 6952s [5007/8505] TestRDocRIDriver#test_parse_name_special = 0.00 s 6952s [5008/8505] TestRDocRIDriver#test_parse_name_page_extenson = 0.00 s 6952s [5009/8505] TestRDocRIDriver#test_parse_name_method = 0.00 s 6952s [5010/8505] TestRDocRIDriver#test_display_page_add_extension = 0.03 s 6952s [5011/8505] TestRDocRIDriver#test_display = 0.00 s 6952s [5012/8505] TestRDocRIDriver#test_class_document = 0.04 s 6952s [5013/8505] TestRDocRIDriver#test_display_page_ignore_directory = 0.03 s 6952s [5014/8505] TestRDocRIDriver#test_expand_class_3 = 0.01 s 6952s [5015/8505] TestRDocRIDriver#test_load_method_inherited = 0.03 s 6952s [5016/8505] TestRDocRIDriver#test_add_extension_modules_one = 0.02 s 6952s [5017/8505] TestRDocRIDriver#test_method_type = 0.00 s 6952s [5018/8505] TestRDocRIDriver#test_parse_name_page = 0.00 s 6952s [5019/8505] TestRDocRIDriver#test_display_class_superclass = 0.03 s 6952s [5020/8505] TestRDocRIDriver#test_load_method_missing = 0.02 s 6952s [5021/8505] TestRDocRIDriver#test_name_regexp = 0.00 s 6952s [5022/8505] TestRDocRIDriver#test_display_class = 0.03 s 6952s [5023/8505] TestRDocRIDriver#test_complete = 0.00 s 6952s [5024/8505] TestRDocRIDriver#test_find_methods_method = 0.02 s 6952s [5025/8505] TestRDocRIDriver#test_display_class_page = 0.00 s 6952s [5026/8505] TestRDocRIDriver#test_display_page = 0.04 s 6952s [5027/8505] TestRDocRIDriver#test_page_stdout = 0.00 s 6952s [5028/8505] TestRDocRIDriver#test_add_also_in_empty = 0.01 s 6952s [5029/8505] TestRDocRIDriver#test_find_methods = 0.03 s 6952s [5030/8505] TestRDocRIDriver#test_display_page_ambiguous = 0.03 s 6952s [5031/8505] TestRDocSingleClass#test_definition = 0.00 s 6952s [5032/8505] TestRDocSingleClass#test_aref_prefix = 0.00 s 6952s [5033/8505] Psych::Nodes::TestEnumerable#test_returns_enumerator = 0.00 s 6952s [5034/8505] Psych::Nodes::TestEnumerable#test_alias = 0.00 s 6952s [5035/8505] Psych::Nodes::TestEnumerable#test_scalar = 0.00 s 6952s [5036/8505] Psych::Nodes::TestEnumerable#test_includes_enumerable = 0.00 s 6952s [5037/8505] Psych::Nodes::TestEnumerable#test_mapping = 0.00 s 6952s [5038/8505] Psych::Nodes::TestEnumerable#test_sequence = 0.00 s 6952s [5039/8505] TestRDocConstant#test_marshal_load = 0.03 s 6952s [5040/8505] TestRDocConstant#test_documented_eh_alias = 0.03 s 6952s [5041/8505] TestRDocConstant#test_is_alias_for = 0.03 s 6952s [5042/8505] TestRDocConstant#test_marshal_round_trip = 0.03 s 6952s [5043/8505] TestRDocConstant#test_marshal_dump = 0.03 s 6952s [5044/8505] TestRDocConstant#test_path = 0.02 s 6952s [5045/8505] TestRDocConstant#test_marshal_load_version_0 = 0.03 s 6952s [5046/8505] TestRDocConstant#test_full_name = 0.03 s 6952s [5047/8505] TestRDocConstant#test_documented_eh = 0.02 s 6952s [5048/8505] TestZlib#test_deflate = 0.00 s 6952s [5049/8505] TestZlib#test_crc_table = 0.01 s 6952s [5050/8505] TestZlib#test_gzip = 0.01 s 6952s [5051/8505] TestZlib#test_inflate = 0.00 s 6952s [5052/8505] TestZlib#test_adler32_combine = 0.00 s 6952s [5053/8505] TestZlib#test_version = 0.00 s 6952s [5054/8505] TestZlib#test_crc32_combine = 0.00 s 6952s [5055/8505] JSONCommonInterfaceTest#test_deep_const_get = 0.02 s 6952s [5056/8505] JSONCommonInterfaceTest#test_parse = 0.00 s 6952s [5057/8505] JSONCommonInterfaceTest#test_load_null = 0.01 s 6952s [5058/8505] JSONCommonInterfaceTest#test_load_file_with_option! = 0.00 s 6952s [5059/8505] JSONCommonInterfaceTest#test_dump = 0.01 s 6952s [5060/8505] JSONCommonInterfaceTest#test_JSON = 0.00 s 6952s [5061/8505] JSONCommonInterfaceTest#test_dump_should_modify_defaults = 0.00 s 6952s [5062/8505] JSONCommonInterfaceTest#test_parse_bang = 0.00 s 6952s [5063/8505] JSONCommonInterfaceTest#test_load_with_options = 0.00 s 6952s [5064/8505] JSONCommonInterfaceTest#test_fast_generate = 0.00 s 6952s [5065/8505] JSONCommonInterfaceTest#test_generator = 0.00 s 6952s [5066/8505] JSONCommonInterfaceTest#test_index = 0.00 s 6952s [5067/8505] JSONCommonInterfaceTest#test_state = 0.00 s 6952s [5068/8505] JSONCommonInterfaceTest#test_pretty_generate = 0.01 s 6952s [5069/8505] JSONCommonInterfaceTest#test_load_file! = 0.01 s 6952s [5070/8505] JSONCommonInterfaceTest#test_load = 0.00 s 6952s [5071/8505] JSONCommonInterfaceTest#test_load_file = 0.00 s 6952s [5072/8505] JSONCommonInterfaceTest#test_load_file_with_option = 0.00 s 6952s [5073/8505] JSONCommonInterfaceTest#test_generate = 0.00 s 6952s [5074/8505] JSONCommonInterfaceTest#test_create_id = 0.00 s 6952s [5075/8505] JSONCommonInterfaceTest#test_parser = 0.00 s 6952s [5076/8505] TestRDocText#test_strip_hashes = 0.00 s 6952s [5077/8505] TestRDocText#test_parse_format_tomdoc = 0.00 s 6952s [5078/8505] TestRDocText#test_parse_empty_newline = 0.00 s 6952s [5079/8505] TestRDocText#test_parse_comment = 0.00 s 6952s [5080/8505] TestRDocText#test_to_html_html_tag = 0.00 s 6952s [5081/8505] TestRDocText#test_parse = 0.00 s 6952s [5082/8505] TestRDocText#test_to_html_apostrophe = 0.00 s 6952s [5083/8505] TestRDocText#test_strip_stars_document_method = 0.00 s 6952s [5084/8505] TestRDocText#test_strip_hashes_encoding = 0.00 s 6952s [5085/8505] TestRDocText#test_strip_stars_encoding2 = 0.00 s 6952s [5086/8505] TestRDocText#test_expand_tabs_encoding = 0.00 s 6952s [5087/8505] TestRDocText#test_strip_newlines = 0.00 s 6952s [5088/8505] TestRDocText#test_to_html_backslash = 0.00 s 6952s [5089/8505] TestRDocText#test_to_html_tt_tag_mismatch = 0.00 s 6952s [5090/8505] TestRDocText#test_strip_newlines_encoding = 0.00 s 6952s [5091/8505] TestRDocText#test_snippet_comment = 0.00 s 6952s [5092/8505] TestRDocText#test_markup_string = 0.00 s 6952s [5093/8505] TestRDocText#test_normalize_comment_hash = 0.00 s 6952s [5094/8505] TestRDocText#test_strip_stars_encoding = 0.00 s 6952s [5095/8505] TestRDocText#test_parse_format_rd = 0.00 s 6952s [5096/8505] TestRDocText#test_normalize_comment_stars_single_space = 0.00 s 6952s [5097/8505] TestRDocText#test_flush_left = 0.00 s 6952s [5098/8505] TestRDocText#test_to_html_dash = 0.00 s 6952s [5099/8505] TestRDocText#test_parse_empty = 0.00 s 6952s [5100/8505] TestRDocText#test_to_html_copyright = 0.00 s 6952s [5101/8505] TestRDocText#test_expand_tabs = 0.00 s 6952s [5102/8505] TestRDocText#test_to_html_encoding = 0.00 s 6952s [5103/8505] TestRDocText#test_to_html_br = 0.00 s 6952s [5104/8505] TestRDocText#test_to_html_double_backtick = 0.00 s 6952s [5105/8505] TestRDocText#test_parse_document = 0.00 s 6952s [5106/8505] TestRDocText#test_strip_stars = 0.00 s 6952s [5107/8505] TestRDocText#test_to_html_registered_trademark = 0.00 s 6952s [5108/8505] TestRDocText#test_to_html_double_quote_quot = 0.00 s 6952s [5109/8505] TestRDocText#test_parse_format_markdown = 0.01 s 6952s [5110/8505] TestRDocText#test_strip_stars_document_method_special = 0.00 s 6952s [5111/8505] TestRDocText#test_flush_left_encoding = 0.01 s 6952s [5112/8505] TestRDocText#test_strip_stars_no_stars = 0.00 s 6952s [5113/8505] TestRDocText#test_to_html_ellipsis = 0.00 s 6952s [5114/8505] TestRDocText#test_to_html_double_tick = 0.00 s 6952s [5115/8505] TestRDocText#test_snippet = 0.01 s 6952s [5116/8505] TestRDocText#test_parse_newline = 0.00 s 6952s [5117/8505] TestRDocText#test_self_encode_fallback = 0.00 s 6952s [5118/8505] TestRDocText#test_normalize_comment_stars_single_double_space = 0.00 s 6952s [5119/8505] TestRDocText#test_to_html_apostrophe_entity = 0.00 s 6952s [5120/8505] TestRDocText#test_to_html_tt_tag = 0.00 s 6952s [5121/8505] TestRDocText#test_to_html_double_quote = 0.00 s 6952s [5122/8505] TestRDocText#test_snippet_short = 0.00 s 6952s [5123/8505] TestRDocText#test_markup_comment = 0.00 s 6953s [5124/8505] TestEtc#test_uname = 0.00 s 6953s [5125/8505] TestEtc#test_nprocessors = 0.00 s 6953s [5126/8505] TestEtc#test_getgrgid = 0.01 s 6953s [5127/8505] TestEtc#test_getpwuid = 0.01 s 6953s [5128/8505] TestEtc#test_pathconf = 0.00 s 6953s [5129/8505] TestEtc#test_group = 0.00 s 6953s [5130/8505] TestEtc#test_getgrnam = 0.01 s 6953s [5131/8505] TestEtc#test_ractor = 0.00 s 6953s [5132/8505] TestEtc#test_getpwnam = 0.00 s 6953s [5133/8505] TestEtc#test_passwd_with_low_level_api = 0.00 s 6953s [5134/8505] TestEtc#test_group_with_low_level_api = 0.00 s 6953s [5135/8505] TestEtc#test_sysconf = 0.00 s 6953s [5136/8505] TestEtc#test_getlogin = 0.00 s 6953s [5137/8505] TestEtc#test_confstr = 0.00 s 6953s [5138/8505] TestEtc#test_passwd = 0.01 s 6953s [5139/8505] TestIRB::TestHistory#test_history_save_bignum = 0.01 s 6953s [5140/8505] TestIRB::TestHistory#test_history_concurrent_use = 0.02 s 6953s [5141/8505] TestIRB::TestHistory#test_history_save_1 = 0.00 s 6953s [5142/8505] TestIRB::TestHistory#test_history_save_100 = 0.00 s 6953s [5143/8505] TestIRB::TestHistory#test_history_save_minus_as_infinity = 0.00 s 6953s [5144/8505] Psych::TestClass#test_dump = 0.00 s 6953s [5145/8505] Psych::TestClass#test_dump_module = 0.00 s 6953s [5146/8505] Psych::TestClass#test_cycle = 0.00 s 6953s [5147/8505] Psych::TestClass#test_cycle_anonymous_module = 0.00 s 6953s [5148/8505] Psych::TestClass#test_cycle_anonymous_class = 0.00 s 6953s [5149/8505] Psych::TestClass#test_cycle_module = 0.00 s 6953s [5150/8505] TestLogPeriod#test_previous_period_end = 0.01 s 6953s [5151/8505] TestLogPeriod#test_next_rotate_time = 0.00 s 6953s [5152/8505] TestLogPeriod#test_next_rotate_time_extreme_cases = 0.00 s 6953s [5153/8505] TestLogPeriod#test_previous_period_end_extreme_cases = 0.00 s 6957s [5154/8505] TestIRB::TestOption#test_end_of_option = 4.11 s 6957s [5155/8505] PrettyPrintTest::WadlerExample#test_hello_07_08 = 0.01 s 6957s [5156/8505] PrettyPrintTest::WadlerExample#test_hello_13 = 0.00 s 6957s [5157/8505] PrettyPrintTest::WadlerExample#test_tree_alt_19_20 = 0.01 s 6957s [5158/8505] PrettyPrintTest::WadlerExample#test_hello_09_10 = 0.00 s 6957s [5159/8505] PrettyPrintTest::WadlerExample#test_tree_23_43 = 0.01 s 6957s [5160/8505] PrettyPrintTest::WadlerExample#test_tree_alt_50 = 0.00 s 6957s [5161/8505] PrettyPrintTest::WadlerExample#test_hello_00_06 = 0.00 s 6957s [5162/8505] PrettyPrintTest::WadlerExample#test_tree_00_19 = 0.01 s 6957s [5163/8505] PrettyPrintTest::WadlerExample#test_tree_alt_00_18 = 0.00 s 6957s [5164/8505] PrettyPrintTest::WadlerExample#test_tree_alt_20_49 = 0.00 s 6957s [5165/8505] PrettyPrintTest::WadlerExample#test_hello_11_12 = 0.00 s 6957s [5166/8505] PrettyPrintTest::WadlerExample#test_tree_20_22 = 0.00 s 6957s [5167/8505] PrettyPrintTest::WadlerExample#test_tree_44 = 0.00 s 6957s [5168/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_cr = 0.00 s 6957s [5169/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_cr_middle_line = 0.00 s 6957s [5170/8505] TestCSVParseGeneral::DifferentOFS#test_mastering_regex_example = 0.00 s 6957s [5171/8505] TestCSVParseGeneral::DifferentOFS#test_aras_edge_cases = 0.01 s 6957s [5172/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_cr_lf = 0.00 s 6957s [5173/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_controls_lookahead = 0.00 s 6957s [5174/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_in_extended_column_not_exceeding = 0.00 s 6957s [5175/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_illegal_quote_middle_line = 0.00 s 6957s [5176/8505] TestCSVParseGeneral::DifferentOFS#test_field_size_limit_in_extended_column_exceeding = 0.00 s 6957s [5177/8505] TestCSVParseGeneral::DifferentOFS#test_non_regex_edge_cases = 0.00 s 6957s [5178/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_unclosed_quote = 0.01 s 6957s [5179/8505] TestCSVParseGeneral::DifferentOFS#test_the_parse_fails_fast_when_it_can_for_unquoted_fields = 0.00 s 6957s [5180/8505] TestCSVParseGeneral::DifferentOFS#test_rob_edge_cases = 0.01 s 6957s [5181/8505] TestCSVParseGeneral::DifferentOFS#test_row_sep_auto_lf = 0.00 s 6957s [5182/8505] TestCSVParseGeneral::DifferentOFS#test_malformed_csv_cr_first_line = 0.00 s 6957s [5183/8505] TestCSVParseGeneral::DifferentOFS#test_seeked_string_io = 0.00 s 6957s [5184/8505] TestCSVParseGeneral::DifferentOFS#test_james_edge_cases = 0.00 s 6957s [5185/8505] TestCSVParseGeneral::DifferentOFS#test_the_parse_fails_fast_when_it_can_for_unescaped_quotes = 0.00 s 6957s [5186/8505] TestCSVParseGeneral::DifferentOFS#test_std_lib_csv = 0.02 s 6957s [5187/8505] TestCSVParseEach::DifferentOFS#test_twice = 0.00 s 6957s [5188/8505] TestRDocMarkupToJoinedParagraph#test_accept_paragraph_break = 0.00 s 6957s [5189/8505] TestRDocMarkupToJoinedParagraph#test_accept_paragraph = 0.00 s 6957s [5190/8505] TestZlibGzipWriter#test_write = 0.00 s 6957s [5191/8505] TestZlibGzipWriter#test_putc = 0.00 s 6957s [5192/8505] TestZlibGzipWriter#test_puts = 0.00 s 6957s [5193/8505] TestZlibGzipWriter#test_writer_wrap = 0.00 s 6957s [5194/8505] TestZlibGzipWriter#test_invalid_new = 0.00 s 6957s [5195/8505] TestZlibGzipWriter#test_zlib_writer_buffered_write = 0.00 s 6957s [5196/8505] TestZlibGzipWriter#test_open = 0.00 s 6957s [5197/8505] TestZlibGzipWriter#test_double_close = 0.00 s 6957s [5198/8505] TestTempfile#test_extend = 0.00 s 6957s [5199/8505] TestTempfile#test_size_flushes_buffer_before_determining_file_size = 0.00 s 6957s [5200/8505] TestTempfile#test_saves_in_given_directory = 0.00 s 6957s [5201/8505] TestTempfile#test_new_traversal_dir = 0.00 s 6957s [5202/8505] TestTempfile#test_unlink_silently_fails_on_windows = 0.00 s 6957s [5203/8505] TestTempfile#test_create_default_basename = 0.00 s 6957s [5204/8505] TestTempfile#test_concurrency = 0.03 s 6957s [5205/8505] TestTempfile#test_basic = 0.00 s 6957s [5206/8505] TestTempfile#test_default_basename = 0.00 s 6957s [5207/8505] TestTempfile#test_close_bang_does_not_unlink_if_already_unlinked = 0.00 s 6957s [5208/8505] TestTempfile#test_close_with_unlink_now_true_does_not_unlink_if_already_unlinked = 0.00 s 6957s [5209/8505] TestTempfile#test_create_without_block = 0.00 s 6957s [5210/8505] TestTempfile#test_create_with_block = 0.00 s 6957s [5211/8505] TestTempfile#test_close_with_unlink_now_true_works = 0.00 s 6957s [5212/8505] TestTempfile#test_close_does_not_make_path_nil = 0.00 s 6959s [5213/8505] TestTempfile#test_tempfile_is_unlinked_when_ruby_exits = 2.51 s 6959s [5214/8505] TestTempfile#test_size_on_empty_file = 0.00 s 6959s [5215/8505] TestTempfile#test_tempfile_encoding_nooption = 0.00 s 6959s [5216/8505] TestTempfile#test_size_works_if_file_is_closed = 0.00 s 6959s [5217/8505] TestTempfile#test_basename_with_suffix = 0.00 s 6960s [5218/8505] TestTempfile#test_basename = 0.00 s 6960s [5219/8505] TestTempfile#test_open_traversal_dir = 0.00 s 6960s [5220/8505] TestTempfile#test_create_traversal_dir = 0.00 s 6960s [5221/8505] TestTempfile#test_close_flushes_buffer = 0.00 s 6960s [5222/8505] TestTempfile#test_unlink = 0.00 s 6960s [5223/8505] TestTempfile#test_close_and_close_p = 0.00 s 6960s [5224/8505] TestTempfile#test_leackchecker = 0.00 s 6960s [5225/8505] TestTempfile#test_unlink_before_close_works_on_posix_systems = 0.00 s 6960s [5226/8505] TestTempfile#test_close_bang_works = 0.00 s 6962s [5227/8505] TestTempfile#test_tempfile_finalizer_does_not_run_if_unlinked = 2.44 s 6962s [5228/8505] TestTempfile#test_binmode = 0.00 s 6962s [5229/8505] TestFind::TestInclude#test_functional_call = 0.00 s 6962s [5230/8505] Psych::TestSet#test_loaded_class = 0.00 s 6962s [5231/8505] Psych::TestSet#test_roundtrip = 0.01 s 6962s [5232/8505] Psych::TestSet#test_dump = 0.00 s 6962s [5233/8505] Psych::TestSet#test_load_from_yaml = 0.00 s 6962s [5234/8505] Psych::TestSet#test_set_self_reference = 0.00 s 6962s [5235/8505] Psych::TestSet#test_set_shorthand = 0.00 s 6962s [5236/8505] TestCSVWriteConvertersGenerate#test_one = 0.00 s 6962s [5237/8505] TestCSVWriteConvertersGenerate#test_empty_value = 0.01 s 6962s [5238/8505] TestCSVWriteConvertersGenerate#test_nil_value = 0.00 s 6962s [5239/8505] TestCSVWriteConvertersGenerate#test_multiple = 0.00 s 6962s [5240/8505] TestRDocRequire#test_initialize = 0.03 s 6962s [5241/8505] TestRDocMarkupIndentedParagraph#test_text = 0.00 s 6962s [5242/8505] TestRDocMarkupIndentedParagraph#test_equals2 = 0.00 s 6962s [5243/8505] TestRDocMarkupIndentedParagraph#test_accept = 0.00 s 6962s [5244/8505] TestRDocMarkupIndentedParagraph#test_initialize = 0.00 s 6962s [5245/8505] TestRDocMarkupIndentedParagraph#test_text_break = 0.00 s 6962s [5246/8505] Psych::TestObject#test_tag_round_trip = 0.00 s 6962s [5247/8505] Psych::TestObject#test_dump_with_tag = 0.00 s 6962s [5248/8505] Psych::TestObject#test_cyclic_references = 0.00 s 6962s [5249/8505] Psych::TestObject#test_cyclic_reference_uses_alias = 0.00 s 6962s [5250/8505] TestTupleBag#test_delete = 0.00 s 6962s [5251/8505] TestTupleBag#test_has_expires_eh = 0.00 s 6962s [5252/8505] TestTupleBag#test_find_all = 0.00 s 6962s [5253/8505] TestTupleBag#test_push = 0.00 s 6962s [5254/8505] TestTupleBag#test_delete_unless_alive = 0.00 s 6962s [5255/8505] TestTupleBag#test_find = 0.00 s 6962s [5256/8505] TestTupleBag#test_find_all_template = 0.00 s 6962s [5257/8505] TestRDocExtend#test_module_extended = 0.03 s 6962s [5258/8505] TestRDocExtend#test_module = 0.02 s 6962s [5259/8505] Psych::TestYamlSpecialCases#test_arrows = 0.00 s 6962s [5260/8505] Psych::TestYamlSpecialCases#test_inf = 0.00 s 6962s [5261/8505] Psych::TestYamlSpecialCases#test_thousand = 0.01 s 6962s [5262/8505] Psych::TestYamlSpecialCases#test_n = 0.00 s 6962s [5263/8505] Psych::TestYamlSpecialCases#test_empty_string = 0.00 s 6962s [5264/8505] Psych::TestYamlSpecialCases#test_arrows_hash = 0.00 s 6962s [5265/8505] Psych::TestYamlSpecialCases#test_false = 0.01 s 6962s [5266/8505] Psych::TestYamlSpecialCases#test_0xC = 0.00 s 6962s [5267/8505] Psych::TestYamlSpecialCases#test_off = 0.01 s 6962s [5268/8505] Psych::TestYamlSpecialCases#test_NaN = 0.01 s 6962s [5269/8505] Psych::TestYamlSpecialCases#test_null = 0.00 s 6962s [5270/8505] Psych::TestYamlSpecialCases#test_8 = 0.00 s 6962s [5271/8505] TestRDocRd#test_class_parse_begin_end = 0.00 s 6962s [5272/8505] TestRDocRd#test_class_parse_newline = 0.00 s 6962s [5273/8505] TestRDocRd#test_class_parse = 0.00 s 6962s [5274/8505] TestRDocAlias#test_to_s = 0.03 s 6962s [5275/8505] TestRDocTokenStream#test_class_to_html_empty = 0.00 s 6962s [5276/8505] TestRDocTokenStream#test_class_to_html = 0.00 s 6962s [5277/8505] TestRDocTokenStream#test_tokens_to_s = 0.00 s 6962s [5278/8505] Psych::TestStruct#test_roundtrip = 0.00 s 6962s [5279/8505] Psych::TestStruct#test_load = 0.00 s 6962s [5280/8505] Psych::TestStruct#test_self_referential_struct = 0.00 s 6962s [5281/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_non_chunked_streamed_HTTP_session_write = 0.16 s 6963s [5282/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_HTTP_session_write = 0.34 s 6963s [5283/8505] TestNetHTTP_v1_2_chunked#test_s_post_form = 0.38 s 6964s [5284/8505] TestNetHTTP_v1_2_chunked#test_request = 1.11 s 6964s [5285/8505] TestNetHTTP_v1_2_chunked#test_set_form_with_file = 0.21 s 6965s [5286/8505] TestNetHTTP_v1_2_chunked#test_chunked_break = 0.09 s 6965s [5287/8505] TestNetHTTP_v1_2_chunked#test_post = 0.05 s 6965s [5288/8505] TestNetHTTP_v1_2_chunked#test_s_get_response = 0.28 s 6965s [5289/8505] TestNetHTTP_v1_2_chunked#test_timeout_during_HTTP_session = 0.41 s 6965s [5290/8505] TestNetHTTP_v1_2_chunked#test_get__crlf = 0.02 s 6966s [5291/8505] TestNetHTTP_v1_2_chunked#test_send_request = 0.22 s 6966s [5292/8505] TestNetHTTP_v1_2_chunked#test_set_form = 0.16 s 6966s [5293/8505] TestNetHTTP_v1_2_chunked#test_s_get = 0.18 s 6966s [5294/8505] TestNetHTTP_v1_2_chunked#test_get__implicit_start = 0.07 s 6966s [5295/8505] TestNetHTTP_v1_2_chunked#test_head = 0.01 s 6966s [5296/8505] TestNetHTTP_v1_2_chunked#test_patch = 0.22 s 6966s [5297/8505] TestNetHTTP_v1_2_chunked#test_s_post = 0.06 s 6966s [5298/8505] TestNetHTTP_v1_2_chunked#test_get__break = 0.03 s 6967s [5299/8505] TestNetHTTP_v1_2_chunked#test_get = 0.52 s 6967s [5300/8505] TestNetHTTP_v1_2_chunked#test_get2 = 0.06 s 6967s [5301/8505] TestNetHTTP_v1_2_chunked#test_s_start = 0.01 s 6967s [5302/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_minute = 0.01 s 6967s [5303/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_under_second_offset = 0.01 s 6967s [5304/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_converter = 0.01 s 6967s [5305/8505] TestCSVDataConverters::DifferentOFS#test_builtin_integer_converter = 0.01 s 6967s [5306/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_date = 0.01 s 6967s [5307/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_second = 0.00 s 6967s [5308/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_utc = 0.00 s 6967s [5309/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_offset = 0.00 s 6967s [5310/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter = 0.00 s 6967s [5311/8505] TestCSVDataConverters::DifferentOFS#test_builtin_float_converter = 0.00 s 6967s [5312/8505] TestCSVDataConverters::DifferentOFS#test_builtin_date_time_converter_iso8601_under_second = 0.00 s 6967s [5313/8505] TestTimeout#test_rescue_exit = 0.01 s 6967s [5314/8505] TestTimeout#test_yield_param = 0.00 s 6967s [5315/8505] TestTimeout#test_queue = 0.01 s 6967s [5316/8505] TestTimeout#test_exit_exception = 0.00 s 6967s [5317/8505] TestTimeout#test_custom_exception = 0.02 s 6967s [5318/8505] TestTimeout#test_non_timing_out_code_is_successful = 0.00 s 6967s [5319/8505] TestTimeout#test_timeout = 0.10 s 6967s [5320/8505] TestTimeout#test_raise_with_message = 0.00 s 6967s [5321/8505] JSONParserTest#test_parse_simple_arrays = 0.00 s 6967s [5322/8505] JSONParserTest#test_error_message_encoding = 0.00 s 6967s [5323/8505] JSONParserTest#test_backslash = 0.00 s 6967s [5324/8505] JSONParserTest#test_some_wrong_inputs = 0.01 s 6967s [5325/8505] JSONParserTest#test_parse_object = 0.00 s 6967s [5326/8505] JSONParserTest#test_parse_object_custom_hash_derived_class = 0.00 s 6967s [5327/8505] JSONParserTest#test_parsing_frozen_ascii8bit_string = 0.00 s 6967s [5328/8505] JSONParserTest#test_parse_array_custom_non_array_derived_class = 0.00 s 6967s [5329/8505] JSONParserTest#test_symbolize_names = 0.00 s 6967s [5330/8505] JSONParserTest#test_generate_of_core_subclasses = 0.00 s 6967s [5331/8505] JSONParserTest#test_parse_numbers = 0.00 s 6967s [5332/8505] JSONParserTest#test_freeze = 0.00 s 6967s [5333/8505] JSONParserTest#test_parsing = 0.00 s 6967s [5334/8505] JSONParserTest#test_parse_simple_objects = 0.00 s 6967s [5335/8505] JSONParserTest#test_argument_encoding = 0.00 s 6967s [5336/8505] JSONParserTest#test_generate_core_subclasses_with_default_to_json = 0.00 s 6967s [5337/8505] JSONParserTest#test_parse_comments = 0.00 s 6967s [5338/8505] JSONParserTest#test_parse_complex_objects = 0.10 s 6967s [5339/8505] JSONParserTest#test_parse_more_complex_arrays = 0.02 s 6967s [5340/8505] JSONParserTest#test_generate_core_subclasses_with_new_to_json = 0.00 s 6967s [5341/8505] JSONParserTest#test_parse_some_strings = 0.00 s 6967s [5342/8505] JSONParserTest#test_parse_generic_object = 0.00 s 6967s [5343/8505] JSONParserTest#test_parse_object_custom_non_hash_derived_class = 0.00 s 6967s [5344/8505] JSONParserTest#test_construction = 0.00 s 6967s [5345/8505] JSONParserTest#test_parser_reset = 0.00 s 6967s [5346/8505] JSONParserTest#test_parse_json_primitive_values = 0.00 s 6967s [5347/8505] JSONParserTest#test_parse_values = 0.00 s 6967s [5348/8505] JSONParserTest#test_parse_big_integers = 0.00 s 6967s [5349/8505] JSONParserTest#test_parse_bigdecimals = 0.00 s 6967s [5350/8505] JSONParserTest#test_parse_array_custom_array_derived_class = 0.00 s 6967s [5351/8505] JSONParserTest#test_parse_arrays = 0.00 s 6967s [5352/8505] JSONParserTest#test_nesting = 0.00 s 6967s [5353/8505] TestSecureRandom#test_random_number_float_by_zero = 0.01 s 6967s [5354/8505] TestSecureRandom#test_base64 = 0.00 s 6967s [5355/8505] TestSecureRandom#test_repeated_gen_random = 0.00 s 6967s [5356/8505] TestSecureRandom#test_hex = 0.01 s 6967s [5357/8505] TestSecureRandom#test_random_number_int = 0.01 s 6967s [5358/8505] TestSecureRandom#test_alphanumeric = 0.02 s 6967s [5359/8505] TestSecureRandom#test_uuid = 0.00 s 6967s [5360/8505] TestSecureRandom#test_urlsafe_base64 = 0.01 s 6967s [5361/8505] TestSecureRandom#test_random_bytes = 0.00 s 6967s [5362/8505] TestSecureRandom#test_random_number_float = 0.01 s 6967s [5363/8505] TestRelineAsReadlineHistory#test_each__enumerator = 0.00 s 6967s [5364/8505] TestRelineAsReadlineHistory#test_get__negative = 0.02 s 6967s [5365/8505] TestRelineAsReadlineHistory#test_get__out_of_range = 0.01 s 6967s [5366/8505] TestRelineAsReadlineHistory#test_push__operator = 0.01 s 6967s [5367/8505] TestRelineAsReadlineHistory#test_empty_p = 0.00 s 6967s [5368/8505] TestRelineAsReadlineHistory#test_pop = 0.00 s 6967s [5369/8505] TestRelineAsReadlineHistory#test_shift = 0.00 s 6967s [5370/8505] TestRelineAsReadlineHistory#test_push = 0.00 s 6967s [5371/8505] TestRelineAsReadlineHistory#test_set__out_of_range = 0.01 s 6967s [5372/8505] TestRelineAsReadlineHistory#test_length = 0.00 s 6967s [5373/8505] TestRelineAsReadlineHistory#test_each = 0.00 s 6967s [5374/8505] TestRelineAsReadlineHistory#test_delete_at__out_of_range = 0.01 s 6967s [5375/8505] TestRelineAsReadlineHistory#test_set = 0.01 s 6967s [5376/8505] TestRelineAsReadlineHistory#test_get = 0.00 s 6967s [5377/8505] TestRelineAsReadlineHistory#test_push__plural = 0.00 s 6967s [5378/8505] TestRelineAsReadlineHistory#test_to_s = 0.00 s 6967s [5379/8505] TestRelineAsReadlineHistory#test_delete_at = 0.00 s 6967s [5380/8505] TestOptionParser::SummaryTest#test_into = 0.00 s 6967s [5381/8505] TestOptionParser::SummaryTest#test_nonopt_pattern = 0.00 s 6967s [5382/8505] TestOptionParser::SummaryTest#test_summary_containing_space = 0.00 s 6968s [5383/8505] TestOptionParser::SummaryTest#test_order = 0.00 s 6968s [5384/8505] TestOptionParser::SummaryTest#test_ver = 0.00 s 6968s [5385/8505] TestOptionParser::SummaryTest#test_short_clash = 0.01 s 6968s [5386/8505] TestOptionParser::SummaryTest#test_summary = 0.00 s 6968s [5387/8505] TestOptionParser::SummaryTest#test_banner_from_progname = 0.00 s 6968s [5388/8505] TestOptionParser::SummaryTest#test_regexp = 0.00 s 6968s [5389/8505] TestOptionParser::SummaryTest#test_banner = 0.00 s 6968s [5390/8505] TestOptionParser::SummaryTest#test_permute = 0.00 s 6968s [5391/8505] TestOptionParser::SummaryTest#test_require_exact = 0.01 s 6968s [5392/8505] TestUnicodeNormalize#test_non_UTF_8 = 0.01 s 6968s [5393/8505] TestUnicodeNormalize#test_raise_exception_for_non_unicode_encoding = 0.00 s 6968s [5394/8505] TestUnicodeNormalize#test_partial_jamo_compose = 0.01 s 6968s [5395/8505] TestUnicodeNormalize#test_singleton_with_accents = 0.00 s 6968s [5396/8505] TestUnicodeNormalize#test_partial_jamo_decompose = 0.00 s 6968s [5397/8505] TestUnicodeNormalize#test_us_ascii = 0.00 s 6968s [5398/8505] TestUnicodeNormalize#test_hangul_plus_accents = 0.00 s 6968s [5399/8505] TestUnicodeNormalize#test_no_trailing_jamo = 0.00 s 6968s [5400/8505] TestUnicodeNormalize#test_reiwa = 0.00 s 6968s [5401/8505] TestOptionParser::CClass#test_into = 0.00 s 6968s [5402/8505] TestOptionParser::CClass#test_nonopt_pattern = 0.00 s 6968s [5403/8505] TestOptionParser::CClass#test_no_argument = 0.01 s 6968s [5404/8505] TestOptionParser::CClass#test_order = 0.00 s 6968s [5405/8505] TestOptionParser::CClass#test_regexp = 0.00 s 6968s [5406/8505] TestOptionParser::CClass#test_required_argument = 0.00 s 6968s [5407/8505] TestOptionParser::CClass#test_permute = 0.00 s 6968s [5408/8505] TestOptionParser::CClass#test_require_exact = 0.01 s 6969s [5409/8505] TestDateParse#test_length_limit = 1.03 s 6969s [5410/8505] TestDateParse#test__parse_slash_exp = 0.00 s 6969s [5411/8505] TestDateParse#test_parse = 0.00 s 6969s [5412/8505] TestDateParse#test_parse__d_to_s = 0.00 s 6969s [5413/8505] TestDateParse#test_xmlschema = 0.00 s 6969s [5414/8505] TestDateParse#test__httpdate = 0.01 s 6969s [5415/8505] TestDateParse#test__xmlschema = 0.00 s 6969s [5416/8505] TestDateParse#test__rfc2822 = 0.00 s 6969s [5417/8505] TestDateParse#test_rfc2822 = 0.00 s 6969s [5418/8505] TestDateParse#test_parse__time = 0.01 s 6969s [5419/8505] TestDateParse#test_parse__2 = 0.00 s 6969s [5420/8505] TestDateParse#test_httpdate = 0.01 s 6969s [5421/8505] TestDateParse#test_date_ractor = 0.00 s 6969s [5422/8505] TestDateParse#test_given_string = 0.01 s 6969s [5423/8505] TestDateParse#test_parse__comp = 0.00 s 6969s [5424/8505] TestDateParse#test_rfc3339 = 0.00 s 6969s [5425/8505] TestDateParse#test__rfc3339 = 0.00 s 6969s [5426/8505] TestDateParse#test_iso8601 = 0.00 s 6969s [5427/8505] TestDateParse#test_parse_utf8 = 0.01 s 6969s [5428/8505] TestDateParse#test__parse__2 = 0.01 s 6969s [5429/8505] TestDateParse#test__parse_odd_offset = 0.00 s 6969s [5430/8505] Random::Formatter::TestInstanceMethods#test_random_number_float_by_zero = 0.00 s 6969s [5431/8505] Random::Formatter::TestInstanceMethods#test_random_number_not_default = 0.01 s 6969s [5432/8505] Random::Formatter::TestInstanceMethods#test_base64 = 0.00 s 6969s [5433/8505] Random::Formatter::TestInstanceMethods#test_hex_encoding = 0.00 s 6969s [5434/8505] Random::Formatter::TestInstanceMethods#test_hex = 0.00 s 6969s [5435/8505] Random::Formatter::TestInstanceMethods#test_random_number_int = 0.00 s 6969s [5436/8505] Random::Formatter::TestInstanceMethods#test_alphanumeric = 0.01 s 6969s [5437/8505] Random::Formatter::TestInstanceMethods#test_uuid = 0.00 s 6969s [5438/8505] Random::Formatter::TestInstanceMethods#test_urlsafe_base64 = 0.01 s 6969s [5439/8505] Random::Formatter::TestInstanceMethods#test_random_bytes = 0.00 s 6969s [5440/8505] Random::Formatter::TestInstanceMethods#test_random_number_float = 0.00 s 6969s [5441/8505] OpenSSL::TestBN#test_gcd = 0.06 s 6969s [5442/8505] OpenSSL::TestBN#test_coerce = 0.01 s 6969s [5443/8505] OpenSSL::TestBN#test_one_p = 0.00 s 6969s [5444/8505] OpenSSL::TestBN#test_random = 0.01 s 6969s [5445/8505] OpenSSL::TestBN#test_zero_p = 0.00 s 6969s [5446/8505] OpenSSL::TestBN#test_exp = 0.00 s 6969s [5447/8505] OpenSSL::TestBN#test_mod_sub = 0.00 s 6969s [5448/8505] OpenSSL::TestBN#test_mod_exp = 0.00 s 6969s [5449/8505] OpenSSL::TestBN#test_odd_p = 0.00 s 6969s [5450/8505] OpenSSL::TestBN#test_num_bits_bytes = 0.00 s 6969s [5451/8505] OpenSSL::TestBN#test_mod_mul = 0.00 s 6969s [5452/8505] OpenSSL::TestBN#test_sqr = 0.00 s 6969s [5453/8505] OpenSSL::TestBN#test_mod_add = 0.00 s 6969s [5454/8505] OpenSSL::TestBN#test_comparison = 0.00 s 6969s [5455/8505] OpenSSL::TestBN#test_mod_sqr = 0.00 s 6969s [5456/8505] TC_OpenStruct#test_to_h_with_block = 0.00 s 6969s [5457/8505] TC_OpenStruct#test_override_subclass = 0.00 s 6969s [5458/8505] TC_OpenStruct#test_inspect = 0.00 s 6969s [5459/8505] TC_OpenStruct#test_class = 0.00 s 6969s [5460/8505] TC_OpenStruct#test_setter = 0.00 s 6969s [5461/8505] TC_OpenStruct#test_allocate_subclass = 0.00 s 6969s [5462/8505] TC_OpenStruct#test_mistaken_subclass = 0.00 s 6969s [5463/8505] TC_OpenStruct#test_override_submodule = 0.00 s 6969s [5464/8505] TC_OpenStruct#test_to_h = 0.00 s 6969s [5465/8505] TC_OpenStruct#test_marshal = 0.00 s 6969s [5466/8505] TC_OpenStruct#test_initialize_subclass = 0.00 s 6969s [5467/8505] TC_OpenStruct#test_respond_to_with_lazy_getter = 0.00 s 6969s [5468/8505] TC_OpenStruct#test_overridden_private_methods = 0.00 s 6969s [5469/8505] TC_OpenStruct#test_access_undefined = 0.00 s 6969s [5470/8505] TC_OpenStruct#test_overridden_public_methods = 0.00 s 6969s [5471/8505] TC_OpenStruct#test_each_pair = 0.00 s 6969s [5472/8505] TC_OpenStruct#test_respond_to_allocated = 0.00 s 6969s [5473/8505] TC_OpenStruct#test_super = 0.00 s 6969s [5474/8505] TC_OpenStruct#test_dig = 0.00 s 6969s [5475/8505] TC_OpenStruct#test_access_original_methods = 0.00 s 6969s [5476/8505] TC_OpenStruct#test_method_missing = 0.00 s 6969s [5477/8505] TC_OpenStruct#test_accessor_defines_method = 0.00 s 6969s [5478/8505] TC_OpenStruct#test_equality = 0.00 s 6969s [5479/8505] TC_OpenStruct#test_legacy_yaml = 0.01 s 6969s [5480/8505] TC_OpenStruct#test_does_not_redefine = 0.00 s 6969s [5481/8505] TC_OpenStruct#test_initialize = 0.00 s 6969s [5482/8505] TC_OpenStruct#test_eql_and_hash = 0.00 s 6969s [5483/8505] TC_OpenStruct#test_delete_field = 0.01 s 6969s [5484/8505] TC_OpenStruct#test_frozen = 0.00 s 6969s [5485/8505] TC_OpenStruct#test_protected_method = 0.01 s 6969s [5486/8505] TC_OpenStruct#test_private_method = 0.00 s 6969s [5487/8505] TC_OpenStruct#test_yaml = 0.01 s 6969s [5488/8505] TC_OpenStruct#test_getter = 0.00 s 6969s [5489/8505] TC_OpenStruct#test_respond_to = 0.00 s 6969s [5490/8505] OpenSSL::TestSSL#test_bad_socket = 0.19 s 6969s [5491/8505] OpenSSL::TestSSL#test_post_connection_check_wildcard_cn = 0.04 s 6969s [5492/8505] OpenSSL::TestSSL#test_unset_OP_ALL = 0.15 s 6969s [5493/8505] OpenSSL::TestSSL#test_sysread_and_syswrite = 0.14 s 6971s [5494/8505] OpenSSL::TestSSL#test_minmax_version = 1.25 s 6971s [5495/8505] OpenSSL::TestSSL#test_copy_stream = 0.10 s 6971s [5496/8505] OpenSSL::TestSSL#test_options_disable_versions = 0.44 s 6972s [5497/8505] OpenSSL::TestSSL#test_parallel = 0.71 s 6972s [5498/8505] OpenSSL::TestSSL#test_socket_open_with_local_address_port_context = 0.15 s 6972s [5499/8505] OpenSSL::TestSSL#test_sync_close_without_connect = 0.05 s 6972s [5500/8505] OpenSSL::TestSSL#test_socket_open = 0.16 s 6972s [5501/8505] OpenSSL::TestSSL#test_ssl_methods_constant = 0.03 s 6972s [5502/8505] OpenSSL::TestSSL#test_socket_open_with_context = 0.13 s 6973s [5503/8505] OpenSSL::TestSSL#test_post_connection_check = 0.33 s 6973s [5504/8505] OpenSSL::TestSSL#test_ctx_options = 0.03 s 6973s [5505/8505] OpenSSL::TestSSL#test_post_connection_check_wildcard_san = 0.03 s 6973s [5506/8505] OpenSSL::TestSSL#test_verify_wildcard = 0.03 s 6973s [5507/8505] OpenSSL::TestSSL#test_set_params_min_version = 0.25 s 6973s [5508/8505] OpenSSL::TestSSL#test_verify_mode_server_cert = 0.17 s 6974s [5509/8505] OpenSSL::TestSSL#test_client_auth_success = 0.23 s 6974s [5510/8505] OpenSSL::TestSSL#test_sync_close = 0.24 s 6974s [5511/8505] OpenSSL::TestSSL#test_close_after_socket_close = 0.13 s 6974s [5512/8505] OpenSSL::TestSSL#test_verify_hostname = 0.03 s 6974s [5513/8505] OpenSSL::TestSSL#test_fallback_scsv = 0.25 s 6974s [5514/8505] OpenSSL::TestSSL#test_fileno = 0.04 s 6974s [5515/8505] TestIRB::ExtendCommand#test_show_source = 0.11 s 6974s [5516/8505] TestIRB::ExtendCommand#test_whereami = 0.08 s 6975s [5517/8505] TestIRB::ExtendCommand#test_measure_with_proc = 0.07 s 6975s [5518/8505] TestIRB::ExtendCommand#test_irb_load = 0.04 s 6975s [5519/8505] TestIRB::ExtendCommand#test_ls_with_no_singleton_class = 0.06 s 6975s [5520/8505] TestIRB::ExtendCommand#test_irb_info_singleline = 0.04 s 6975s [5521/8505] TestIRB::ExtendCommand#test_irb_source = 0.02 s 6975s [5522/8505] TestIRB::ExtendCommand#test_ls = 0.07 s 6975s [5523/8505] TestIRB::ExtendCommand#test_measure = 0.02 s 6975s [5524/8505] TestIRB::ExtendCommand#test_irb_info_lang = 0.02 s 6975s [5525/8505] TestIRB::ExtendCommand#test_measure_with_custom = 0.02 s 6975s [5526/8505] TestIRB::ExtendCommand#test_irb_info_singleline_without_rc_files = 0.01 s 6975s [5527/8505] TestIRB::ExtendCommand#test_measure_enabled_by_rc_with_custom = 0.02 s 6975s [5528/8505] TestIRB::ExtendCommand#test_irb_info_multiline = 0.01 s 6975s [5529/8505] TestIRB::ExtendCommand#test_measure_enabled_by_rc = 0.02 s 6975s [5530/8505] TestIRB::ExtendCommand#test_irb_info_multiline_without_rc_files = 0.01 s 6975s [5531/8505] Psych::Visitors::TestEmitter#test_alias = 0.00 s 6975s [5532/8505] Psych::Visitors::TestEmitter#test_document_implicit_end = 0.00 s 6975s [5533/8505] Psych::Visitors::TestEmitter#test_options = 0.00 s 6975s [5534/8505] Psych::Visitors::TestEmitter#test_stream = 0.00 s 6975s [5535/8505] Psych::Visitors::TestEmitter#test_scalar_with_tag = 0.00 s 6975s [5536/8505] Psych::Visitors::TestEmitter#test_scalar = 0.00 s 6975s [5537/8505] Psych::Visitors::TestEmitter#test_mapping = 0.00 s 6975s [5538/8505] Psych::Visitors::TestEmitter#test_document = 0.00 s 6975s [5539/8505] Psych::Visitors::TestEmitter#test_sequence = 0.00 s 6975s [5540/8505] TestRDocMarkupDocument#test_append_document = 0.00 s 6975s [5541/8505] TestRDocMarkupDocument#test_merge_add = 0.00 s 6975s [5542/8505] TestRDocMarkupDocument#test_equals2_file = 0.00 s 6975s [5543/8505] TestRDocMarkupDocument#test_merge = 0.00 s 6975s [5544/8505] TestRDocMarkupDocument#test_file_equals = 0.00 s 6975s [5545/8505] TestRDocMarkupDocument#test_lt2 = 0.00 s 6975s [5546/8505] TestRDocMarkupDocument#test_table_of_contents_omit_headings_below = 0.00 s 6975s [5547/8505] TestRDocMarkupDocument#test_append = 0.00 s 6975s [5548/8505] TestRDocMarkupDocument#test_equals2 = 0.00 s 6975s [5549/8505] TestRDocMarkupDocument#test_push = 0.00 s 6975s [5550/8505] TestRDocMarkupDocument#test_append_string = 0.00 s 6975s [5551/8505] TestRDocMarkupDocument#test_each = 0.00 s 6975s [5552/8505] TestRDocMarkupDocument#test_table_of_contents = 0.00 s 6975s [5553/8505] TestRDocMarkupDocument#test_empty_eh = 0.00 s 6975s [5554/8505] TestRDocMarkupDocument#test_file_equals_top_level = 0.00 s 6975s [5555/8505] TestRDocMarkupDocument#test_merge_empty = 0.00 s 6975s [5556/8505] TestRDocMarkupDocument#test_empty_eh_document = 0.00 s 6975s [5557/8505] TestRDocMarkupDocument#test_concat = 0.00 s 6975s [5558/8505] TestNetHTTP_v1_2#test_timeout_during_non_chunked_streamed_HTTP_session_write = 0.05 s 6975s [5559/8505] TestNetHTTP_v1_2#test_timeout_during_HTTP_session_write = 0.27 s 6975s [5560/8505] TestNetHTTP_v1_2#test_s_post_form = 0.05 s 6976s [5561/8505] TestNetHTTP_v1_2#test_request = 0.35 s 6976s [5562/8505] TestNetHTTP_v1_2#test_set_form_with_file = 0.08 s 6976s [5563/8505] TestNetHTTP_v1_2#test_post = 0.27 s 6976s [5564/8505] TestNetHTTP_v1_2#test_s_get_response = 0.02 s 6977s [5565/8505] TestNetHTTP_v1_2#test_timeout_during_HTTP_session = 0.41 s 6977s [5566/8505] TestNetHTTP_v1_2#test_get__crlf = 0.01 s 6977s [5567/8505] TestNetHTTP_v1_2#test_send_request = 0.22 s 6977s [5568/8505] TestNetHTTP_v1_2#test_set_form = 0.11 s 6977s [5569/8505] TestNetHTTP_v1_2#test_s_get = 0.03 s 6977s [5570/8505] TestNetHTTP_v1_2#test_get__implicit_start = 0.02 s 6977s [5571/8505] TestNetHTTP_v1_2#test_head = 0.02 s 6977s [5572/8505] TestNetHTTP_v1_2#test_send_large_POST_request = 0.22 s 6977s [5573/8505] TestNetHTTP_v1_2#test_patch = 0.21 s 6977s [5574/8505] TestNetHTTP_v1_2#test_s_post = 0.03 s 6977s [5575/8505] TestNetHTTP_v1_2#test_get = 0.17 s 6978s [5576/8505] TestNetHTTP_v1_2#test_get2 = 0.02 s 6978s [5577/8505] TestNetHTTP_v1_2#test_s_start = 0.01 s 6978s [5578/8505] TestNetHTTP#test_proxy_address = 0.01 s 6978s [5579/8505] TestNetHTTP#test_proxy_eh_ENV_with_user = 0.01 s 6978s [5580/8505] TestNetHTTP#test_addr_port = 0.00 s 6978s [5581/8505] TestNetHTTP#test_edit_path = 0.00 s 6978s [5582/8505] TestNetHTTP#test_newobj = 0.00 s 6978s [5583/8505] TestNetHTTP#test_class_Proxy_from_ENV = 0.00 s 6978s [5584/8505] TestNetHTTP#test_failure_message_includes_failed_domain_and_port = 0.00 s 6978s [5585/8505] TestNetHTTP#test_proxy_eh_no_proxy = 0.00 s 6978s [5586/8505] TestNetHTTP#test_proxy_eh_ENV_none_set = 0.00 s 6978s [5587/8505] TestNetHTTP#test_proxy_port_ENV = 0.00 s 6978s [5588/8505] TestNetHTTP#test_proxy_eh_ENV_no_proxy = 0.00 s 6978s [5589/8505] TestNetHTTP#test_proxy_eh_ENV = 0.00 s 6978s [5590/8505] TestNetHTTP#test_edit_path_proxy = 0.00 s 6978s [5591/8505] TestNetHTTP#test_proxy_address_no_proxy = 0.00 s 6978s [5592/8505] TestNetHTTP#test_class_Proxy = 0.00 s 6978s [5593/8505] TestNetHTTP#test_proxy_port = 0.00 s 6978s [5594/8505] TestNetHTTP#test_proxy_from_env_ENV = 0.00 s 6978s [5595/8505] TestNetHTTP#test_proxy_eh_ENV_with_urlencoded_user = 0.00 s 6978s [5596/8505] TestNetHTTP#test_proxy_address_ENV = 0.00 s 6978s [5597/8505] TestRDocRDoc#test_parse_file_binary = 0.00 s 6978s [5598/8505] TestRDocRDoc#test_parse_file_page_dir = 0.01 s 6978s [5599/8505] TestRDocRDoc#test_setup_output_dir_exists = 0.01 s 6978s [5600/8505] TestRDocRDoc#test_normalized_file_list = 0.00 s 6978s [5601/8505] TestRDocRDoc#test_parse_file_include_root = 0.02 s 6978s [5602/8505] TestRDocRDoc#test_setup_output_dir_exists_not_rdoc = 0.01 s 6978s [5603/8505] TestRDocRDoc#test_update_output_dir_dry_run = 0.00 s 6978s [5604/8505] TestRDocRDoc#test_setup_output_dir_dry_run = 0.00 s 6978s [5605/8505] TestRDocRDoc#test_setup_output_dir_exists_empty_created_rid = 0.00 s 6978s [5606/8505] TestRDocRDoc#test_remove_unparseable_tags_emacs = 0.00 s 6978s [5607/8505] TestRDocRDoc#test_parse_file_forbidden = 0.00 s 6978s [5608/8505] TestRDocRDoc#test_remove_unparseable_tags_vim = 0.00 s 6978s [5609/8505] TestRDocRDoc#test_normalized_file_list_with_dot_doc_overridden_by_exclude_option = 0.01 s 6978s [5610/8505] TestRDocRDoc#test_handle_pipe_rd = 0.00 s 6978s [5611/8505] TestRDocRDoc#test_remove_unparseable_CVE_2021_31799 = 0.00 s 6978s [5612/8505] TestRDocRDoc#test_update_output_dir_dont = 0.01 s 6978s [5613/8505] TestRDocRDoc#test_remove_unparseable = 0.00 s 6978s [5614/8505] TestRDocRDoc#test_gather_files = 0.00 s 6978s [5615/8505] TestRDocRDoc#test_update_output_dir_with_reproducible_time = 0.01 s 6978s [5616/8505] TestRDocRDoc#test_parse_file_encoding = 0.00 s 6978s [5617/8505] TestRDocRDoc#test_normalized_file_list_with_dot_doc = 0.01 s 6978s [5618/8505] TestRDocRDoc#test_normalized_file_list_removes_created_rid_dir = 0.00 s 6978s [5619/8505] TestRDocRDoc#test_setup_output_dir_exists_file = 0.00 s 6978s [5620/8505] TestRDocRDoc#test_update_output_dir = 0.00 s 6978s [5621/8505] TestRDocRDoc#test_normalized_file_list_non_file_directory = 0.00 s 6978s [5622/8505] TestRDocRDoc#test_setup_output_dir = 0.00 s 6978s [5623/8505] TestRDocRDoc#test_document_with_dry_run = 0.12 s 6978s [5624/8505] TestRDocRDoc#test_parse_file = 0.00 s 6978s [5625/8505] TestRDocRDoc#test_handle_pipe = 0.01 s 6978s [5626/8505] TestRDocRDoc#test_document = 0.03 s 6978s [5627/8505] TestRDocRDoc#test_normalized_file_list_not_modified = 0.00 s 6978s [5628/8505] TestRDocRDoc#test_parse_file_relative = 0.00 s 6978s [5629/8505] Psych::TestString#test_ascii_only_8bit_string = 0.00 s 6978s [5630/8505] Psych::TestString#test_string_with_base_60 = 0.00 s 6978s [5631/8505] Psych::TestString#test_nonascii_string_as_binary = 0.00 s 6978s [5632/8505] Psych::TestString#test_ascii_only_binary_string = 0.00 s 6978s [5633/8505] Psych::TestString#test_y_is_quoted = 0.00 s 6978s [5634/8505] Psych::TestString#test_n_is_quoted = 0.00 s 6978s [5635/8505] Psych::TestString#test_cycle_x = 0.00 s 6978s [5636/8505] Psych::TestString#test_folded_when_longer_than_line_width_and_with_final_line_break = 0.00 s 6978s [5637/8505] Psych::TestString#test_plain_when_shorten_than_line_width_and_no_final_line_break = 0.00 s 6978s [5638/8505] Psych::TestString#test_string_with_ivars = 0.00 s 6978s [5639/8505] Psych::TestString#test_empty_subclass = 0.00 s 6978s [5640/8505] Psych::TestString#test_float_with_no_fractional_before_exponent = 0.00 s 6978s [5641/8505] Psych::TestString#test_plain_when_shorten_than_line_width_and_with_final_line_break = 0.00 s 6978s [5642/8505] Psych::TestString#test_binary_string = 0.00 s 6978s [5643/8505] Psych::TestString#test_no_quotes_when_start_with_non_ascii_character = 0.00 s 6978s [5644/8505] Psych::TestString#test_dash_dot = 0.00 s 6978s [5645/8505] Psych::TestString#test_folded_strip_when_longer_than_line_width_and_no_newlines = 0.00 s 6978s [5646/8505] Psych::TestString#test_float_confusion = 0.00 s 6978s [5647/8505] Psych::TestString#test_literal_strip_when_inner_line_break_and_no_final_line_break = 0.00 s 6978s [5648/8505] Psych::TestString#test_binary = 0.00 s 6978s [5649/8505] Psych::TestString#test_subclass_with_attributes = 0.00 s 6978s [5650/8505] Psych::TestString#test_another_subclass_with_attributes = 0.00 s 6978s [5651/8505] Psych::TestString#test_no_doublequotes_with_special_characters = 0.00 s 6978s [5652/8505] Psych::TestString#test_doublequotes_when_there_is_a_single = 0.00 s 6978s [5653/8505] Psych::TestString#test_empty_character_subclass = 0.00 s 6978s [5654/8505] Psych::TestString#test_string_with_newline = 0.00 s 6978s [5655/8505] Psych::TestString#test_literal_when_inner_and_final_line_break = 0.00 s 6978s [5656/8505] Psych::TestString#test_backwards_with_syck = 0.00 s 6978s [5657/8505] Psych::TestString#test_binary_string_null = 0.00 s 6978s [5658/8505] Psych::TestString#test_self_referential_string = 0.00 s 6978s [5659/8505] Psych::TestString#test_string_subclass_with_anchor = 0.00 s 6978s [5660/8505] IMAPResponseParserTest#test_search_modseq = 0.00 s 6978s [5661/8505] IMAPResponseParserTest#test_msg_att_parse_error = 0.00 s 6978s [5662/8505] IMAPResponseParserTest#test_msg_att_rfc822_text = 0.01 s 6978s [5663/8505] IMAPResponseParserTest#test_flag_xlist_inbox = 0.00 s 6978s [5664/8505] IMAPResponseParserTest#test_msg_delivery_status_with_extra_data = 0.03 s 6978s [5665/8505] IMAPResponseParserTest#test_body_type_attachment = 0.01 s 6978s [5666/8505] IMAPResponseParserTest#test_msg_att_extra_space = 0.00 s 6978s [5667/8505] IMAPResponseParserTest#test_capability = 0.00 s 6978s [5668/8505] IMAPResponseParserTest#test_status = 0.00 s 6978s [5669/8505] IMAPResponseParserTest#test_msg_delivery_status = 0.00 s 6978s [5670/8505] IMAPResponseParserTest#test_search_response_of_yahoo = 0.00 s 6978s [5671/8505] IMAPResponseParserTest#test_resp_text_code = 0.00 s 6978s [5672/8505] IMAPResponseParserTest#test_flag_list_many_same_flags = 0.04 s 6978s [5673/8505] IMAPResponseParserTest#test_msg_with_message_rfc822_attachment = 0.00 s 6978s [5674/8505] IMAPResponseParserTest#test_msg_body_mixed = 0.00 s 6978s [5675/8505] IMAPResponseParserTest#test_body_ext_mpart_without_lang = 0.00 s 6978s [5676/8505] IMAPResponseParserTest#test_search_response = 0.00 s 6978s [5677/8505] IMAPResponseParserTest#test_mixed_boundary = 0.01 s 6978s [5678/8505] IMAPResponseParserTest#test_msg_att_modseq_data = 0.00 s 6978s [5679/8505] IMAPResponseParserTest#test_continuation_request_without_response_text = 0.00 s 6978s [5680/8505] IMAPResponseParserTest#test_flag_list_too_many_flags = 0.00 s 6978s [5681/8505] IMAPResponseParserTest#test_acl = 0.00 s 6978s [5682/8505] TestRDocTopLevel#test_add_alias_nodoc = 0.03 s 6978s [5683/8505] TestRDocTopLevel#test_add_method_stopdoc = 0.03 s 6978s [5684/8505] TestRDocTopLevel#test_add_alias = 0.03 s 6978s [5685/8505] TestRDocTopLevel#test_add_method = 0.05 s 6978s [5686/8505] TestRDocTopLevel#test_search_record_page = 0.04 s 6978s [5687/8505] TestRDocTopLevel#test_page_name_trim_extension = 0.02 s 6978s [5688/8505] TestRDocTopLevel#test_display_eh = 0.03 s 6978s [5689/8505] TestRDocTopLevel#test_last_modified = 0.03 s 6978s [5690/8505] TestRDocTopLevel#test_add_include_nodoc = 0.02 s 6978s [5691/8505] TestRDocTopLevel#test_hash = 0.03 s 6978s [5692/8505] TestRDocTopLevel#test_http_url = 0.04 s 6978s [5693/8505] TestRDocTopLevel#test_add_constant_nodoc = 0.02 s 6979s [5694/8505] TestRDocTopLevel#test_text_eh = 0.02 s 6979s [5695/8505] TestRDocTopLevel#test_eql_eh = 0.02 s 6979s [5696/8505] TestRDocTopLevel#test_add_constant = 0.02 s 6979s [5697/8505] TestRDocTopLevel#test_equals2 = 0.02 s 6979s [5698/8505] TestRDocTopLevel#test_initialize_relative = 0.02 s 6979s [5699/8505] TestRDocTopLevel#test_base_name = 0.02 s 6979s [5700/8505] TestRDocTopLevel#test_marshal_dump = 0.02 s 6979s [5701/8505] TestRDocTopLevel#test_add_include = 0.02 s 6979s [5702/8505] TestRDocTopLevel#test_page_name = 0.02 s 6979s [5703/8505] TestRDocTopLevel#test_marshal_load_version_0 = 0.02 s 6979s [5704/8505] TestRDocTopLevel#test_find_class_or_module = 0.02 s 6979s [5705/8505] TestRDocTopLevel#test_initialize = 0.02 s 6979s [5706/8505] TestRDocTopLevel#test_full_name = 0.02 s 6979s [5707/8505] TestRDocTopLevel#test_name = 0.14 s 6979s [5708/8505] TestRDocTopLevel#test_text_eh_no_parser = 0.03 s 6979s [5709/8505] TestRDocTopLevel#test_search_record = 0.02 s 6979s [5710/8505] TestNKF#test_guess = 0.00 s 6979s [5711/8505] TestNKF#test_ruby_dev_36909 = 0.01 s 6979s [5712/8505] TestFileUtilsVerbose#test_singleton_visibility_identical? = 0.00 s 6979s [5713/8505] TestFileUtilsVerbose#test_visibility_fu_windows? = 0.00 s 6979s [5714/8505] TestFileUtilsVerbose#test_visibility_chdir = 0.00 s 6979s [5715/8505] TestFileUtilsVerbose#test_visibility_move = 0.00 s 6979s [5716/8505] TestFileUtilsVerbose#test_visibility_cp = 0.00 s 6979s [5717/8505] TestFileUtilsVerbose#test_visibility_mkpath = 0.00 s 6979s [5718/8505] TestFileUtilsVerbose#test_singleton_visibility_cd = 0.00 s 6979s [5719/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_f = 0.00 s 6979s [5720/8505] TestFileUtilsVerbose#test_visibility_fu_stream_blksize = 0.00 s 6979s [5721/8505] TestFileUtilsVerbose#test_singleton_visibility_mkpath = 0.00 s 6979s [5722/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_blksize = 0.00 s 6979s [5723/8505] TestFileUtilsVerbose#test_singleton_visibility_getwd = 0.00 s 6979s [5724/8505] TestFileUtilsVerbose#test_visibility_safe_unlink = 0.00 s 6979s [5725/8505] TestFileUtilsVerbose#test_visibility_install = 0.00 s 6979s [5726/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_stream = 0.00 s 6979s [5727/8505] TestFileUtilsVerbose#test_visibility_rm_rf = 0.00 s 6979s [5728/8505] TestFileUtilsVerbose#test_visibility_cd = 0.00 s 6979s [5729/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_default_blksize = 0.00 s 6979s [5730/8505] TestFileUtilsVerbose#test_singleton_visibility_chown = 0.00 s 6979s [5731/8505] TestFileUtilsVerbose#test_visibility_copy = 0.00 s 6979s [5732/8505] TestFileUtilsVerbose#test_singleton_visibility_chown_R = 0.00 s 6979s [5733/8505] TestFileUtilsVerbose#test_visibility_symlink = 0.00 s 6979s [5734/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_file = 0.00 s 6979s [5735/8505] TestFileUtilsVerbose#test_visibility_touch = 0.00 s 6979s [5736/8505] TestFileUtilsVerbose#test_visibility_link = 0.00 s 6979s [5737/8505] TestFileUtilsVerbose#test_singleton_visibility_compare_file = 0.00 s 6979s [5738/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_r = 0.00 s 6979s [5739/8505] TestFileUtilsVerbose#test_singleton_visibility_makedirs = 0.00 s 6979s [5740/8505] TestFileUtilsVerbose#test_singleton_visibility_cp = 0.00 s 6979s [5741/8505] TestFileUtilsVerbose#test_visibility_link_entry = 0.00 s 6979s [5742/8505] TestFileUtilsVerbose#test_singleton_visibility_link = 0.00 s 6979s [5743/8505] TestFileUtilsVerbose#test_visibility_rm_r = 0.00 s 6979s [5744/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_file = 0.00 s 6979s [5745/8505] TestFileUtilsVerbose#test_visibility_copy_entry = 0.00 s 6979s [5746/8505] TestFileUtilsVerbose#test_visibility_uptodate? = 0.00 s 6979s [5747/8505] TestFileUtilsVerbose#test_visibility_makedirs = 0.00 s 6979s [5748/8505] TestFileUtilsVerbose#test_singleton_visibility_copy = 0.00 s 6979s [5749/8505] TestFileUtilsVerbose#test_visibility_mv = 0.00 s 6979s [5750/8505] TestFileUtilsVerbose#test_singleton_visibility_mkdir_p = 0.00 s 6979s [5751/8505] TestFileUtilsVerbose#test_visibility_chmod = 0.00 s 6979s [5752/8505] TestFileUtilsVerbose#test_visibility_fu_default_blksize = 0.00 s 6979s [5753/8505] TestFileUtilsVerbose#test_singleton_visibility_mv = 0.00 s 6979s [5754/8505] TestFileUtilsVerbose#test_visibility_remove = 0.00 s 6979s [5755/8505] TestFileUtilsVerbose#test_singleton_visibility_cp_lr = 0.00 s 6979s [5756/8505] TestFileUtilsVerbose#test_singleton_visibility_ln_sf = 0.00 s 6979s [5757/8505] TestFileUtilsVerbose#test_visibility_chmod_R = 0.00 s 6979s [5758/8505] TestFileUtilsVerbose#test_visibility_rm_f = 0.00 s 6979s [5759/8505] TestFileUtilsVerbose#test_visibility_compare_file = 0.00 s 6979s [5760/8505] TestFileUtilsVerbose#test_visibility_mkdir = 0.00 s 6979s [5761/8505] TestFileUtilsVerbose#test_singleton_visibility_remove = 0.00 s 6979s [5762/8505] TestFileUtilsVerbose#test_singleton_visibility_move = 0.00 s 6979s [5763/8505] TestFileUtilsVerbose#test_visibility_remove_dir = 0.00 s 6979s [5764/8505] TestFileUtilsVerbose#test_singleton_visibility_rmdir = 0.00 s 6979s [5765/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_dir = 0.00 s 6979s [5766/8505] TestFileUtilsVerbose#test_singleton_visibility_rm = 0.00 s 6979s [5767/8505] TestFileUtilsVerbose#test_singleton_visibility_compare_stream = 0.00 s 6979s [5768/8505] TestFileUtilsVerbose#test_visibility_pwd = 0.00 s 6979s [5769/8505] TestFileUtilsVerbose#test_visibility_getwd = 0.00 s 6979s [5770/8505] TestFileUtilsVerbose#test_visibility_copy_stream = 0.00 s 6979s [5771/8505] TestFileUtilsVerbose#test_singleton_visibility_cmp = 0.00 s 6979s [5772/8505] TestFileUtilsVerbose#test_singleton_visibility_symlink = 0.00 s 6979s [5773/8505] TestFileUtilsVerbose#test_visibility_chown_R = 0.00 s 6979s [5774/8505] TestFileUtilsVerbose#test_singleton_visibility_pwd = 0.00 s 6979s [5775/8505] TestFileUtilsVerbose#test_visibility_ln_s = 0.00 s 6979s [5776/8505] TestFileUtilsVerbose#test_singleton_visibility_ln = 0.00 s 6979s [5777/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_entry = 0.00 s 6979s [5778/8505] TestFileUtilsVerbose#test_singleton_visibility_chdir = 0.00 s 6979s [5779/8505] TestFileUtilsVerbose#test_singleton_visibility_remove_entry_secure = 0.00 s 6979s [5780/8505] TestFileUtilsVerbose#test_visibility_remove_file = 0.00 s 6979s [5781/8505] TestFileUtilsVerbose#test_visibility_cmp = 0.00 s 6979s [5782/8505] TestFileUtilsVerbose#test_visibility_ln = 0.00 s 6979s [5783/8505] TestFileUtilsVerbose#test_singleton_visibility_touch = 0.00 s 6979s [5784/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_windows? = 0.00 s 6979s [5785/8505] TestFileUtilsVerbose#test_visibility_chown = 0.00 s 6979s [5786/8505] TestFileUtilsVerbose#test_singleton_visibility_safe_unlink = 0.00 s 6979s [5787/8505] TestFileUtilsVerbose#test_visibility_rm = 0.00 s 6979s [5788/8505] TestFileUtilsVerbose#test_singleton_visibility_rm_rf = 0.00 s 6979s [5789/8505] TestFileUtilsVerbose#test_singleton_visibility_copy_entry = 0.00 s 6979s [5790/8505] TestFileUtilsVerbose#test_singleton_visibility_install = 0.00 s 6979s [5791/8505] TestFileUtilsVerbose#test_visibility_cp_r = 0.00 s 6979s [5792/8505] TestFileUtilsVerbose#test_singleton_visibility_link_entry = 0.00 s 6979s [5793/8505] TestFileUtilsVerbose#test_visibility_remove_entry = 0.00 s 6979s [5794/8505] TestFileUtilsVerbose#test_visibility_rmtree = 0.00 s 6979s [5795/8505] TestFileUtilsVerbose#test_singleton_visibility_cp_r = 0.00 s 6979s [5796/8505] TestFileUtilsVerbose#test_singleton_visibility_chmod = 0.00 s 6979s [5797/8505] TestFileUtilsVerbose#test_singleton_visibility_chmod_R = 0.00 s 6979s [5798/8505] TestFileUtilsVerbose#test_visibility_copy_file = 0.00 s 6979s [5799/8505] TestFileUtilsVerbose#test_singleton_visibility_uptodate? = 0.00 s 6979s [5800/8505] TestFileUtilsVerbose#test_singleton_visibility_rmtree = 0.00 s 6979s [5801/8505] TestFileUtilsVerbose#test_visibility_remove_entry_secure = 0.00 s 6979s [5802/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_copy_stream0 = 0.00 s 6979s [5803/8505] TestFileUtilsVerbose#test_visibility_fu_blksize = 0.00 s 6979s [5804/8505] TestFileUtilsVerbose#test_visibility_rmdir = 0.00 s 6979s [5805/8505] TestFileUtilsVerbose#test_singleton_visibility_ln_s = 0.00 s 6979s [5806/8505] TestFileUtilsVerbose#test_visibility_compare_stream = 0.00 s 6979s [5807/8505] TestFileUtilsVerbose#test_singleton_visibility_fu_stream_blksize = 0.00 s 6979s [5808/8505] TestFileUtilsVerbose#test_singleton_visibility_mkdir = 0.00 s 6979s [5809/8505] TestFileUtilsVerbose#test_visibility_ln_sf = 0.00 s 6979s [5810/8505] TestFileUtilsVerbose#test_visibility_cp_lr = 0.00 s 6979s [5811/8505] TestFileUtilsVerbose#test_visibility_fu_copy_stream0 = 0.00 s 6979s [5812/8505] TestFileUtilsVerbose#test_visibility_identical? = 0.00 s 6979s [5813/8505] TestFileUtilsVerbose#test_visibility_mkdir_p = 0.00 s 6979s [5814/8505] TestSocket_TCPSocket#test_encoding = 0.00 s 6979s [5815/8505] TestSocket_TCPSocket#test_initialize_connect_timeout = 0.00 s 6979s [5816/8505] TestSocket_TCPSocket#test_accept_multithread = 0.08 s 6979s [5817/8505] TestSocket_TCPSocket#test_accept_nonblock = 0.00 s 6979s [5818/8505] URI::TestMailTo#test_build = 0.04 s 6979s [5819/8505] URI::TestMailTo#test_initializer = 0.00 s 6979s [5820/8505] URI::TestMailTo#test_check_to = 0.00 s 6979s [5821/8505] URI::TestMailTo#test_to_mailtext = 0.01 s 6979s [5822/8505] URI::TestMailTo#test_select = 0.01 s 6979s [5823/8505] URI::TestMailTo#test_to_s = 0.00 s 6979s [5824/8505] TestRDocMarkupToRDoc#test_accept_list_end_number = 0.00 s 6979s [5825/8505] TestRDocMarkupToRDoc#test_accept_verbatim_big_indent = 0.00 s 6979s [5826/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_number = 0.00 s 6979s [5827/8505] TestRDocMarkupToRDoc#test_accept_document = 0.00 s 6979s [5828/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_number = 0.00 s 6979s [5829/8505] TestRDocMarkupToRDoc#test_accept_heading_b = 0.00 s 6979s [5830/8505] TestRDocMarkupToRDoc#test_accept_verbatim_indent = 0.00 s 6979s [5831/8505] TestRDocMarkupToRDoc#test_list_nested = 0.00 s 6979s [5832/8505] TestRDocMarkupToRDoc#test_accept_heading_indent = 0.00 s 6979s [5833/8505] TestRDocMarkupToRDoc#test_list_verbatim = 0.00 s 6979s [5834/8505] TestRDocMarkupToRDoc#test_accept_verbatim = 0.00 s 6979s [5835/8505] TestRDocMarkupToRDoc#test_accept_paragraph_i = 0.00 s 6979s [5836/8505] TestRDocMarkupToRDoc#test_accept_block_quote = 0.00 s 6979s [5837/8505] TestRDocMarkupToRDoc#test_accept_paragraph_break = 0.00 s 6979s [5838/8505] TestRDocMarkupToRDoc#test_accept_list_start_ualpha = 0.00 s 6979s [5839/8505] TestRDocMarkupToRDoc#test_accept_heading_suppressed_crossref = 0.00 s 6979s [5840/8505] TestRDocMarkupToRDoc#test_accept_heading_3 = 0.00 s 6979s [5841/8505] TestRDocMarkupToRDoc#test_accept_heading_1 = 0.00 s 6979s [5842/8505] TestRDocMarkupToRDoc#test_accept_list_start_lalpha = 0.00 s 6979s [5843/8505] TestRDocMarkupToRDoc#test_accept_heading = 0.00 s 6979s [5844/8505] TestRDocMarkupToRDoc#test_accept_list_end_label = 0.00 s 6979s [5845/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_bullet = 0.00 s 6979s [5846/8505] TestRDocMarkupToRDoc#test_accept_paragraph_underscore = 0.00 s 6979s [5847/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_bullet = 0.00 s 6979s [5848/8505] TestRDocMarkupToRDoc#test_accept_rule = 0.00 s 6979s [5849/8505] TestRDocMarkupToRDoc#test_attributes = 0.00 s 6979s [5850/8505] TestRDocMarkupToRDoc#test_accept_list_end_bullet = 0.00 s 6979s [5851/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_label = 0.00 s 6979s [5852/8505] TestRDocMarkupToRDoc#test_accept_list_end_note = 0.00 s 6979s [5853/8505] TestRDocMarkupToRDoc#test_accept_list_start_number = 0.00 s 6979s [5854/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_multi_description = 0.00 s 6979s [5855/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_multi_label = 0.00 s 6979s [5856/8505] TestRDocMarkupToRDoc#test_accept_paragraph_wrap = 0.00 s 6979s [5857/8505] TestRDocMarkupToRDoc#test_accept_indented_paragraph = 0.00 s 6979s [5858/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_note = 0.00 s 6979s [5859/8505] TestRDocMarkupToRDoc#test_start_accepting = 0.00 s 6979s [5860/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note_2 = 0.01 s 6979s [5861/8505] TestRDocMarkupToRDoc#test_accept_paragraph_br = 0.00 s 6979s [5862/8505] TestRDocMarkupToRDoc#test_accept_paragraph = 0.00 s 6979s [5863/8505] TestRDocMarkupToRDoc#test_accept_blank_line = 0.00 s 6979s [5864/8505] TestRDocMarkupToRDoc#test_accept_paragraph_star = 0.00 s 6979s [5865/8505] TestRDocMarkupToRDoc#test_accept_heading_2 = 0.00 s 6979s [5866/8505] TestRDocMarkupToRDoc#test_accept_list_start_label = 0.00 s 6979s [5867/8505] TestRDocMarkupToRDoc#test_accept_heading_4 = 0.00 s 6979s [5868/8505] TestRDocMarkupToRDoc#test_accept_paragraph_b = 0.00 s 6979s [5869/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_ualpha = 0.00 s 6979s [5870/8505] TestRDocMarkupToRDoc#test_accept_rule_indent = 0.00 s 6979s [5871/8505] TestRDocMarkupToRDoc#test_convert_list_note = 0.00 s 6979s [5872/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_ualpha = 0.00 s 6979s [5873/8505] TestRDocMarkupToRDoc#test_accept_list_end_ualpha = 0.00 s 6979s [5874/8505] TestRDocMarkupToRDoc#test_end_accepting = 0.00 s 6979s [5875/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_lalpha = 0.00 s 6979s [5876/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_lalpha = 0.00 s 6979s [5877/8505] TestRDocMarkupToRDoc#test_accept_list_item_start_note = 0.00 s 6979s [5878/8505] TestRDocMarkupToRDoc#test_accept_raw = 0.00 s 6979s [5879/8505] TestRDocMarkupToRDoc#test_accept_list_end_lalpha = 0.00 s 6979s [5880/8505] TestRDocMarkupToRDoc#test_accept_list_start_note = 0.00 s 6979s [5881/8505] TestRDocMarkupToRDoc#test_accept_list_start_bullet = 0.00 s 6979s [5882/8505] TestRDocMarkupToRDoc#test_accept_list_item_end_label = 0.00 s 6979s [5883/8505] TestRDocMarkupToRDoc#test_accept_paragraph_plus = 0.00 s 6979s [5884/8505] TestRDocMarkupToRDoc#test_accept_paragraph_indent = 0.00 s 6979s [5885/8505] OpenSSL::TestX509Extension#test_eq = 0.00 s 6979s [5886/8505] OpenSSL::TestX509Extension#test_dup = 0.00 s 6979s [5887/8505] OpenSSL::TestX509Extension#test_marshal = 0.00 s 6979s [5888/8505] OpenSSL::TestX509Extension#test_new = 0.00 s 6979s [5889/8505] TestZlibGzipReader#test_read = 0.00 s 6979s [5890/8505] TestZlibGzipReader#test_each_byte = 0.00 s 6979s [5891/8505] TestZlibGzipReader#test_readchar = 0.00 s 6979s [5892/8505] TestZlibGzipReader#test_getbyte = 0.00 s 6979s [5893/8505] TestZlibGzipReader#test_ungetc_paragraph = 0.00 s 6979s [5894/8505] TestZlibGzipReader#test_corrupted_header = 0.01 s 6979s [5895/8505] TestZlibGzipReader#test_gets2 = 0.00 s 6979s [5896/8505] TestZlibGzipReader#test_readlines = 0.00 s 6979s [5897/8505] TestZlibGzipReader#test_ungetc_at_start_of_file = 0.00 s 6979s [5898/8505] TestZlibGzipReader#test_ungetc = 0.00 s 6979s [5899/8505] TestZlibGzipReader#test_getc = 0.00 s 6979s [5900/8505] TestZlibGzipReader#test_read0 = 0.00 s 6979s [5901/8505] TestZlibGzipReader#test_each = 0.00 s 6979s [5902/8505] TestZlibGzipReader#test_gets = 0.00 s 6979s [5903/8505] TestZlibGzipReader#test_unused2 = 0.00 s 6979s [5904/8505] TestZlibGzipReader#test_readpartial = 0.00 s 6979s [5905/8505] TestZlibGzipReader#test_rewind = 0.00 s 6979s [5906/8505] TestZlibGzipReader#test_unused = 0.00 s 6979s [5907/8505] TestZlibGzipReader#test_open = 0.00 s 6979s [5908/8505] TestZlibGzipReader#test_reader_wrap = 0.00 s 6979s [5909/8505] TestZlibGzipReader#test_readline = 0.00 s 6979s [5910/8505] TestZlibGzipReader#test_double_close = 0.00 s 6979s [5911/8505] CGIHeaderTest#test_cgi_http_header_output_cookies = 0.00 s 6979s [5912/8505] CGIHeaderTest#test_cgi_http_header_cookie = 0.00 s 6979s [5913/8505] CGIHeaderTest#test_cgi_http_header_complex = 0.00 s 6979s [5914/8505] CGIHeaderTest#test_cgi_http_header_simple = 0.00 s 6979s [5915/8505] CGIHeaderTest#test_cgi_http_header_nph = 0.01 s 6979s [5916/8505] CGIHeaderTest#test_cgi_http_header_argerr = 0.00 s 6979s [5917/8505] OpenSSL::TestPairLowlevelSocket#test_readall = 0.07 s 6980s [5918/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_with_buffered_data = 0.11 s 6980s [5919/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_with_buffered_data_no_exceptions = 0.12 s 6980s [5920/8505] OpenSSL::TestPairLowlevelSocket#test_write_nonblock_retry = 0.16 s 6980s [5921/8505] OpenSSL::TestPairLowlevelSocket#test_multibyte_read_write = 0.12 s 6980s [5922/8505] OpenSSL::TestPairLowlevelSocket#test_partial_tls_record_read_nonblock = 0.09 s 6980s [5923/8505] OpenSSL::TestPairLowlevelSocket#test_getc = 0.10 s 6980s [5924/8505] OpenSSL::TestPairLowlevelSocket#test_read_nonblock_no_exception = 0.14 s 6980s [5925/8505] OpenSSL::TestPairLowlevelSocket#test_read_nonblock = 0.23 s 6981s [5926/8505] OpenSSL::TestPairLowlevelSocket#test_gets = 0.12 s 6981s [5927/8505] OpenSSL::TestPairLowlevelSocket#test_readpartial = 0.14 s 6981s [5928/8505] OpenSSL::TestPairLowlevelSocket#test_gets_eof_limit = 0.12 s 6981s [5929/8505] OpenSSL::TestPairLowlevelSocket#test_connect_accept_nonblock = 0.43 s 6981s [5930/8505] OpenSSL::TestPairLowlevelSocket#test_puts_empty = 0.11 s 6982s [5931/8505] OpenSSL::TestPairLowlevelSocket#test_write_multiple_arguments = 0.12 s 6982s [5932/8505] OpenSSL::TestPairLowlevelSocket#test_readline = 0.08 s 6982s [5933/8505] OpenSSL::TestPairLowlevelSocket#test_write_zero = 0.07 s 6985s [5934/8505] TestDigest::TestDigestParen#test_no_lib = 3.47 s 6991s [5935/8505] TestDigest::TestDigestParen#test_race_mixed = 5.36 s 6994s [5936/8505] TestDigest::TestDigestParen#test_no_lib_no_def = 3.41 s 6999s [5937/8505] TestDigest::TestDigestParen#test_race = 5.36 s 7003s [5938/8505] TestDigest::TestDigestParen#test_sha2 = 3.37 s 7003s [5939/8505] TestRDocTomDoc#test_tokenize_arguments_nested = 0.01 s 7003s [5940/8505] TestRDocTomDoc#test_tokenize_arguments = 0.00 s 7003s [5941/8505] TestRDocTomDoc#test_parse_multiline_paragraph = 0.01 s 7003s [5942/8505] TestRDocTomDoc#test_class_signature_two_space = 0.01 s 7003s [5943/8505] TestRDocTomDoc#test_parse_raises_without_returns = 0.00 s 7003s [5944/8505] TestRDocTomDoc#test_parse_arguments_nested = 0.00 s 7003s [5945/8505] TestRDocTomDoc#test_tokenize_returns_multiline = 0.00 s 7003s [5946/8505] TestRDocTomDoc#test_parse_arguments_multiline = 0.00 s 7003s [5947/8505] TestRDocTomDoc#test_tokenize_multiline_paragraph = 0.00 s 7003s [5948/8505] TestRDocTomDoc#test_parse_examples = 0.00 s 7003s [5949/8505] TestRDocTomDoc#test_parse_arguments = 0.01 s 7003s [5950/8505] TestRDocTomDoc#test_class_signature_no_space = 0.00 s 7003s [5951/8505] TestRDocTomDoc#test_class_add_post_processor = 0.00 s 7003s [5952/8505] TestRDocTomDoc#test_tokenize_arguments_multiline = 0.00 s 7003s [5953/8505] TestRDocTomDoc#test_parse_examples_signature = 0.00 s 7003s [5954/8505] TestRDocTomDoc#test_parse_returns_with_raises = 0.00 s 7003s [5955/8505] TestRDocTomDoc#test_parse_paragraph = 0.00 s 7003s [5956/8505] TestRDocTomDoc#test_parse_returns = 0.01 s 7003s [5957/8505] TestRDocTomDoc#test_parse_returns_multiline_and_raises = 0.00 s 7003s [5958/8505] TestRDocTomDoc#test_class_signature_none = 0.00 s 7003s [5959/8505] TestRDocTomDoc#test_parse_signature = 0.00 s 7003s [5960/8505] TestRDocTomDoc#test_parse_arguments_array = 0.00 s 7003s [5961/8505] TestRDocTomDoc#test_tokenize_paragraph = 0.00 s 7003s [5962/8505] TestRDocTomDoc#test_parse_returns_multiline = 0.00 s 7003s [5963/8505] TestRDocTomDoc#test_tokenize_returns = 0.00 s 7003s [5964/8505] TestRDocTomDoc#test_class_signature = 0.00 s 7003s [5965/8505] TestRDocTomDoc#test_tokenize_examples = 0.00 s 7003s [5966/8505] TestRDocTomDoc#test_class_rdoc = 0.00 s 7003s [5967/8505] TestRDocTomDoc#test_tokenize_arguments_array = 0.00 s 7003s [5968/8505] Reline::Test#test_insert_text = 0.00 s 7003s [5969/8505] Reline::Test#test_basic_word_break_characters = 0.01 s 7003s [5970/8505] Reline::Test#test_add_dialog_proc = 0.01 s 7003s [5971/8505] Reline::Test#test_basic_quote_characters = 0.00 s 7003s [5972/8505] Reline::Test#test_readmultiline = 0.00 s 7003s [5973/8505] Reline::Test#test_prompt_proc = 0.00 s 7003s [5974/8505] Reline::Test#test_read_io = 0.00 s 7003s [5975/8505] Reline::Test#test_add_dialog_proc_with_context = 0.00 s 7003s [5976/8505] Reline::Test#test_emacs_editing_mode = 0.00 s 7003s [5977/8505] Reline::Test#test_delete_text = 0.00 s 7003s [5978/8505] Reline::Test#test_completion_append_character = 0.00 s 7003s [5979/8505] Reline::Test#test_dig_perfect_match_proc = 0.00 s 7003s [5980/8505] Reline::Test#test_may_req_ambiguous_char_width = 0.00 s 7003s [5981/8505] Reline::Test#test_special_prefixes = 0.00 s 7003s [5982/8505] Reline::Test#test_set_input_and_output = 0.01 s 7003s [5983/8505] Reline::Test#test_inner_readline = 0.00 s 7003s [5984/8505] Reline::Test#test_completer_quote_characters = 0.00 s 7003s [5985/8505] Reline::Test#test_vi_editing_mode = 0.00 s 7003s [5986/8505] Reline::Test#test_output_modifier_proc = 0.00 s 7003s [5987/8505] Reline::Test#test_read_escaped_key = 0.00 s 7003s [5988/8505] Reline::Test#test_completer_word_break_characters = 0.00 s 7003s [5989/8505] Reline::Test#test_auto_indent_proc = 0.00 s 7003s [5990/8505] Reline::Test#test_pre_input_hook = 0.00 s 7003s [5991/8505] Reline::Test#test_completion_case_fold = 0.00 s 7003s [5992/8505] Reline::Test#test_completion_proc = 0.00 s 7003s [5993/8505] Reline::Test#test_readline = 0.00 s 7003s [5994/8505] Reline::Test#test_filename_quote_characters = 0.00 s 7003s [5995/8505] TestRDocMarkupToHtmlSnippet#test_add_paragraph = 0.01 s 7003s [5996/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_number = 0.00 s 7003s [5997/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_number = 0.00 s 7003s [5998/8505] TestRDocMarkupToHtmlSnippet#test_accept_document = 0.00 s 7003s [5999/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_number = 0.00 s 7003s [6000/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_b = 0.00 s 7003s [6001/8505] TestRDocMarkupToHtmlSnippet#test_off_tags = 0.00 s 7003s [6002/8505] TestRDocMarkupToHtmlSnippet#test_list_nested = 0.00 s 7003s [6003/8505] TestRDocMarkupToHtmlSnippet#test_list_verbatim = 0.00 s 7003s [6004/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_paragraphs = 0.01 s 7003s [6005/8505] TestRDocMarkupToHtmlSnippet#test_on_tags = 0.00 s 7003s [6006/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_aref_class = 0.00 s 7003s [6007/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim = 0.01 s 7003s [6008/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_i = 0.00 s 7003s [6009/8505] TestRDocMarkupToHtmlSnippet#test_accept_block_quote = 0.00 s 7003s [6010/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_break = 0.00 s 7003s [6011/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_7 = 0.00 s 7003s [6012/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_ualpha = 0.00 s 7003s [6013/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_suppressed_crossref = 0.00 s 7003s [6014/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_3 = 0.00 s 7003s [6015/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_2 = 0.00 s 7003s [6016/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim = 0.00 s 7003s [6017/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_1 = 0.00 s 7003s [6018/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim_multiline = 0.00 s 7003s [6019/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_lalpha = 0.00 s 7003s [6020/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading = 0.00 s 7003s [6021/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_label = 0.00 s 7003s [6022/8505] TestRDocMarkupToHtmlSnippet#test_convert_TIDYLINK_rdoc_label = 0.00 s 7003s [6023/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_bullet = 0.00 s 7003s [6024/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_underscore = 0.00 s 7003s [6025/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_bullet = 0.00 s 7003s [6026/8505] TestRDocMarkupToHtmlSnippet#test_accept_rule = 0.00 s 7003s [6027/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_bullet = 0.00 s 7003s [6028/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_label = 0.00 s 7003s [6029/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_foottext = 0.00 s 7003s [6030/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_note = 0.00 s 7003s [6031/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_footmark = 0.00 s 7003s [6032/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_aref_method = 0.00 s 7003s [6033/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_number = 0.00 s 7003s [6034/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_multi_description = 0.00 s 7003s [6035/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim_ruby_error = 0.00 s 7003s [6036/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_multi_label = 0.01 s 7003s [6037/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_note = 0.00 s 7003s [6038/8505] TestRDocMarkupToHtmlSnippet#test_accept_verbatim_ruby = 0.01 s 7003s [6039/8505] TestRDocMarkupToHtmlSnippet#test_start_accepting = 0.00 s 7003s [6040/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note_2 = 0.01 s 7003s [6041/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_br = 0.01 s 7003s [6042/8505] TestRDocMarkupToHtmlSnippet#test_convert_string = 0.00 s 7003s [6043/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph = 0.00 s 7003s [6044/8505] TestRDocMarkupToHtmlSnippet#test_accept_blank_line = 0.00 s 7003s [6045/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_star = 0.01 s 7003s [6046/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_2 = 0.00 s 7003s [6047/8505] TestRDocMarkupToHtmlSnippet#test_handle_regexp_HYPERLINK_link = 0.00 s 7003s [6048/8505] TestRDocMarkupToHtmlSnippet#test_to_html = 0.00 s 7003s [6049/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_label = 0.00 s 7003s [6050/8505] TestRDocMarkupToHtmlSnippet#test_accept_heading_4 = 0.00 s 7003s [6051/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_b = 0.00 s 7003s [6052/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_ref = 0.00 s 7003s [6053/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_ualpha = 0.00 s 7003s [6054/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit = 0.00 s 7003s [6055/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_ualpha = 0.00 s 7003s [6056/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_ualpha = 0.00 s 7003s [6057/8505] TestRDocMarkupToHtmlSnippet#test_end_accepting = 0.00 s 7003s [6058/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_lalpha = 0.00 s 7003s [6059/8505] TestRDocMarkupToHtmlSnippet#test_list_verbatim_2 = 0.00 s 7003s [6060/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_lalpha = 0.00 s 7003s [6061/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_start_note = 0.00 s 7003s [6062/8505] TestRDocMarkupToHtmlSnippet#test_accept_raw = 0.00 s 7003s [6063/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_end_lalpha = 0.00 s 7003s [6064/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_note = 0.00 s 7003s [6065/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_verbatim_2 = 0.00 s 7003s [6066/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_start_bullet = 0.00 s 7003s [6067/8505] TestRDocMarkupToHtmlSnippet#test_accept_list_item_end_label = 0.00 s 7003s [6068/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_in_tag = 0.00 s 7003s [6069/8505] TestRDocMarkupToHtmlSnippet#test_accept_paragraph_plus = 0.00 s 7003s [6070/8505] TestRDocMarkupToHtmlSnippet#test_convert_RDOCLINK_label_label = 0.00 s 7003s [6071/8505] TestRDocMarkupToHtmlSnippet#test_convert_limit_over = 0.00 s 7003s [6072/8505] TestFiberIO#test_read = 0.00 s 7003s [6073/8505] TestFiberIO#test_tcp_accept = 0.00 s 7003s [6074/8505] TestFiberIO#test_epipe_on_read = 0.00 s 7003s [6075/8505] TestFiberIO#test_tcp_connect = 0.00 s 7003s [6076/8505] TestRDocGeneratorJsonIndex#test_index_methods = 0.01 s 7003s [6077/8505] TestRDocGeneratorJsonIndex#test_build_index = 0.02 s 7003s [6078/8505] TestRDocGeneratorJsonIndex#test_generate_gzipped = 0.02 s 7003s [6079/8505] TestRDocGeneratorJsonIndex#test_index_classes = 0.01 s 7003s [6080/8505] TestRDocGeneratorJsonIndex#test_index_pages = 0.00 s 7003s [6081/8505] TestRDocGeneratorJsonIndex#test_search_string = 0.00 s 7003s [6082/8505] TestRDocGeneratorJsonIndex#test_class_dir = 0.00 s 7003s [6083/8505] TestRDocGeneratorJsonIndex#test_file_dir = 0.00 s 7003s [6084/8505] TestRDocGeneratorJsonIndex#test_generate_search_index_with_reproducible_builds = 0.01 s 7003s [6085/8505] TestRDocGeneratorJsonIndex#test_index_classes_nodoc = 0.00 s 7003s [6086/8505] TestRDocGeneratorJsonIndex#test_generate_utf_8 = 0.02 s 7003s [6087/8505] OpenSSL::TestPKeyDH#test_new_empty = 0.00 s 7003s [6088/8505] TestRDocMarkupToLabel#test_accept_list_end_number = 0.00 s 7003s [6089/8505] TestRDocMarkupToLabel#test_accept_list_item_end_number = 0.00 s 7003s [6090/8505] TestRDocMarkupToLabel#test_accept_document = 0.00 s 7003s [6091/8505] TestRDocMarkupToLabel#test_accept_list_item_start_number = 0.00 s 7003s [6092/8505] TestRDocMarkupToLabel#test_accept_heading_b = 0.00 s 7003s [6093/8505] TestRDocMarkupToLabel#test_list_nested = 0.00 s 7003s [6094/8505] TestRDocMarkupToLabel#test_list_verbatim = 0.00 s 7003s [6095/8505] TestRDocMarkupToLabel#test_convert_tt = 0.00 s 7003s [6096/8505] TestRDocMarkupToLabel#test_convert_escape = 0.00 s 7003s [6097/8505] TestRDocMarkupToLabel#test_accept_verbatim = 0.00 s 7003s [6098/8505] TestRDocMarkupToLabel#test_accept_paragraph_i = 0.00 s 7003s [6099/8505] TestRDocMarkupToLabel#test_accept_block_quote = 0.00 s 7003s [6100/8505] TestRDocMarkupToLabel#test_accept_paragraph_break = 0.00 s 7003s [6101/8505] TestRDocMarkupToLabel#test_accept_list_start_ualpha = 0.00 s 7003s [6102/8505] TestRDocMarkupToLabel#test_accept_heading_suppressed_crossref = 0.00 s 7003s [6103/8505] TestRDocMarkupToLabel#test_accept_heading_3 = 0.00 s 7003s [6104/8505] TestRDocMarkupToLabel#test_accept_heading_1 = 0.00 s 7003s [6105/8505] TestRDocMarkupToLabel#test_accept_list_start_lalpha = 0.00 s 7003s [6106/8505] TestRDocMarkupToLabel#test_accept_heading = 0.00 s 7003s [6107/8505] TestRDocMarkupToLabel#test_accept_list_end_label = 0.00 s 7003s [6108/8505] TestRDocMarkupToLabel#test_convert_tidylink = 0.00 s 7003s [6109/8505] TestRDocMarkupToLabel#test_accept_list_item_start_bullet = 0.00 s 7003s [6110/8505] TestRDocMarkupToLabel#test_accept_paragraph_underscore = 0.00 s 7003s [6111/8505] TestRDocMarkupToLabel#test_accept_list_item_end_bullet = 0.00 s 7003s [6112/8505] TestRDocMarkupToLabel#test_accept_rule = 0.00 s 7003s [6113/8505] TestRDocMarkupToLabel#test_accept_list_end_bullet = 0.00 s 7003s [6114/8505] TestRDocMarkupToLabel#test_accept_list_item_start_label = 0.00 s 7003s [6115/8505] TestRDocMarkupToLabel#test_convert_em = 0.00 s 7003s [6116/8505] TestRDocMarkupToLabel#test_accept_list_end_note = 0.00 s 7003s [6117/8505] TestRDocMarkupToLabel#test_convert_bold = 0.00 s 7003s [6118/8505] TestRDocMarkupToLabel#test_accept_list_start_number = 0.00 s 7003s [6119/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_multi_description = 0.00 s 7003s [6120/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_multi_label = 0.00 s 7003s [6121/8505] TestRDocMarkupToLabel#test_accept_list_item_end_note = 0.00 s 7003s [6122/8505] TestRDocMarkupToLabel#test_start_accepting = 0.00 s 7003s [6123/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note_2 = 0.00 s 7003s [6124/8505] TestRDocMarkupToLabel#test_accept_paragraph_br = 0.00 s 7003s [6125/8505] TestRDocMarkupToLabel#test_accept_paragraph = 0.00 s 7003s [6126/8505] TestRDocMarkupToLabel#test_accept_blank_line = 0.00 s 7003s [6127/8505] TestRDocMarkupToLabel#test_accept_paragraph_star = 0.00 s 7003s [6128/8505] TestRDocMarkupToLabel#test_convert_em_dash = 0.00 s 7003s [6129/8505] TestRDocMarkupToLabel#test_accept_heading_2 = 0.00 s 7003s [6130/8505] TestRDocMarkupToLabel#test_accept_list_start_label = 0.00 s 7003s [6131/8505] TestRDocMarkupToLabel#test_accept_heading_4 = 0.00 s 7003s [6132/8505] TestRDocMarkupToLabel#test_accept_paragraph_b = 0.00 s 7003s [6133/8505] TestRDocMarkupToLabel#test_accept_list_item_start_ualpha = 0.00 s 7003s [6134/8505] TestRDocMarkupToLabel#test_convert_crossref = 0.00 s 7003s [6135/8505] TestRDocMarkupToLabel#test_accept_list_item_end_ualpha = 0.00 s 7003s [6136/8505] TestRDocMarkupToLabel#test_accept_list_end_ualpha = 0.00 s 7003s [6137/8505] TestRDocMarkupToLabel#test_end_accepting = 0.00 s 7003s [6138/8505] TestRDocMarkupToLabel#test_accept_list_item_start_lalpha = 0.00 s 7003s [6139/8505] TestRDocMarkupToLabel#test_accept_list_item_end_lalpha = 0.00 s 7003s [6140/8505] TestRDocMarkupToLabel#test_accept_list_item_start_note = 0.00 s 7003s [6141/8505] TestRDocMarkupToLabel#test_accept_raw = 0.00 s 7003s [6142/8505] TestRDocMarkupToLabel#test_accept_list_end_lalpha = 0.00 s 7003s [6143/8505] TestRDocMarkupToLabel#test_accept_list_start_note = 0.00 s 7003s [6144/8505] TestRDocMarkupToLabel#test_accept_list_start_bullet = 0.00 s 7003s [6145/8505] TestRDocMarkupToLabel#test_accept_list_item_end_label = 0.00 s 7003s [6146/8505] TestRDocMarkupToLabel#test_accept_paragraph_plus = 0.00 s 7003s [6147/8505] TestRelineAsReadline#test_insert_text = 0.01 s 7003s [6148/8505] TestRelineAsReadline#test_refresh_line = 0.01 s 7003s [6149/8505] TestRelineAsReadline#test_input= = 0.00 s 7003s [6150/8505] TestRelineAsReadline#test_point = 0.00 s 7003s [6151/8505] TestRelineAsReadline#test_output= = 0.00 s 7003s [6152/8505] TestRelineAsReadline#test_modify_text_in_pre_input_hook = 0.02 s 7003s [6153/8505] TestRelineAsReadline#test_some_characters_methods = 0.00 s 7003s [6154/8505] TestRelineAsReadline#test_completion_with_completion_append_character = 0.01 s 7003s [6155/8505] TestRelineAsReadline#test_delete_text = 0.00 s 7003s [6156/8505] TestRelineAsReadline#test_completion_append_character = 0.00 s 7003s [6157/8505] TestRelineAsReadline#test_simple_completion = 0.01 s 7003s [6158/8505] TestRelineAsReadline#test_input_metachar = 0.03 s 7003s [6159/8505] TestRelineAsReadline#test_line_buffer__point = 0.00 s 7003s [6160/8505] TestRelineAsReadline#test_setting_quoting_detection_proc = 0.00 s 7003s [6161/8505] TestRelineAsReadline#test_closed_outstream = 0.00 s 7003s [6162/8505] TestRelineAsReadline#test_using_quoting_detection_proc_with_multibyte_input = 0.00 s 7003s [6163/8505] TestRelineAsReadline#test_input_metachar_multibyte = 0.05 s 7003s [6164/8505] TestRelineAsReadline#test_using_quoting_detection_proc = 0.00 s 7003s [6165/8505] TestRelineAsReadline#test_get_screen_size = 0.00 s 7003s [6166/8505] TestRelineAsReadline#test_pre_input_hook = 0.00 s 7003s [6167/8505] TestRelineAsReadline#test_completion_case_fold = 0.01 s 7003s [6168/8505] TestRelineAsReadline#test_completion_encoding = 0.03 s 7003s [6169/8505] TestRelineAsReadline#test_completion_proc = 0.00 s 7003s [6170/8505] TestRelineAsReadline#test_editing_mode = 0.01 s 7004s [6171/8505] TestRelineAsReadline#test_readline = 0.02 s 7004s [6172/8505] TestRDocParserRd#test_scan = 0.00 s 7004s [6173/8505] TestRDocParserRd#test_file = 0.00 s 7004s [6174/8505] TestRDocParserRd#test_class_can_parse = 0.00 s 7004s [6175/8505] Reline::MacroTest#test_alias = 0.00 s 7004s [6176/8505] Reline::MacroTest#test_simple_input = 0.01 s 7004s [6177/8505] TestRDocParserRuby#test_sanity_interpolation_format = 0.01 s 7004s [6178/8505] TestRDocParserRuby#test_parse_statements_identifier_args = 0.01 s 7004s [6179/8505] TestRDocParserRuby#test_parse_comment_attr = 0.00 s 7004s [6180/8505] TestRDocParserRuby#test_parse_method_parameters_comment = 0.00 s 7004s [6181/8505] TestRDocParserRuby#test_parse_call_syntax_sugar_for_constant = 0.01 s 7004s [6182/8505] TestRDocParserRuby#test_parse_class_stopdoc = 0.00 s 7004s [6183/8505] TestRDocParserRuby#test_parse_attr_accessor_with_newline = 0.00 s 7004s [6184/8505] TestRDocParserRuby#test_parse_method_dummy = 0.01 s 7004s [6185/8505] TestRDocParserRuby#test_parse_statements_stopdoc_constant = 0.00 s 7004s [6186/8505] TestRDocParserRuby#test_parse_statements_identifier_constant = 0.02 s 7004s [6187/8505] TestRDocParserRuby#test_parse_method_toplevel = 0.00 s 7004s [6188/8505] TestRDocParserRuby#test_scan_class_nested_nodoc = 0.01 s 7004s [6189/8505] TestRDocParserRuby#test_parse_statements_identifier_define_method = 0.01 s 7004s [6190/8505] TestRDocParserRuby#test_singleton_method_via_eigenclass = 0.01 s 7004s [6191/8505] TestRDocParserRuby#test_read_directive_empty = 0.00 s 7004s [6192/8505] TestRDocParserRuby#test_parse_method = 0.00 s 7004s [6193/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_directly = 0.01 s 7004s [6194/8505] TestRDocParserRuby#test_parse_constant_alias = 0.01 s 7004s [6195/8505] TestRDocParserRuby#test_parse_const_alias_defined_elsewhere = 0.01 s 7004s [6196/8505] TestRDocParserRuby#test_parse_method_nodoc_track = 0.00 s 7004s [6197/8505] TestRDocParserRuby#test_parse_meta_method_singleton = 0.00 s 7004s [6198/8505] TestRDocParserRuby#test_document_after_rescue_inside_paren = 0.01 s 7004s [6199/8505] TestRDocParserRuby#test_parse_alias_meta = 0.00 s 7004s [6200/8505] TestRDocParserRuby#test_parse_constant_alias_same_name = 0.00 s 7004s [6201/8505] TestRDocParserRuby#test_parse_class_multi_ghost_methods = 0.02 s 7004s [6202/8505] TestRDocParserRuby#test_parse_constant_with_bracket = 0.01 s 7004s [6203/8505] TestRDocParserRuby#test_scan_stopdoc_nested = 0.00 s 7004s [6204/8505] TestRDocParserRuby#test_parse_for_in = 0.01 s 7004s [6205/8505] TestRDocParserRuby#test_scan_struct_self_brackets = 0.01 s 7004s [6206/8505] TestRDocParserRuby#test_get_class_specification = 0.04 s 7004s [6207/8505] TestRDocParserRuby#test_parse_attr_accessor_nodoc = 0.00 s 7004s [6208/8505] TestRDocParserRuby#test_parse_statements_identifier_attr = 0.00 s 7004s [6209/8505] TestRDocParserRuby#test_parse_meta_attr_accessor = 0.00 s 7004s [6210/8505] TestRDocParserRuby#test_end_that_doesnt_belong_to_class_doesnt_change_visibility = 0.01 s 7004s [6211/8505] TestRDocParserRuby#test_scan_constant_visibility = 0.01 s 7004s [6212/8505] TestRDocParserRuby#test_parse_meta_attr_writer = 0.01 s 7004s [6213/8505] TestRDocParserRuby#test_scan_constant_in_rescue = 0.01 s 7004s [6214/8505] TestRDocParserRuby#test_parse_class_definition_encountered_after_class_reference = 0.01 s 7004s [6215/8505] TestRDocParserRuby#test_parse_class_colon3_self_reference = 0.01 s 7004s [6216/8505] TestRDocParserRuby#test_parse_statements_complex_condition_in_for = 0.01 s 7004s [6217/8505] TestRDocParserRuby#test_read_directive_allow = 0.00 s 7004s [6218/8505] TestRDocParserRuby#test_parse_method_stopdoc = 0.00 s 7004s [6219/8505] TestRDocParserRuby#test_parse_meta_method_name = 0.00 s 7004s [6220/8505] TestRDocParserRuby#test_parse_method_gvar = 0.01 s 7004s [6221/8505] TestRDocParserRuby#test_read_documentation_modifiers_not_dash_new = 0.00 s 7004s [6222/8505] TestRDocParserRuby#test_parse_statements_postfix_if_after_heredocbeg = 0.00 s 7004s [6223/8505] TestRDocParserRuby#test_scan_visibility = 0.01 s 7004s [6224/8505] TestRDocParserRuby#test_parse_require_dynamic_string = 0.01 s 7004s [6225/8505] TestRDocParserRuby#test_parse_alias_singleton = 0.00 s 7004s [6226/8505] TestRDocParserRuby#test_get_symbol_or_name = 0.00 s 7004s [6227/8505] TestRDocParserRuby#test_parse_extend_or_include_extend = 0.01 s 7004s [6228/8505] TestRDocParserRuby#test_parse_meta_method = 0.00 s 7004s [6229/8505] TestRDocParserRuby#test_parse_method_internal_lvar = 0.00 s 7004s [6230/8505] TestRDocParserRuby#test_parse_statements_identifier_yields = 0.00 s 7004s [6231/8505] TestRDocParserRuby#test_read_documentation_modifiers = 0.00 s 7004s [6232/8505] TestRDocParserRuby#test_parse_attr_stopdoc = 0.00 s 7004s [6233/8505] TestRDocParserRuby#test_parse_method_internal_ivar = 0.00 s 7004s [6234/8505] TestRDocParserRuby#test_parse_statements_class_if = 0.00 s 7004s [6235/8505] TestRDocParserRuby#test_parse_class_ghost_method_yields = 0.00 s 7004s [6236/8505] TestRDocParserRuby#test_parse_method_parameters_with_paren_comment_continue = 0.00 s 7004s [6237/8505] TestRDocParserRuby#test_scan_method_semi_method = 0.00 s 7004s [6238/8505] TestRDocParserRuby#test_look_for_directives_in_unhandled = 0.00 s 7004s [6239/8505] TestRDocParserRuby#test_parse_mutable_heredocbeg = 0.00 s 7004s [6240/8505] TestRDocParserRuby#test_parse_meta_attr_reader = 0.00 s 7004s [6241/8505] TestRDocParserRuby#test_parse_method_no_parens = 0.00 s 7004s [6242/8505] TestRDocParserRuby#test_scan_block_comment_nested = 0.00 s 7004s [6243/8505] TestRDocParserRuby#test_read_directive = 0.00 s 7004s [6244/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition = 0.00 s 7004s [6245/8505] TestRDocParserRuby#test_parse_statements_encoding = 0.00 s 7004s [6246/8505] TestRDocParserRuby#test_parse_comment_method = 0.00 s 7004s [6247/8505] TestRDocParserRuby#test_parse_class_the_same_of_outside = 0.00 s 7004s [6248/8505] TestRDocParserRuby#test_parse_statements_embdoc_in_document = 0.01 s 7004s [6249/8505] TestRDocParserRuby#test_parse_statements_identifier_alias_method = 0.01 s 7004s [6250/8505] TestRDocParserRuby#test_parse_top_level_statements_constant_nodoc_integration = 0.00 s 7004s [6251/8505] TestRDocParserRuby#test_parse_statements_identifier_attr_accessor = 0.00 s 7004s [6252/8505] TestRDocParserRuby#test_read_documentation_modifiers_not_new = 0.00 s 7004s [6253/8505] TestRDocParserRuby#test_parse_method_funky = 0.00 s 7004s [6254/8505] TestRDocParserRuby#test_parse_module_relative_to_top_level_namespace = 0.00 s 7004s [6255/8505] TestRDocParserRuby#test_scan_block_comment_notflush = 0.00 s 7004s [6256/8505] TestRDocParserRuby#test_parse_comment_attr_attr_reader = 0.00 s 7004s [6257/8505] TestRDocParserRuby#test_parse_statements_stopdoc_def = 0.01 s 7004s [6258/8505] TestRDocParserRuby#test_collect_first_comment_rd_hash = 0.00 s 7004s [6259/8505] TestRDocParserRuby#test_parse_statements_super = 0.00 s 7004s [6260/8505] TestRDocParserRuby#test_parse_const_alias_defined_far_away = 0.01 s 7004s [6261/8505] TestRDocParserRuby#test_parse_meta_method_stopdoc = 0.00 s 7004s [6262/8505] TestRDocParserRuby#test_suppress_parents_documented = 0.00 s 7004s [6263/8505] TestRDocParserRuby#test_parse_statements_identifier_include = 0.01 s 7004s [6264/8505] TestRDocParserRuby#test_parse_meta_method_define_method = 0.00 s 7004s [6265/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_without_paren = 0.01 s 7004s [6266/8505] TestRDocParserRuby#test_parse_syntax_error_code = 0.01 s 7004s [6267/8505] TestRDocParserRuby#test_parse_statements_stopdoc_identifier_metaprogrammed = 0.00 s 7004s [6268/8505] TestRDocParserRuby#test_parse_statements_postfix_if_unless = 0.00 s 7004s [6269/8505] TestRDocParserRuby#test_look_for_directives_in_section = 0.00 s 7004s [6270/8505] TestRDocParserRuby#test_scan_constant_nodoc = 0.00 s 7004s [6271/8505] TestRDocParserRuby#test_sanity_integer = 0.00 s 7004s [6272/8505] TestRDocParserRuby#test_parse_extend_or_include_include = 0.00 s 7004s [6273/8505] TestRDocParserRuby#test_scan_constant_in_method = 0.00 s 7004s [6274/8505] TestRDocParserRuby#test_parse_meta_method_block = 0.00 s 7004s [6275/8505] TestRDocParserRuby#test_parse_module_stopdoc = 0.00 s 7004s [6276/8505] TestRDocParserRuby#test_parse_included = 0.00 s 7004s [6277/8505] TestRDocParserRuby#test_parse_attr_accessor = 0.00 s 7004s [6278/8505] TestRDocParserRuby#test_parse_top_level_statements_stopdoc = 0.00 s 7004s [6279/8505] TestRDocParserRuby#test_parse_statements_identifier_alias_method_before_original_method = 0.01 s 7004s [6280/8505] TestRDocParserRuby#test_parse_class_singleton = 0.00 s 7004s [6281/8505] TestRDocParserRuby#test_parse_method_nil = 0.01 s 7004s [6282/8505] TestRDocParserRuby#test_collect_first_comment = 0.00 s 7004s [6283/8505] TestRDocParserRuby#test_parse_meta_attr_stopdoc = 0.00 s 7004s [6284/8505] TestRDocParserRuby#test_parse_constant_in_method = 0.00 s 7004s [6285/8505] TestRDocParserRuby#test_parse_method_true = 0.00 s 7004s [6286/8505] TestRDocParserRuby#test_parse_statements_enddoc_top_level = 0.01 s 7004s [6287/8505] TestRDocParserRuby#test_parse_const_fail_w_meta = 0.00 s 7004s [6288/8505] TestRDocParserRuby#test_parse_on_ignored_nl_with_nil_text = 0.00 s 7004s [6289/8505] TestRDocParserRuby#test_parse_meta_method_string_name = 0.00 s 7004s [6290/8505] TestRDocParserRuby#test_parse_const_third_party = 0.01 s 7004s [6291/8505] TestRDocParserRuby#test_parse_statements_super_no_method = 0.00 s 7004s [6292/8505] TestRDocParserRuby#test_parse_method_ampersand = 0.00 s 7004s [6293/8505] TestRDocParserRuby#test_scan_meta_method_block = 0.00 s 7004s [6294/8505] TestRDocParserRuby#test_parse_method_parameters_comment_continue = 0.00 s 7004s [6295/8505] TestRDocParserRuby#test_parse_statements_class_nested = 0.00 s 7004s [6296/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_via_variable = 0.01 s 7004s [6297/8505] TestRDocParserRuby#test_parse_constant = 0.00 s 7004s [6298/8505] TestRDocParserRuby#test_parse_statements_identifier_private_class_method = 0.01 s 7004s [6299/8505] TestRDocParserRuby#test_parse_method_with_args_directive = 0.00 s 7004s [6300/8505] TestRDocParserRuby#test_collect_first_comment_encoding = 0.00 s 7004s [6301/8505] TestRDocParserRuby#test_parse_statements_def_percent_string_pound = 0.01 s 7004s [6302/8505] TestRDocParserRuby#test_parse_module = 0.00 s 7004s [6303/8505] TestRDocParserRuby#test_parse_constant_the_same_of_outside = 0.00 s 7004s [6304/8505] TestRDocParserRuby#test_look_for_directives_in_method = 0.00 s 7004s [6305/8505] TestRDocParserRuby#test_parse_statements_identifier_meta_method = 0.00 s 7004s [6306/8505] TestRDocParserRuby#test_parse_class_ghost_method = 0.00 s 7004s [6307/8505] TestRDocParserRuby#test_suppress_parents = 0.00 s 7004s [6308/8505] TestRDocParserRuby#test_parse_attr_accessor_stopdoc = 0.00 s 7004s [6309/8505] TestRDocParserRuby#test_parse_class_nodoc = 0.00 s 7004s [6310/8505] TestRDocParserRuby#test_parse_method_internal_gvar = 0.01 s 7004s [6311/8505] TestRDocParserRuby#test_parse_statements_stopdoc_alias = 0.00 s 7004s [6312/8505] TestRDocParserRuby#test_parse_instance_operation_method = 0.00 s 7004s [6313/8505] TestRDocParserRuby#test_parse_meta_attr_named = 0.00 s 7004s [6314/8505] TestRDocParserRuby#test_parse_class_single_root = 0.01 s 7004s [6315/8505] TestRDocParserRuby#test_sanity_interpolation_crazy = 0.01 s 7004s [6316/8505] TestRDocParserRuby#test_parse_symbol_in_paren_arg = 0.01 s 7004s [6317/8505] TestRDocParserRuby#test_parse_method_alias = 0.00 s 7004s [6318/8505] TestRDocParserRuby#test_parse_method_nodoc = 0.00 s 7004s [6319/8505] TestRDocParserRuby#test_look_for_directives_in_attr = 0.00 s 7004s [6320/8505] TestRDocParserRuby#test_parse_method_bracket = 0.01 s 7004s [6321/8505] TestRDocParserRuby#test_parse_comment_method_stopdoc = 0.00 s 7004s [6322/8505] TestRDocParserRuby#test_look_for_directives_in_commented = 0.00 s 7004s [6323/8505] TestRDocParserRuby#test_parse_class_mistaken_for_module = 0.00 s 7004s [6324/8505] TestRDocParserRuby#test_read_directive_one_liner = 0.00 s 7004s [6325/8505] TestRDocParserRuby#test_parse_statements_stopdoc_identifier_alias_method = 0.00 s 7004s [6326/8505] TestRDocParserRuby#test_parse_method_constant = 0.01 s 7004s [6327/8505] TestRDocParserRuby#test_parse_statements_identifier_private = 0.00 s 7004s [6328/8505] TestRDocParserRuby#test_scan_stopdoc = 0.00 s 7004s [6329/8505] TestRDocParserRuby#test_parse_meta_method_unknown = 0.00 s 7004s [6330/8505] TestRDocParserRuby#test_read_documentation_modifiers_notnew = 0.00 s 7004s [6331/8505] TestRDocParserRuby#test_scan_cr = 0.00 s 7004s [6332/8505] TestRDocParserRuby#test_parse_class_in_a_file_repeatedly = 0.00 s 7004s [6333/8505] TestRDocParserRuby#test_parse_attr_accessor_nodoc_track = 0.00 s 7004s [6334/8505] TestRDocParserRuby#test_scan_constant_nodoc_block = 0.00 s 7004s [6335/8505] TestRDocParserRuby#test_parse_statements_enddoc = 0.00 s 7004s [6336/8505] TestRDocParserRuby#test_sanity_symbol_interpolation = 0.00 s 7004s [6337/8505] TestRDocParserRuby#test_scan_markup_override = 0.00 s 7004s [6338/8505] TestRDocParserRuby#test_scan_visibility_count = 0.01 s 7004s [6339/8505] TestRDocParserRuby#test_parse_top_level_statements_enddoc = 0.00 s 7004s [6340/8505] TestRDocParserRuby#test_get_class_or_module_ignore_constants = 0.00 s 7004s [6341/8505] TestRDocParserRuby#test_parse_attr_accessor_writer = 0.00 s 7004s [6342/8505] TestRDocParserRuby#test_scan_tomdoc_meta = 0.01 s 7004s [6343/8505] TestRDocParserRuby#test_parse_class_single = 0.02 s 7004s [6344/8505] TestRDocParserRuby#test_parse_statements_method_oneliner_with_regexp = 0.00 s 7004s [6345/8505] TestRDocParserRuby#test_parse_statements_identifier_module_function = 0.00 s 7004s [6346/8505] TestRDocParserRuby#test_parse_class_single_gvar = 0.00 s 7004s [6347/8505] TestRDocParserRuby#test_parse_attr = 0.00 s 7004s [6348/8505] TestRDocParserRuby#test_parse_postfix_nodoc = 0.00 s 7004s [6349/8505] TestRDocParserRuby#test_get_class_or_module = 0.01 s 7004s [6350/8505] TestRDocParserRuby#test_parse_constant_attrasgn = 0.01 s 7004s [6351/8505] TestRDocParserRuby#test_parse_statements_alias_method = 0.01 s 7004s [6352/8505] TestRDocParserRuby#test_parse_statements_postfix_if_unless_with_expr_mid = 0.01 s 7004s [6353/8505] TestRDocParserRuby#test_parse_method_utf8 = 0.01 s 7004s [6354/8505] TestRDocParserRuby#test_parse_method_star = 0.00 s 7004s [6355/8505] TestRDocParserRuby#test_read_directive_no_comment = 0.00 s 7004s [6356/8505] TestRDocParserRuby#test_stopdoc_after_comment = 0.00 s 7004s [6357/8505] TestRDocParserRuby#test_parse_method_false = 0.00 s 7004s [6358/8505] TestRDocParserRuby#test_parse_method_toplevel_class = 0.00 s 7004s [6359/8505] TestRDocParserRuby#test_parse_symbol_in_arg = 0.00 s 7004s [6360/8505] TestRDocParserRuby#test_parse_module_nodoc = 0.00 s 7004s [6361/8505] TestRDocParserRuby#test_parse_alias_stopdoc = 0.00 s 7004s [6362/8505] TestRDocParserRuby#test_parse_statements_identifier_require = 0.00 s 7004s [6363/8505] TestRDocParserRuby#test_parse_top_level_statements_stopdoc_integration = 0.00 s 7005s [6364/8505] TestRDocParserRuby#test_parse_constant_stopdoc = 0.00 s 7005s [6365/8505] TestRDocParserRuby#test_parse_include_by_dynamic_definition_with_brace = 0.00 s 7005s [6366/8505] TestRDocParserRuby#test_parse_class = 0.00 s 7005s [6367/8505] TestRDocParserRuby#test_scan_rails_routes = 0.00 s 7005s [6368/8505] TestRDocParserRuby#test_parse_comment_nested = 0.00 s 7005s [6369/8505] TestRDocParserRuby#test_parse_class_colon3 = 0.00 s 7005s [6370/8505] TestRDocParserRuby#test_parse_constant_rescue = 0.00 s 7005s [6371/8505] TestRDocParserRuby#test_parse_multi_ghost_methods = 0.00 s 7005s [6372/8505] TestRDocParserRuby#test_parse_method_or_yield_parameters_hash = 0.00 s 7005s [6373/8505] TestRDocParserRuby#test_parse_class_object = 0.00 s 7005s [6374/8505] TestRDocParserRuby#test_parse_meta_attr = 0.00 s 7005s [6375/8505] TestRDocParserRuby#test_parse_heredoc_end = 0.00 s 7005s [6376/8505] TestRDocParserRuby#test_sanity_interpolation = 0.00 s 7005s [6377/8505] TestRDocParserRuby#test_parse_redefined_op_with_constant = 0.00 s 7005s [6378/8505] TestRDocParserRuby#test_parse_statements_while_begin = 0.00 s 7005s [6379/8505] TestRDocParserRuby#test_parse_comment_attr_stopdoc = 0.00 s 7005s [6380/8505] TestRDocParserRuby#test_parse_meta_method_singleton_name = 0.00 s 7005s [6381/8505] TestRDocParserRuby#test_parse_statements_identifier_public_class_method = 0.01 s 7005s [6382/8505] TestRDocParserRuby#test_parse_alias = 0.00 s 7005s [6383/8505] TestRDocParserRuby#test_sanity_interpolation_curly = 0.00 s 7005s [6384/8505] TestRDocParserRuby#test_parse_method_gvar_insane = 0.00 s 7005s [6385/8505] TestRDocParserRuby#test_scan_duplicate_module = 0.00 s 7005s [6386/8505] TestRDocParserRuby#test_parse_class_lower_name_warning = 0.00 s 7005s [6387/8505] TestRDocParserRuby#test_scan_markup_first_comment = 0.00 s 7005s [6388/8505] TestRDocParserRuby#test_scan_block_comment = 0.00 s 7005s [6389/8505] TestRDocParserRuby#test_get_class_or_module_document_children = 0.00 s 7005s [6390/8505] TestRDocParserRuby#test_parse_comment_method_args = 0.00 s 7005s [6391/8505] TestRDocParserRuby#test_scan_stopdoc_class_alias = 0.00 s 7005s [6392/8505] TestRDocParserRuby#test_parse_yield_in_braces_with_parens = 0.00 s 7005s [6393/8505] TestRDocParserRuby#test_parse_class_nested_superclass = 0.00 s 7005s [6394/8505] Psych::Visitors::TestDepthFirst#test_alias = 0.00 s 7005s [6395/8505] Psych::Visitors::TestDepthFirst#test_scalar = 0.00 s 7005s [6396/8505] Psych::Visitors::TestDepthFirst#test_mapping = 0.00 s 7005s [6397/8505] Psych::Visitors::TestDepthFirst#test_sequence = 0.00 s 7005s [6398/8505] TestBigDecimal#test_remainder = 0.00 s 7005s [6399/8505] TestBigDecimal#test_cmp_nan = 0.00 s 7005s [6400/8505] TestBigDecimal#test_power_of_three = 0.00 s 7005s [6401/8505] TestBigDecimal#test_NAN = 0.00 s 7005s [6402/8505] TestBigDecimal#test_power_of_nan = 0.00 s 7005s [6403/8505] TestBigDecimal#test_initialize_copy_dup_clone_frozen_error = 0.00 s 7005s [6404/8505] TestBigDecimal#test_power_with_prec = 0.01 s 7005s [6405/8505] TestBigDecimal#test_precision_full = 0.00 s 7005s [6406/8505] TestBigDecimal#test_BigMath_log_with_nan = 0.00 s 7005s [6407/8505] TestBigDecimal#test_nonzero_p = 0.00 s 7005s [6408/8505] TestBigDecimal#test_n_significant_digits_only_integer = 0.00 s 7005s [6409/8505] TestBigDecimal#test_div_bigdecimal = 0.00 s 7005s [6410/8505] TestBigDecimal#test_to_r = 0.00 s 7005s [6411/8505] TestBigDecimal#test_BigMath_log_with_nil_precision = 0.00 s 7005s [6412/8505] TestBigDecimal#test_frozen_p = 0.00 s 7005s [6413/8505] TestBigDecimal#test_BigMath_log_with_complex = 0.00 s 7005s [6414/8505] TestBigDecimal#test_s_ver = 0.00 s 7005s [6415/8505] TestBigDecimal#test_mult_bigdecimal = 0.00 s 7005s [6416/8505] TestBigDecimal#test_cmp_data = 0.00 s 7005s [6417/8505] TestBigDecimal#test_inspect = 0.00 s 7005s [6418/8505] TestBigDecimal#test_BigMath_log_with_square_of_E = 0.00 s 7005s [6419/8505] TestBigDecimal#test_coerce = 0.00 s 7005s [6420/8505] TestBigDecimal#test_dup = 0.00 s 7005s [6421/8505] TestBigDecimal#test_exp_with_negative = 0.00 s 7005s [6422/8505] TestBigDecimal#test_BigMath_log_with_string = 0.00 s 7005s [6423/8505] TestBigDecimal#test_BigMath_log_with_high_precision_case = 0.01 s 7005s [6424/8505] TestBigDecimal#test_div_precision = 0.01 s 7005s [6425/8505] TestBigDecimal#test_inf = 0.00 s 7005s [6426/8505] TestBigDecimal#test_to_f = 0.11 s 7005s [6427/8505] TestBigDecimal#test_to_string = 0.00 s 7005s [6428/8505] TestBigDecimal#test_exception_zerodivide = 0.01 s 7005s [6429/8505] TestBigDecimal#test_div_with_float = 0.00 s 7005s [6430/8505] TestBigDecimal#test_div_error = 0.00 s 7005s [6431/8505] TestBigDecimal#test_INFINITY = 0.00 s 7005s [6432/8505] TestBigDecimal#test_remainder_with_float = 0.00 s 7005s [6433/8505] TestBigDecimal#test_BigDecimal_with_big_decimal = 0.00 s 7005s [6434/8505] TestBigDecimal#test_sign = 0.00 s 7005s [6435/8505] TestBigDecimal#test_exponent = 0.00 s 7005s [6436/8505] TestBigDecimal#test_BigDecimal_bug7522 = 0.00 s 7005s [6437/8505] TestBigDecimal#test_exp_with_negative_precision = 0.00 s 7005s [6438/8505] TestBigDecimal#test_sub_with_rational = 0.00 s 7005s [6439/8505] TestBigDecimal#test_BigMath_log_with_positive_infinite = 0.00 s 7005s [6440/8505] TestBigDecimal#test_mult_with_float = 0.00 s 7005s [6441/8505] TestBigDecimal#test_floor = 0.00 s 7005s [6442/8505] TestBigDecimal#test_precision_only_integer = 0.00 s 7005s [6443/8505] TestBigDecimal#test_truncate = 0.00 s 7005s [6444/8505] TestBigDecimal#test_s_interpret_loosely = 0.00 s 7007s [6445/8505] TestBigDecimal#test_BigMath_exp_under_gc_stress = 2.48 s 7007s [6446/8505] TestBigDecimal#test_zero_p = 0.00 s 7007s [6447/8505] TestBigDecimal#test_precision_special = 0.00 s 7007s [6448/8505] TestBigDecimal#test_sub = 0.00 s 7007s [6449/8505] TestBigDecimal#test_fix = 0.00 s 7007s [6450/8505] TestBigDecimal#test_marshal = 0.00 s 7007s [6451/8505] TestBigDecimal#test_BigMath_log_with_1 = 0.00 s 7007s [6452/8505] TestBigDecimal#test_div_with_complex = 0.00 s 7007s [6453/8505] TestBigDecimal#test_sub_with_float = 0.00 s 7007s [6454/8505] TestBigDecimal#test_BigMath_exp_with_rational = 0.00 s 7007s [6455/8505] TestBigDecimal#test_BigMath_log_with_non_integer_precision = 0.00 s 7007s [6456/8505] TestBigDecimal#test_llong_min_gh_200 = 0.00 s 7007s [6457/8505] TestBigDecimal#test_power_with_Bignum = 0.01 s 7007s [6458/8505] TestBigDecimal#test_scale_special = 0.00 s 7007s [6459/8505] TestBigDecimal#test_exp_with_zero_precision = 0.00 s 7007s [6460/8505] TestBigDecimal#test_BigMath_log_with_negative_infinite = 0.00 s 7007s [6461/8505] TestBigDecimal#test_mult = 0.00 s 7007s [6462/8505] TestBigDecimal#test_round_half_up = 0.00 s 7007s [6463/8505] TestBigDecimal#test_round_half_down = 0.00 s 7007s [6464/8505] TestBigDecimal#test_split = 0.00 s 7007s [6465/8505] TestBigDecimal#test_BigMath_exp_with_float = 0.00 s 7010s [6466/8505] TestBigDecimal#test_bug6406 = 2.27 s 7010s [6467/8505] TestBigDecimal#test_BigMath_log_with_exp_1 = 0.00 s 7010s [6468/8505] TestBigDecimal#test_save_limit = 0.00 s 7010s [6469/8505] TestBigDecimal#test_round_half_invalid_option = 0.01 s 7010s [6470/8505] TestBigDecimal#test_BigDecimal_with_exception_keyword = 0.00 s 7010s [6471/8505] TestBigDecimal#test_sqrt_bigdecimal = 0.02 s 7010s [6472/8505] TestBigDecimal#test_remainder_with_rational = 0.00 s 7010s [6473/8505] TestBigDecimal#test_mod_with_float = 0.00 s 7010s [6474/8505] TestBigDecimal#test_BigDecimal_with_rational = 0.00 s 7010s [6475/8505] TestBigDecimal#test_sub_bigdecimal = 0.00 s 7010s [6476/8505] TestBigDecimal#test_precs_deprecated = 0.00 s 7010s [6477/8505] TestBigDecimal#test_exception_nan = 0.00 s 7010s [6478/8505] TestBigDecimal#test_n_significant_digits_special = 0.00 s 7010s [6479/8505] TestBigDecimal#test_BigMath_log_with_zero_arg = 0.00 s 7010s [6480/8505] TestBigDecimal#test_finite_infinite_nan = 0.00 s 7010s [6481/8505] TestBigDecimal#test_quo_without_prec = 0.00 s 7010s [6482/8505] TestBigDecimal#test_scale_only_integer = 0.00 s 7010s [6483/8505] TestBigDecimal#test_hash = 0.00 s 7010s [6484/8505] TestBigDecimal#test_cmp = 0.00 s 7010s [6485/8505] TestBigDecimal#test_to_special_string = 0.00 s 7012s [6486/8505] TestBigDecimal#test_split_under_gc_stress = 2.44 s 7012s [6487/8505] TestBigDecimal#test_cmp_failing_coercion = 0.00 s 7012s [6488/8505] TestBigDecimal#test_BigMath_exp_with_fixnum = 0.00 s 7012s [6489/8505] TestBigDecimal#test_n_significant_digits_only_fraction = 0.00 s 7012s [6490/8505] TestBigDecimal#test_cmp_bignum = 0.00 s 7012s [6491/8505] TestBigDecimal#test_exp_with_1 = 0.00 s 7012s [6492/8505] TestBigDecimal#test_power_of_finite_with_zero = 0.00 s 7012s [6493/8505] TestBigDecimal#test_save_rounding_mode = 0.00 s 7012s [6494/8505] TestBigDecimal#test_power_with_BigDecimal = 0.00 s 7012s [6495/8505] TestBigDecimal#test_BigDecimal_with_integer = 0.00 s 7012s [6496/8505] TestBigDecimal#test_BigDecimal_with_float = 0.00 s 7012s [6497/8505] TestBigDecimal#test_sqrt_5266 = 0.06 s 7012s [6498/8505] TestBigDecimal#test_exp_with_positive_infinite = 0.00 s 7012s [6499/8505] TestBigDecimal#test_scale_full = 0.00 s 7012s [6500/8505] TestBigDecimal#test_divmod_error = 0.00 s 7012s [6501/8505] TestBigDecimal#test_exception_underflow = 0.00 s 7012s [6502/8505] TestBigDecimal#test_power_of_zero = 0.00 s 7012s [6503/8505] TestBigDecimal#test_ctov = 0.01 s 7012s [6504/8505] TestBigDecimal#test_exception_infinity = 0.00 s 7012s [6505/8505] TestBigDecimal#test_neg = 0.00 s 7012s [6506/8505] TestBigDecimal#test_abs_bigdecimal = 0.00 s 7012s [6507/8505] TestBigDecimal#test_BigMath_log_with_reciprocal_of_42 = 0.01 s 7012s [6508/8505] TestBigDecimal#test_BigMath_log_with_float_nan = 0.00 s 7012s [6509/8505] TestBigDecimal#test_BigDecimal_issue_192 = 0.00 s 7012s [6510/8505] TestBigDecimal#test_mod_with_rational = 0.00 s 7012s [6511/8505] TestBigDecimal#test_BigMath_log_with_2 = 0.00 s 7012s [6512/8505] TestBigDecimal#test_precision_only_fraction = 0.00 s 7012s [6513/8505] TestBigDecimal#test_BigMath_log_with_negative_precision = 0.00 s 7012s [6514/8505] TestBigDecimal#test_mult_with_rational = 0.00 s 7012s [6515/8505] TestBigDecimal#test_BigMath_log_with_zero_precision = 0.00 s 7012s [6516/8505] TestBigDecimal#test_div = 0.00 s 7015s [6517/8505] TestBigDecimal#test_BigMath_log_under_gc_stress = 2.46 s 7015s [6518/8505] TestBigDecimal#test_round_half_nil = 0.00 s 7015s [6519/8505] TestBigDecimal#test_power_of_positive_infinity = 0.00 s 7015s [6520/8505] TestBigDecimal#test_BigMath_log_with_42 = 0.01 s 7015s [6521/8505] TestBigDecimal#test_BigMath_log_with_nil = 0.00 s 7015s [6522/8505] TestBigDecimal#test_BigMath_log_with_101 = 0.00 s 7015s [6523/8505] TestBigDecimal#test_clone = 0.00 s 7015s [6524/8505] TestBigDecimal#test_not_equal = 0.00 s 7015s [6525/8505] TestBigDecimal#test_scale_only_fraction = 0.00 s 7015s [6526/8505] TestBigDecimal#test_reminder_infinity_gh_187 = 0.00 s 7015s [6527/8505] TestBigDecimal#test_BigDecimal_with_invalid_string = 0.01 s 7015s [6528/8505] TestBigDecimal#test_BigDecimal_with_complex = 0.00 s 7015s [6529/8505] TestBigDecimal#test_add = 0.00 s 7015s [6530/8505] TestBigDecimal#test_precision_scale = 0.00 s 7015s [6531/8505] TestBigDecimal#test_BigDecimal = 0.00 s 7015s [6532/8505] TestBigDecimal#test_quo_with_prec = 0.00 s 7015s [6533/8505] TestBigDecimal#test_n_significant_digits_full = 0.00 s 7015s [6534/8505] TestBigDecimal#test_cmp_issue9192 = 0.00 s 7015s [6535/8505] TestBigDecimal#test_add_bigdecimal = 0.00 s 7015s [6536/8505] TestBigDecimal#test_to_i = 0.00 s 7015s [6537/8505] TestBigDecimal#test_BigMath_exp = 0.00 s 7015s [6538/8505] TestBigDecimal#test_div_bigdecimal_with_float_and_precision = 0.00 s 7015s [6539/8505] TestBigDecimal#test_power_without_prec = 0.01 s 7015s [6540/8505] TestBigDecimal#test_ceil = 0.00 s 7015s [6541/8505] TestBigDecimal#test_uplus = 0.00 s 7015s [6542/8505] TestBigDecimal#test_s_allocate = 0.00 s 7015s [6543/8505] TestBigDecimal#test_round_half_even = 0.00 s 7015s [6544/8505] TestBigDecimal#test_power_of_negative_infinity = 0.00 s 7015s [6545/8505] TestBigDecimal#test_div_with_rational = 0.00 s 7015s [6546/8505] TestBigDecimal#test_to_s = 0.00 s 7015s [6547/8505] TestBigDecimal#test_power_with_nil = 0.00 s 7015s [6548/8505] TestBigDecimal#test_exp_with_negative_infinite = 0.00 s 7015s [6549/8505] TestBigDecimal#test_save_exception_mode = 0.00 s 7018s [6550/8505] TestBigDecimal#test_precs = 3.34 s 7018s [6551/8505] TestBigDecimal#test_mod = 0.00 s 7018s [6552/8505] TestBigDecimal#test_divmod = 0.00 s 7018s [6553/8505] TestBigDecimal#test_exp_with_nan = 0.00 s 7020s [6554/8505] TestBigDecimal#test_coerce_under_gc_stress = 2.28 s 7020s [6555/8505] TestBigDecimal#test_double_fig = 0.00 s 7020s [6556/8505] TestBigDecimal#test_mode = 0.00 s 7022s [6557/8505] TestBigDecimal#test_power = 2.06 s 7022s [6558/8505] TestBigDecimal#test_divmod_precision = 0.00 s 7022s [6559/8505] TestBigDecimal#test_round = 0.01 s 7022s [6560/8505] TestBigDecimal#test_frac = 0.00 s 7022s [6561/8505] TestBigDecimal#test_mult_with_nil = 0.00 s 7022s [6562/8505] TestBigDecimal#test_exp_with_complex = 0.00 s 7022s [6563/8505] TestBigDecimal#test_BigMath_log_with_negative_arg = 0.00 s 7022s [6564/8505] TestBigDecimal#test_cmp_coerce = 0.00 s 7022s [6565/8505] TestDateMarshal#test_marshal = 0.00 s 7027s [6566/8505] TestIRB::TestRaiseNoBacktraceException#test_raise_exception = 4.27 s 7027s [6567/8505] TestStringIOInRactor#test_ractor = 0.00 s 7027s [6568/8505] Reline::KeyStroke::Test#test_match_status = 0.01 s 7027s [6569/8505] Reline::KeyStroke::Test#test_oneshot_key_bindings = 0.00 s 7027s [6570/8505] Reline::KeyStroke::Test#test_with_reline_key = 0.00 s 7027s [6571/8505] Reline::KeyStroke::Test#test_expand = 0.00 s 7027s [6572/8505] TestCSVEncodings::DifferentOFS#test_parser_works_with_encoded_headers = 0.04 s 7027s [6573/8505] TestCSVEncodings::DifferentOFS#test_parses_shift_jis_encoding = 0.02 s 7027s [6574/8505] TestCSVEncodings::DifferentOFS#test_read_allows_you_to_set_encodings = 0.01 s 7027s [6575/8505] TestCSVEncodings::DifferentOFS#test_regular_expression_escaping = 0.48 s 7027s [6576/8505] TestCSVEncodings::DifferentOFS#test_auto_line_ending_detection = 0.00 s 7027s [6577/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_upgraded_for_ascii_content_during_writing_as_needed = 0.00 s 7027s [6578/8505] TestCSVEncodings::DifferentOFS#test_row_separator_detection_with_invalid_encoding = 0.00 s 7027s [6579/8505] TestCSVEncodings::DifferentOFS#test_csv_chars_are_transcoded = 0.01 s 7027s [6580/8505] TestCSVEncodings::DifferentOFS#test_parses_latin1_encoding = 0.00 s 7027s [6581/8505] TestCSVEncodings::DifferentOFS#test_explicit_encoding = 0.00 s 7027s [6582/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_upgraded_during_writing_as_needed = 0.00 s 7027s [6583/8505] TestCSVEncodings::DifferentOFS#test_encoding_is_not_upgraded_for_non_ascii_content_during_writing_as_needed = 0.00 s 7027s [6584/8505] TestCSVEncodings::DifferentOFS#test_built_in_header_converters_transcode_to_utf_8_then_convert = 0.01 s 7028s [6585/8505] TestCSVEncodings::DifferentOFS#test_read_with_default_encoding = 0.15 s 7028s [6586/8505] TestCSVEncodings::DifferentOFS#test_foreach_allows_you_to_set_encodings = 0.03 s 7028s [6587/8505] TestCSVEncodings::DifferentOFS#test_can_write_csv_in_any_encoding = 0.24 s 7028s [6588/8505] TestCSVEncodings::DifferentOFS#test_open_allows_you_to_set_encodings = 0.01 s 7028s [6589/8505] TestCSVEncodings::DifferentOFS#test_parses_utf16be_encoding = 0.01 s 7028s [6590/8505] TestCSVEncodings::DifferentOFS#test_built_in_converters_transcode_to_utf_8_then_convert = 0.01 s 7028s [6591/8505] TestCSVEncodings::DifferentOFS#test_parses_utf8_encoding = 0.00 s 7028s [6592/8505] TestCSVEncodings::DifferentOFS#test_invalid_encoding_row_error = 0.00 s 7028s [6593/8505] TestCSVEncodings::DifferentOFS#test_encoding_with_default_internal = 0.00 s 7028s [6594/8505] TestCSVEncodings::DifferentOFS#test_reading_with_most_encodings = 0.33 s 7028s [6595/8505] TestRDocRdBlockParser#test_parse_textblock_multi = 0.00 s 7028s [6596/8505] TestRDocRdBlockParser#test_parse_lists_nest = 0.01 s 7028s [6597/8505] TestRDocRdBlockParser#test_parse_desclist = 0.01 s 7028s [6598/8505] TestRDocRdBlockParser#test_parse_enumlist_paragraphs = 0.01 s 7028s [6599/8505] TestRDocRdBlockParser#test_parse_enumlist = 0.00 s 7028s [6600/8505] TestRDocRdBlockParser#test_parse_itemlist_verbatim = 0.00 s 7028s [6601/8505] TestRDocRdBlockParser#test_parse_methodlist = 0.00 s 7028s [6602/8505] TestRDocRdBlockParser#test_parse_verbatim_multi = 0.00 s 7028s [6603/8505] TestRDocRdBlockParser#test_add_footnote = 0.00 s 7028s [6604/8505] TestRDocRdBlockParser#test_parse_footnote = 0.00 s 7028s [6605/8505] TestRDocRdBlockParser#test_parse_heading = 0.01 s 7028s [6606/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph_verbatim = 0.00 s 7028s [6607/8505] TestRDocRdBlockParser#test_parse_itemlist_nest = 0.00 s 7028s [6608/8505] TestRDocRdBlockParser#test_parse_lists = 0.00 s 7028s [6609/8505] TestRDocRdBlockParser#test_parse_include = 0.00 s 7028s [6610/8505] TestRDocRdBlockParser#test_parse_methodlist_empty = 0.00 s 7028s [6611/8505] TestRDocRdBlockParser#test_parse_lists_nest_verbatim2 = 0.00 s 7028s [6612/8505] TestRDocRdBlockParser#test_parse_textblock = 0.00 s 7028s [6613/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph = 0.00 s 7028s [6614/8505] TestRDocRdBlockParser#test_parse_methodlist_paragraph2 = 0.00 s 7028s [6615/8505] TestRDocRdBlockParser#test_parse_verbatim_blankline = 0.00 s 7028s [6616/8505] TestRDocRdBlockParser#test_parse_include_subtree = 0.00 s 7028s [6617/8505] TestRDocRdBlockParser#test_parse_verbatim = 0.00 s 7028s [6618/8505] TestRDocRdBlockParser#test_parse_verbatim_indent = 0.00 s 7028s [6619/8505] TestRDocRdBlockParser#test_parse_itemlist_paragraphs = 0.00 s 7028s [6620/8505] TestRDocRdBlockParser#test_parse_enumlist_verbatim = 0.00 s 7028s [6621/8505] TestRDocRdBlockParser#test_parse_enumlist_multiline = 0.00 s 7028s [6622/8505] TestRDocRdBlockParser#test_parse_itemlist = 0.00 s 7028s [6623/8505] TestRDocRdBlockParser#test_parse_lists_nest_verbatim = 0.00 s 7028s [6624/8505] TestRDocRdBlockParser#test_parse_itemlist_multiline = 0.00 s 7028s [6625/8505] TestRDocRdBlockParser#test_parse_enumlist_verbatim_continue = 0.00 s 7028s [6626/8505] TestRDocRdBlockParser#test_parse_itemlist_verbatim_continue = 0.00 s 7028s [6627/8505] OpenSSL::TestPair#test_readall = 0.07 s 7028s [6628/8505] OpenSSL::TestPair#test_write_nonblock_with_buffered_data = 0.12 s 7029s [6629/8505] OpenSSL::TestPair#test_write_nonblock_with_buffered_data_no_exceptions = 0.11 s 7029s [6630/8505] OpenSSL::TestPair#test_write_nonblock_retry = 0.14 s 7029s [6631/8505] OpenSSL::TestPair#test_multibyte_read_write = 0.12 s 7029s [6632/8505] OpenSSL::TestPair#test_partial_tls_record_read_nonblock = 0.07 s 7029s [6633/8505] OpenSSL::TestPair#test_getc = 0.07 s 7029s [6634/8505] OpenSSL::TestPair#test_read_nonblock_no_exception = 0.13 s 7029s [6635/8505] OpenSSL::TestPair#test_read_nonblock = 0.24 s 7029s [6636/8505] OpenSSL::TestPair#test_gets = 0.12 s 7030s [6637/8505] OpenSSL::TestPair#test_readpartial = 0.12 s 7030s [6638/8505] OpenSSL::TestPair#test_gets_eof_limit = 0.11 s 7030s [6639/8505] OpenSSL::TestPair#test_connect_accept_nonblock = 0.63 s 7030s [6640/8505] OpenSSL::TestPair#test_puts_empty = 0.11 s 7031s [6641/8505] OpenSSL::TestPair#test_write_multiple_arguments = 0.11 s 7031s [6642/8505] OpenSSL::TestPair#test_readline = 0.07 s 7031s [6643/8505] OpenSSL::TestPair#test_write_zero = 0.07 s 7031s [6644/8505] OpenSSL::TestPKey#test_to_text = 0.00 s 7031s [6645/8505] TestCSVRow::DifferentOFS#test_array_delegation = 0.00 s 7031s [6646/8505] TestCSVRow::DifferentOFS#test_to_csv = 0.01 s 7031s [6647/8505] TestCSVRow::DifferentOFS#test_inspect_shows_header_field_pairs = 0.00 s 7031s [6648/8505] TestCSVRow::DifferentOFS#test_set_field = 0.00 s 7031s [6649/8505] TestCSVRow::DifferentOFS#test_headers = 0.00 s 7031s [6650/8505] TestCSVRow::DifferentOFS#test_dup = 0.00 s 7031s [6651/8505] TestCSVRow::DifferentOFS#test_dig_cell_no_dig = 0.00 s 7031s [6652/8505] TestCSVRow::DifferentOFS#test_delete = 0.00 s 7031s [6653/8505] TestCSVRow::DifferentOFS#test_fields = 0.00 s 7031s [6654/8505] TestCSVRow::DifferentOFS#test_delete_if_without_block = 0.00 s 7031s [6655/8505] TestCSVRow::DifferentOFS#test_has_key? = 0.00 s 7031s [6656/8505] TestCSVRow::DifferentOFS#test_dig_by_header = 0.00 s 7031s [6657/8505] TestCSVRow::DifferentOFS#test_each_pair = 0.00 s 7031s [6658/8505] TestCSVRow::DifferentOFS#test_delete_if = 0.00 s 7031s [6659/8505] TestCSVRow::DifferentOFS#test_append = 0.01 s 7031s [6660/8505] TestCSVRow::DifferentOFS#test_field = 0.01 s 7031s [6661/8505] TestCSVRow::DifferentOFS#test_index = 0.00 s 7031s [6662/8505] TestCSVRow::DifferentOFS#test_row_type = 0.00 s 7031s [6663/8505] TestCSVRow::DifferentOFS#test_each = 0.01 s 7031s [6664/8505] TestCSVRow::DifferentOFS#test_dig_cell = 0.01 s 7031s [6665/8505] TestCSVRow::DifferentOFS#test_enumerable = 0.00 s 7031s [6666/8505] TestCSVRow::DifferentOFS#test_can_be_compared_when_not_a_row = 0.00 s 7031s [6667/8505] TestCSVRow::DifferentOFS#test_inspect_encoding_is_ascii_compatible = 0.00 s 7031s [6668/8505] TestCSVRow::DifferentOFS#test_to_a = 0.00 s 7031s [6669/8505] TestCSVRow::DifferentOFS#test_dig_by_index = 0.00 s 7031s [6670/8505] TestCSVRow::DifferentOFS#test_initialize = 0.00 s 7031s [6671/8505] TestCSVRow::DifferentOFS#test_inspect_shows_symbol_headers_as_bare_attributes = 0.00 s 7031s [6672/8505] TestCSVRow::DifferentOFS#test_to_hash = 0.00 s 7031s [6673/8505] TestCSVRow::DifferentOFS#test_queries = 0.00 s 7031s [6674/8505] TestCSVRow::DifferentOFS#test_fetch = 0.00 s 7031s [6675/8505] TestCSVRow::DifferentOFS#test_can_be_compared_with_other_classes = 0.00 s 7031s [6676/8505] CGIModrubyTest#test_cgi_modruby_location = 0.01 s 7031s [6677/8505] CGIModrubyTest#test_cgi_modruby_complex = 0.01 s 7031s [6678/8505] CGIModrubyTest#test_cgi_modruby_requestparams = 0.00 s 7031s [6679/8505] CGIModrubyTest#test_cgi_modruby_simple = 0.00 s 7031s [6680/8505] CGICookieTest#test_cgi_cookie_scriptname = 0.00 s 7031s [6681/8505] CGICookieTest#test_cgi_cookie_new_simple = 0.00 s 7031s [6682/8505] CGICookieTest#test_cgi_cookie_parse_not_decode_name = 0.00 s 7031s [6683/8505] CGICookieTest#test_cgi_cookie_arrayinterface = 0.00 s 7031s [6684/8505] CGICookieTest#test_cgi_cookie_parse = 0.00 s 7031s [6685/8505] CGICookieTest#test_cgi_cookie_new_complex = 0.00 s 7031s [6686/8505] OpenSSL::TestBuffering#test_each_byte = 0.00 s 7031s [6687/8505] OpenSSL::TestBuffering#test_encoding = 0.00 s 7031s [6688/8505] OpenSSL::TestBuffering#test_flush = 0.00 s 7031s [6689/8505] OpenSSL::TestBuffering#test_getc = 0.00 s 7031s [6690/8505] OpenSSL::TestBuffering#test_flush_error = 0.00 s 7031s [6691/8505] TestRDocMarkupToHtml#test_accept_verbatim_pipe = 0.00 s 7031s [6692/8505] TestRDocMarkupToHtml#test_accept_list_end_number = 0.00 s 7031s [6693/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_label = 0.00 s 7031s [6694/8505] TestRDocMarkupToHtml#test_accept_list_item_end_number = 0.00 s 7031s [6695/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_irc = 0.01 s 7031s [6696/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_label_id = 0.00 s 7031s [6697/8505] TestRDocMarkupToHtml#test_accept_document = 0.00 s 7031s [6698/8505] TestRDocMarkupToHtml#test_accept_list_item_start_number = 0.00 s 7031s [6699/8505] TestRDocMarkupToHtml#test_accept_verbatim_parseable_error = 0.00 s 7031s [6700/8505] TestRDocMarkupToHtml#test_accept_heading_b = 0.00 s 7031s [6701/8505] TestRDocMarkupToHtml#test_gen_url_rdoc_file = 0.00 s 7031s [6702/8505] TestRDocMarkupToHtml#test_accept_verbatim_nl_after_backslash = 0.00 s 7031s [6703/8505] TestRDocMarkupToHtml#test_list_nested = 0.00 s 7031s [6704/8505] TestRDocMarkupToHtml#test_handle_regexp_HYPERLINK_irc = 0.00 s 7031s [6705/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_multiple = 0.00 s 7031s [6706/8505] TestRDocMarkupToHtml#test_convert_HYPERLINK_irc = 0.00 s 7031s [6707/8505] TestRDocMarkupToHtml#test_gen_url_rb_file = 0.00 s 7031s [6708/8505] TestRDocMarkupToHtml#test_list_verbatim = 0.00 s 7031s [6709/8505] TestRDocMarkupToHtml#test_accept_heading_output_decoration_with_pipe = 0.01 s 7031s [6710/8505] TestRDocMarkupToHtml#test_accept_heading_aref_class = 0.00 s 7031s [6711/8505] TestRDocMarkupToHtml#test_accept_verbatim = 0.01 s 7031s [6712/8505] TestRDocMarkupToHtml#test_accept_paragraph_i = 0.00 s 7031s [6713/8505] TestRDocMarkupToHtml#test_accept_heading_pipe = 0.00 s 7031s [6714/8505] TestRDocMarkupToHtml#test_accept_block_quote = 0.00 s 7031s [6715/8505] TestRDocMarkupToHtml#test_convert_with_exclude_tag = 0.00 s 7031s [6716/8505] TestRDocMarkupToHtml#test_accept_paragraph_break = 0.00 s 7031s [6717/8505] TestRDocMarkupToHtml#test_accept_heading_7 = 0.00 s 7031s [6718/8505] TestRDocMarkupToHtml#test_accept_list_start_ualpha = 0.00 s 7031s [6719/8505] TestRDocMarkupToHtml#test_accept_heading_output_decoration = 0.00 s 7031s [6720/8505] TestRDocMarkupToHtml#test_accept_heading_suppressed_crossref = 0.00 s 7031s [6721/8505] TestRDocMarkupToHtml#test_accept_heading_3 = 0.00 s 7031s [6722/8505] TestRDocMarkupToHtml#test_gen_url_ssl_image_url = 0.00 s 7031s [6723/8505] TestRDocMarkupToHtml#test_accept_heading_1 = 0.00 s 7031s [6724/8505] TestRDocMarkupToHtml#test_accept_list_start_lalpha = 0.00 s 7031s [6725/8505] TestRDocMarkupToHtml#test_accept_heading = 0.00 s 7031s [6726/8505] TestRDocMarkupToHtml#test_accept_list_end_label = 0.00 s 7031s [6727/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_rdoc_label = 0.00 s 7031s [6728/8505] TestRDocMarkupToHtml#test_gen_url_md_file = 0.00 s 7031s [6729/8505] TestRDocMarkupToHtml#test_accept_verbatim_escape_in_backtick = 0.01 s 7031s [6730/8505] TestRDocMarkupToHtml#test_accept_list_item_start_bullet = 0.00 s 7031s [6731/8505] TestRDocMarkupToHtml#test_accept_paragraph_underscore = 0.00 s 7031s [6732/8505] TestRDocMarkupToHtml#test_accept_list_item_end_bullet = 0.00 s 7031s [6733/8505] TestRDocMarkupToHtml#test_accept_rule = 0.00 s 7031s [6734/8505] TestRDocMarkupToHtml#test_accept_list_end_bullet = 0.00 s 7031s [6735/8505] TestRDocMarkupToHtml#test_accept_list_item_start_label = 0.00 s 7031s [6736/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_foottext = 0.00 s 7031s [6737/8505] TestRDocMarkupToHtml#test_accept_list_end_note = 0.00 s 7031s [6738/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_footmark = 0.01 s 7031s [6739/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_footnote = 0.00 s 7031s [6740/8505] TestRDocMarkupToHtml#test_convert_TIDYLINK_image = 0.01 s 7031s [6741/8505] TestRDocMarkupToHtml#test_accept_heading_aref_method = 0.01 s 7031s [6742/8505] TestRDocMarkupToHtml#test_accept_list_start_number = 0.00 s 7031s [6743/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_multi_description = 0.01 s 7031s [6744/8505] TestRDocMarkupToHtml#test_accept_verbatim_escape_in_string = 0.00 s 7031s [6745/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_multi_label = 0.00 s 7031s [6746/8505] TestRDocMarkupToHtml#test_accept_list_item_end_note = 0.00 s 7031s [6747/8505] TestRDocMarkupToHtml#test_accept_verbatim_ruby = 0.00 s 7031s [6748/8505] TestRDocMarkupToHtml#test_start_accepting = 0.00 s 7031s [6749/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note_2 = 0.00 s 7031s [6750/8505] TestRDocMarkupToHtml#test_accept_paragraph_br = 0.00 s 7031s [6751/8505] TestRDocMarkupToHtml#test_convert_string = 0.00 s 7031s [6752/8505] TestRDocMarkupToHtml#test_accept_paragraph = 0.00 s 7031s [6753/8505] TestRDocMarkupToHtml#test_accept_blank_line = 0.00 s 7031s [6754/8505] TestRDocMarkupToHtml#test_accept_paragraph_star = 0.00 s 7031s [6755/8505] TestRDocMarkupToHtml#test_accept_heading_2 = 0.00 s 7031s [6756/8505] TestRDocMarkupToHtml#test_handle_regexp_HYPERLINK_link = 0.00 s 7031s [6757/8505] TestRDocMarkupToHtml#test_to_html = 0.00 s 7031s [6758/8505] TestRDocMarkupToHtml#test_accept_list_start_label = 0.00 s 7031s [6759/8505] TestRDocMarkupToHtml#test_accept_heading_4 = 0.00 s 7031s [6760/8505] TestRDocMarkupToHtml#test_parseable_eh = 0.01 s 7031s [6761/8505] TestRDocMarkupToHtml#test_accept_paragraph_b = 0.00 s 7031s [6762/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_ref = 0.00 s 7031s [6763/8505] TestRDocMarkupToHtml#test_accept_list_item_start_ualpha = 0.00 s 7031s [6764/8505] TestRDocMarkupToHtml#test_accept_list_item_end_ualpha = 0.00 s 7031s [6765/8505] TestRDocMarkupToHtml#test_accept_list_end_ualpha = 0.00 s 7031s [6766/8505] TestRDocMarkupToHtml#test_end_accepting = 0.00 s 7031s [6767/8505] TestRDocMarkupToHtml#test_accept_list_item_start_lalpha = 0.00 s 7031s [6768/8505] TestRDocMarkupToHtml#test_list_verbatim_2 = 0.00 s 7031s [6769/8505] TestRDocMarkupToHtml#test_accept_list_item_end_lalpha = 0.00 s 7031s [6770/8505] TestRDocMarkupToHtml#test_accept_list_item_start_note = 0.00 s 7031s [6771/8505] TestRDocMarkupToHtml#test_accept_paragraph_newline = 0.00 s 7031s [6772/8505] TestRDocMarkupToHtml#test_accept_raw = 0.00 s 7031s [6773/8505] TestRDocMarkupToHtml#test_convert_underscore_adjacent_to_code = 0.00 s 7031s [6774/8505] TestRDocMarkupToHtml#test_accept_list_end_lalpha = 0.00 s 7031s [6775/8505] TestRDocMarkupToHtml#test_accept_list_start_note = 0.00 s 7031s [6776/8505] TestRDocMarkupToHtml#test_accept_verbatim_parseable = 0.00 s 7031s [6777/8505] TestRDocMarkupToHtml#test_gen_url_image_url = 0.00 s 7031s [6778/8505] TestRDocMarkupToHtml#test_accept_list_start_bullet = 0.00 s 7031s [6779/8505] TestRDocMarkupToHtml#test_accept_list_item_end_label = 0.00 s 7031s [6780/8505] TestRDocMarkupToHtml#test_accept_paragraph_plus = 0.00 s 7031s [6781/8505] TestRDocMarkupToHtml#test_convert_RDOCLINK_label_label = 0.00 s 7031s [6782/8505] TestRDocMarkupToHtml#test_gen_url = 0.00 s 7031s [6783/8505] OpenSSL::TestX509Attribute#test_eq = 0.00 s 7031s [6784/8505] OpenSSL::TestX509Attribute#test_dup = 0.00 s 7031s [6785/8505] OpenSSL::TestX509Attribute#test_to_der = 0.00 s 7031s [6786/8505] Psych::TestEncoding#test_alias = 0.01 s 7031s [6787/8505] Psych::TestEncoding#test_io_utf8 = 0.01 s 7031s [6788/8505] Psych::TestEncoding#test_doc_tag = 0.01 s 7031s [6789/8505] Psych::TestEncoding#test_io_utf8_read_as_binary = 0.00 s 7031s [6790/8505] Psych::TestEncoding#test_default_internal = 0.00 s 7031s [6791/8505] Psych::TestEncoding#test_list_anchor = 0.01 s 7031s [6792/8505] Psych::TestEncoding#test_to_yaml_is_valid = 0.00 s 7031s [6793/8505] Psych::TestEncoding#test_map_tag = 0.00 s 7031s [6794/8505] Psych::TestEncoding#test_transcode_utf16le = 0.00 s 7031s [6795/8505] Psych::TestEncoding#test_dump_load_encoding_object = 0.01 s 7031s [6796/8505] Psych::TestEncoding#test_io_utf16le = 0.00 s 7031s [6797/8505] Psych::TestEncoding#test_io_utf16be = 0.00 s 7031s [6798/8505] Psych::TestEncoding#test_map_anchor = 0.00 s 7031s [6799/8505] Psych::TestEncoding#test_scalar = 0.00 s 7031s [6800/8505] Psych::TestEncoding#test_transcode_utf16be = 0.00 s 7031s [6801/8505] Psych::TestEncoding#test_transcode_shiftjis = 0.00 s 7031s [6802/8505] Psych::TestEncoding#test_emitter_encoding = 0.00 s 7031s [6803/8505] TestRDocGeneratorPOT#test_generate = 0.02 s 7031s [6804/8505] TestDateNew#test_commercial = 0.00 s 7031s [6805/8505] TestDateNew#test_jd = 0.00 s 7031s [6806/8505] TestDateNew#test_now = 0.00 s 7031s [6807/8505] TestDateNew#test_ordinal = 0.00 s 7031s [6808/8505] TestDateNew#test_commercial__neg = 0.00 s 7031s [6809/8505] TestDateNew#test_civil__reform = 0.00 s 7031s [6810/8505] TestDateNew#test_civil__neg = 0.00 s 7031s [6811/8505] TestDateNew#test_today = 0.00 s 7031s [6812/8505] TestDateNew#test_invalid_types = 0.01 s 7031s [6813/8505] TestDateNew#test_civil = 0.00 s 7031s [6814/8505] TestDateNew#test_ordinal__neg = 0.00 s 7031s [6815/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_cr_lf = 0.00 s 7031s [6816/8505] TestCSVFeatures#test_quote_char_special_regexp_char_liberal_parsing = 0.01 s 7031s [6817/8505] TestCSVFeatures#test_inspect_shows_headers_when_available = 0.00 s 7031s [6818/8505] TestCSVFeatures#test_failing_to_reset_headers_in_rewind = 0.00 s 7031s [6819/8505] TestCSVFeatures#test_line = 0.01 s 7031s [6820/8505] TestCSVFeatures#test_failing_to_escape_col_sep = 0.00 s 7031s [6821/8505] TestCSVFeatures#test_quote_char_special_regexp_char = 0.01 s 7031s [6822/8505] TestCSVFeatures#test_gzip_writer = 0.01 s 7031s [6823/8505] TestCSVFeatures#test_unknown_options = 0.00 s 7031s [6824/8505] TestCSVFeatures#test_csv_char_readers = 0.00 s 7031s [6825/8505] TestCSVFeatures#test_col_sep_empty = 0.00 s 7031s [6826/8505] TestCSVFeatures#test_quote_char = 0.01 s 7031s [6827/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_cr = 0.00 s 7031s [6828/8505] TestCSVFeatures#test_inspect_is_smart_about_io_types = 0.01 s 7031s [6829/8505] TestCSVFeatures#test_inspect_shows_key_attributes = 0.00 s 7031s [6830/8505] TestCSVFeatures#test_converters_reader = 0.00 s 7031s [6831/8505] TestCSVFeatures#test_row_sep = 0.00 s 7031s [6832/8505] TestCSVFeatures#test_table_nil_equality = 0.00 s 7031s [6833/8505] TestCSVFeatures#test_header_converters_reader = 0.00 s 7031s [6834/8505] TestCSVFeatures#test_inspect_encoding_is_ascii_compatible = 0.00 s 7031s [6835/8505] TestCSVFeatures#test_version = 0.00 s 7031s [6836/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_lf = 0.00 s 7031s [6837/8505] TestCSVFeatures#test_row_sep_auto_discovery = 0.00 s 7031s [6838/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_1024_over_lf = 0.01 s 7031s [6839/8505] TestCSVFeatures#test_col_sep_nil = 0.00 s 7031s [6840/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_1024_over_cr_lf = 0.01 s 7032s [6841/8505] TestCSVFeatures#test_line_separator_autodetection_for_non_seekable_input_many_cr_only = 0.21 s 7032s [6842/8505] TestCSVFeatures#test_skip_blanks = 0.00 s 7032s [6843/8505] TestCSVFeatures#test_readline = 0.01 s 7032s [6844/8505] TestCSVFeatures#test_lineno = 0.00 s 7032s [6845/8505] TestCSVFeatures#test_csv_behavior_readers = 0.00 s 7032s [6846/8505] TestCSVFeatures#test_col_sep = 0.02 s 7032s [6847/8505] TestRbConfig#test_vendordirs = 0.00 s 7032s [6848/8505] TestRbConfig#test_vendorarchdirs = 0.00 s 7032s [6849/8505] TestRbConfig#test_sitedirs = 0.00 s 7032s [6850/8505] TestRbConfig#test_archdirs = 0.00 s 7032s [6851/8505] TestLogger#test_format = 0.01 s 7032s [6852/8505] TestLogger#test_string_level = 0.00 s 7032s [6853/8505] TestLogger#test_level = 0.00 s 7032s [6854/8505] TestLogger#test_datetime_format = 0.00 s 7032s [6855/8505] TestLogger#test_progname = 0.00 s 7032s [6856/8505] TestLogger#test_initialize_with_datetime_format = 0.00 s 7032s [6857/8505] TestLogger#test_initialize_with_formatter = 0.00 s 7032s [6858/8505] TestLogger#test_level_log = 0.01 s 7032s [6859/8505] TestLogger#test_lshift = 0.00 s 7032s [6860/8505] TestLogger#test_formatter = 0.00 s 7032s [6861/8505] TestLogger#test_initialize_with_progname = 0.00 s 7032s [6862/8505] TestLogger#test_reopen_nil_logdevice = 0.00 s 7032s [6863/8505] TestLogger#test_add = 0.01 s 7032s [6864/8505] TestLogger#test_initialize = 0.00 s 7032s [6865/8505] TestLogger#test_symbol_level = 0.00 s 7032s [6866/8505] TestLogger#test_does_not_instantiate_log_device_for_File_NULL = 0.00 s 7032s [6867/8505] TestLogger#test_initialize_with_level = 0.00 s 7032s [6868/8505] TestLogger#test_close = 0.00 s 7032s [6869/8505] TestLogger#test_overriding_level = 0.00 s 7032s [6870/8505] TestLogger#test_reopen = 0.00 s 7032s [6871/8505] TestLogger#test_add_binary_data_with_binmode_logdev = 0.00 s 7032s [6872/8505] OpenSSL::TestEOF1#test_eof_1 = 0.49 s 7032s [6873/8505] OpenSSL::TestEOF1#test_eof_3 = 0.07 s 7032s [6874/8505] OpenSSL::TestEOF1#test_eof_0_rw = 0.01 s 7032s [6875/8505] OpenSSL::TestEOF1#test_eof_2 = 0.07 s 7033s [6876/8505] OpenSSL::TestEOF1#test_eof_0 = 0.24 s 7033s [6877/8505] TestNetHTTPLocalBind#test_bind_to_local_host = 0.02 s 7033s [6878/8505] TestNetHTTPLocalBind#test_bind_to_local_port = 0.01 s 7033s [6879/8505] HTTPHeaderTest#test_ASET = 0.01 s 7033s [6880/8505] HTTPHeaderTest#test_each_capitalized = 0.00 s 7033s [6881/8505] HTTPHeaderTest#test_each_value = 0.00 s 7033s [6882/8505] HTTPHeaderTest#test_set_form_data = 0.00 s 7033s [6883/8505] HTTPHeaderTest#test_range= = 0.00 s 7033s [6884/8505] HTTPHeaderTest#test_delete = 0.00 s 7033s [6885/8505] HTTPHeaderTest#test_content_range = 0.00 s 7033s [6886/8505] HTTPHeaderTest#test_proxy_basic_auth = 0.00 s 7033s [6887/8505] HTTPHeaderTest#test_chunked? = 0.00 s 7033s [6888/8505] HTTPHeaderTest#test_each_capitalized_with_symbol = 0.00 s 7033s [6889/8505] HTTPHeaderTest#test_add_field = 0.00 s 7033s [6890/8505] HTTPHeaderTest#test_get_fields = 0.00 s 7033s [6891/8505] HTTPHeaderTest#test_key? = 0.00 s 7033s [6892/8505] HTTPHeaderTest#test_content_type = 0.00 s 7033s [6893/8505] HTTPHeaderTest#test_duplicated_variable_header = 0.00 s 7033s [6894/8505] HTTPHeaderTest#test_sub_type = 0.00 s 7033s [6895/8505] HTTPHeaderTest#test_form_data= = 0.00 s 7033s [6896/8505] HTTPHeaderTest#test_content_length= = 0.00 s 7033s [6897/8505] HTTPHeaderTest#test_main_type = 0.00 s 7033s [6898/8505] HTTPHeaderTest#test_set_content_type = 0.00 s 7033s [6899/8505] HTTPHeaderTest#test_canonical_each = 0.00 s 7033s [6900/8505] HTTPHeaderTest#test_type_params = 0.00 s 7033s [6901/8505] HTTPHeaderTest#test_each = 0.00 s 7033s [6902/8505] HTTPHeaderTest#test_basic_auth = 0.00 s 7033s [6903/8505] HTTPHeaderTest#test_size = 0.00 s 7033s [6904/8505] HTTPHeaderTest#test_nil_variable_header = 0.00 s 7033s [6905/8505] HTTPHeaderTest#test_AREF = 0.00 s 7033s [6906/8505] HTTPHeaderTest#test_initialize_with_symbol = 0.00 s 7033s [6907/8505] HTTPHeaderTest#test_content_length = 0.00 s 7033s [6908/8505] HTTPHeaderTest#test_initialize = 0.00 s 7033s [6909/8505] HTTPHeaderTest#test_to_hash = 0.00 s 7033s [6910/8505] HTTPHeaderTest#test_each_capitalized_name = 0.00 s 7033s [6911/8505] HTTPHeaderTest#test_each_key = 0.00 s 7033s [6912/8505] HTTPHeaderTest#test_range = 0.01 s 7033s [6913/8505] HTTPHeaderTest#test_range_length = 0.00 s 7033s [6914/8505] TestPathname#test_cleanpath_conservative_118 = 0.00 s 7033s [6915/8505] TestPathname#test_relative_path_from_298 = 0.00 s 7033s [6916/8505] TestPathname#test_relative?_281 = 0.00 s 7033s [6917/8505] TestPathname#test_rmdir = 0.00 s 7033s [6918/8505] TestPathname#test_cleanpath_aggressive_70 = 0.00 s 7033s [6919/8505] TestPathname#test_sysopen = 0.00 s 7033s [6920/8505] TestPathname#test_ascend_469 = 0.00 s 7033s [6921/8505] TestPathname#test_cleanpath_aggressive_72 = 0.00 s 7033s [6922/8505] TestPathname#test_s_getwd = 0.00 s 7033s [6923/8505] TestPathname#test_zero? = 0.00 s 7033s [6924/8505] TestPathname#test_cleanpath_aggressive_74 = 0.00 s 7033s [6925/8505] TestPathname#test_binwrite = 0.00 s 7033s [6926/8505] TestPathname#test_descend_458 = 0.00 s 7033s [6927/8505] TestPathname#test_cleanpath_aggressive_76 = 0.00 s 7033s [6928/8505] TestPathname#test_global_constructor = 0.00 s 7033s [6929/8505] TestPathname#test_cleanpath_aggressive_78 = 0.00 s 7033s [6930/8505] TestPathname#test_owned? = 0.00 s 7033s [6931/8505] TestPathname#test_exist? = 0.00 s 7033s [6932/8505] TestPathname#test_make_symlink = 0.00 s 7033s [6933/8505] TestPathname#test_world_writable? = 0.00 s 7033s [6934/8505] TestPathname#test_cleanpath_conservative_110 = 0.00 s 7033s [6935/8505] TestPathname#test_relative_path_from_307 = 0.00 s 7033s [6936/8505] TestPathname#test_write_opts = 0.00 s 7033s [6937/8505] TestPathname#test_chardev? = 0.00 s 7033s [6938/8505] TestPathname#test_file_dirname = 0.00 s 7033s [6939/8505] TestPathname#test_del_trailing_separator_165 = 0.00 s 7033s [6940/8505] TestPathname#test_read = 0.00 s 7033s [6941/8505] TestPathname#test_relative_path_from_305 = 0.00 s 7033s [6942/8505] TestPathname#test_cleanpath_conservative_112 = 0.00 s 7033s [6943/8505] TestPathname#test_ascend_467 = 0.00 s 7033s [6944/8505] TestPathname#test_binread = 0.00 s 7033s [6945/8505] TestPathname#test_del_trailing_separator_163 = 0.00 s 7033s [6946/8505] TestPathname#test_relative_path_from_303 = 0.00 s 7033s [6947/8505] TestPathname#test_cleanpath_conservative_114 = 0.00 s 7033s [6948/8505] TestPathname#test_each_line_opts = 0.01 s 7033s [6949/8505] TestPathname#test_pathsubext_571 = 0.00 s 7033s [6950/8505] TestPathname#test_blockless_descend_is_enumerator = 0.00 s 7033s [6951/8505] TestPathname#test_cleanpath_conservative_116 = 0.00 s 7033s [6952/8505] TestPathname#test_relative_path_from_301 = 0.00 s 7033s [6953/8505] TestPathname#test_del_trailing_separator_161 = 0.00 s 7033s [6954/8505] TestPathname#test_s_pwd = 0.00 s 7033s [6955/8505] TestPathname#test_ctime = 0.00 s 7033s [6956/8505] TestPathname#test_cleanpath_aggressive_67 = 0.00 s 7033s [6957/8505] TestPathname#test_pathsubext_568 = 0.00 s 7033s [6958/8505] TestPathname#test_relative_path_from_318 = 0.00 s 7033s [6959/8505] TestPathname#test_cleanpath_aggressive_65 = 0.00 s 7033s [6960/8505] TestPathname#test_make_link = 0.00 s 7033s [6961/8505] TestPathname#test_cleanpath_aggressive_63 = 0.00 s 7033s [6962/8505] TestPathname#test_write = 0.00 s 7033s [6963/8505] TestPathname#test_file_fnmatch = 0.00 s 7033s [6964/8505] TestPathname#test_cleanpath_aggressive_61 = 0.00 s 7033s [6965/8505] TestPathname#test_cleanpath_conservative_109 = 0.00 s 7033s [6966/8505] TestPathname#test_relative_path_from_310 = 0.00 s 7033s [6967/8505] TestPathname#test_cleanpath_conservative_107 = 0.00 s 7033s [6968/8505] TestPathname#test_plus = 0.00 s 7033s [6969/8505] TestPathname#test_destructive_update = 0.00 s 7033s [6970/8505] TestPathname#test_s_glob_3args = 0.00 s 7033s [6971/8505] TestPathname#test_parent = 0.00 s 7033s [6972/8505] TestPathname#test_cleanpath_conservative_105 = 0.00 s 7033s [6973/8505] TestPathname#test_expand_path = 0.00 s 7033s [6974/8505] TestPathname#test_pathsubext_562 = 0.00 s 7033s [6975/8505] TestPathname#test_each_entry = 0.00 s 7033s [6976/8505] TestPathname#test_kernel_open = 0.00 s 7033s [6977/8505] TestPathname#test_cleanpath_conservative_103 = 0.00 s 7033s [6978/8505] TestPathname#test_relative_path_from_314 = 0.00 s 7033s [6979/8505] TestPathname#test_ascend_470 = 0.00 s 7033s [6980/8505] TestPathname#test_pathsubext_564 = 0.00 s 7033s [6981/8505] TestPathname#test_truncate = 0.00 s 7033s [6982/8505] TestPathname#test_setgid? = 0.00 s 7033s [6983/8505] TestPathname#test_cleanpath_conservative_101 = 0.00 s 7033s [6984/8505] TestPathname#test_cleanpath_aggressive_69 = 0.00 s 7033s [6985/8505] TestPathname#test_pathsubext_566 = 0.00 s 7033s [6986/8505] TestPathname#test_binwrite_opts = 0.00 s 7033s [6987/8505] TestPathname#test_relative_path_from_323 = 0.00 s 7033s [6988/8505] TestPathname#test_root?_586 = 0.00 s 7033s [6989/8505] TestPathname#test_cleanpath_aggressive_58 = 0.00 s 7033s [6990/8505] TestPathname#test_opendir = 0.00 s 7033s [6991/8505] TestPathname#test_comparison_string = 0.00 s 7033s [6992/8505] TestPathname#test_fnmatch? = 0.00 s 7033s [6993/8505] TestPathname#test_pipe? = 0.00 s 7033s [6994/8505] TestPathname#test_plus_209 = 0.00 s 7033s [6995/8505] TestPathname#test_mkpath = 0.01 s 7033s [6996/8505] TestPathname#test_relative_path_from_325 = 0.00 s 7033s [6997/8505] TestPathname#test_parent_242 = 0.00 s 7033s [6998/8505] TestPathname#test_readable? = 0.00 s 7033s [6999/8505] TestPathname#test_cleanpath_aggressive_54 = 0.00 s 7033s [7000/8505] TestPathname#test_plus_207 = 0.00 s 7033s [7001/8505] TestPathname#test_parent_240 = 0.00 s 7033s [7002/8505] TestPathname#test_chown = 0.00 s 7033s [7003/8505] TestPathname#test_lchown = 0.00 s 7033s [7004/8505] TestPathname#test_relative_path_from_329 = 0.00 s 7033s [7005/8505] TestPathname#test_cleanpath_aggressive_56 = 0.00 s 7033s [7006/8505] TestPathname#test_birthtime = 0.00 s 7033s [7007/8505] TestPathname#test_freeze = 0.00 s 7033s [7008/8505] TestPathname#test_cleanpath_conservative_138 = 0.00 s 7033s [7009/8505] TestPathname#test_parent_246 = 0.00 s 7033s [7010/8505] TestPathname#test_sticky? = 0.00 s 7033s [7011/8505] TestPathname#test_lstat = 0.00 s 7033s [7012/8505] TestPathname#test_cleanpath_aggressive_50 = 0.00 s 7033s [7013/8505] TestPathname#test_root?_588 = 0.00 s 7033s [7014/8505] TestPathname#test_parent_244 = 0.00 s 7033s [7015/8505] TestPathname#test_cleanpath_aggressive_52 = 0.00 s 7033s [7016/8505] TestPathname#test_del_trailing_separator_189 = 0.00 s 7033s [7017/8505] TestPathname#test_relative_path_from_mock = 0.00 s 7033s [7018/8505] TestPathname#test_relative_path_from_334 = 0.00 s 7033s [7019/8505] TestPathname#test_cleanpath_conservative_123 = 0.00 s 7033s [7020/8505] TestPathname#test_grpowned? = 0.00 s 7033s [7021/8505] TestPathname#test_plus_218 = 0.00 s 7033s [7022/8505] TestPathname#test_cleanpath_conservative_121 = 0.00 s 7033s [7023/8505] TestPathname#test_extname = 0.00 s 7033s [7024/8505] TestPathname#test_cleanpath_aggressive_49 = 0.00 s 7036s [7025/8505] TestPathname#test_split = 3.47 s 7036s [7026/8505] TestPathname#test_matchop = 0.00 s 7036s [7027/8505] TestPathname#test_cleanpath_conservative_127 = 0.00 s 7036s [7028/8505] TestPathname#test_descend_461 = 0.00 s 7036s [7029/8505] TestPathname#test_readlines = 0.00 s 7036s [7030/8505] TestPathname#test_readlines_opts = 0.00 s 7036s [7031/8505] TestPathname#test_socket? = 0.00 s 7036s [7032/8505] TestPathname#test_has_trailing_separator?_147 = 0.00 s 7036s [7033/8505] TestPathname#test_relative_path_from_332 = 0.00 s 7036s [7034/8505] TestPathname#test_cleanpath_conservative_125 = 0.00 s 7036s [7035/8505] TestPathname#test_parent_238 = 0.00 s 7036s [7036/8505] TestPathname#test_children = 0.01 s 7036s [7037/8505] TestPathname#test_writable_real? = 0.00 s 7036s [7038/8505] TestPathname#test_plus_210 = 0.00 s 7036s [7039/8505] TestPathname#test_cleanpath_aggressive_87 = 0.00 s 7036s [7040/8505] TestPathname#test_relative?_276 = 0.00 s 7036s [7041/8505] TestPathname#test_has_trailing_separator?_149 = 0.00 s 7036s [7042/8505] TestPathname#test_cleanpath_aggressive_85 = 0.00 s 7036s [7043/8505] TestPathname#test_cleanpath_conservative_129 = 0.00 s 7036s [7044/8505] TestPathname#test_relative?_274 = 0.00 s 7036s [7045/8505] TestPathname#test_plus_214 = 0.00 s 7036s [7046/8505] TestPathname#test_relative?_272 = 0.00 s 7036s [7047/8505] TestPathname#test_stat = 0.00 s 7036s [7048/8505] TestPathname#test_plus_216 = 0.00 s 7036s [7049/8505] TestPathname#test_glob = 0.00 s 7036s [7050/8505] TestPathname#test_blockdev? = 0.00 s 7036s [7051/8505] TestPathname#test_empty? = 0.00 s 7036s [7052/8505] TestPathname#test_kernel_pathname = 0.00 s 7036s [7053/8505] TestPathname#test_parent_239 = 0.00 s 7036s [7054/8505] TestPathname#test_relative?_279 = 0.00 s 7036s [7055/8505] TestPathname#test_relative_path_from_333 = 0.00 s 7036s [7056/8505] TestPathname#test_cleanpath_conservative_124 = 0.00 s 7036s [7057/8505] TestPathname#test_cleanpath_aggressive_88 = 0.00 s 7036s [7058/8505] TestPathname#test_has_trailing_separator?_146 = 0.00 s 7036s [7059/8505] TestPathname#test_rmtree = 0.00 s 7036s [7060/8505] TestPathname#test_descend_460 = 0.00 s 7036s [7061/8505] TestPathname#test_cleanpath_conservative_126 = 0.00 s 7036s [7062/8505] TestPathname#test_relative_path_from_331 = 0.00 s 7036s [7063/8505] TestPathname#test_cleanpath_aggressive_48 = 0.00 s 7036s [7064/8505] TestPathname#test_root?_590 = 0.00 s 7036s [7065/8505] TestPathname#test_cleanpath_conservative_120 = 0.00 s 7036s [7066/8505] TestPathname#test_plus_219 = 0.00 s 7036s [7067/8505] TestPathname#test_cleanpath_conservative_122 = 0.00 s 7036s [7068/8505] TestPathname#test_mkdir = 0.00 s 7036s [7069/8505] TestPathname#test_plus_217 = 0.00 s 7036s [7070/8505] TestPathname#test_del_trailing_separator_159 = 0.00 s 7036s [7071/8505] TestPathname#test_relative?_273 = 0.00 s 7036s [7072/8505] TestPathname#test_plus_215 = 0.00 s 7036s [7073/8505] TestPathname#test_relative?_275 = 0.00 s 7036s [7074/8505] TestPathname#test_cleanpath_conservative_128 = 0.00 s 7036s [7075/8505] TestPathname#test_cleanpath_aggressive_84 = 0.00 s 7036s [7076/8505] TestPathname#test_plus_213 = 0.00 s 7036s [7077/8505] TestPathname#test_s_glob = 0.00 s 7036s [7078/8505] TestPathname#test_has_trailing_separator?_148 = 0.00 s 7036s [7079/8505] TestPathname#test_relative?_277 = 0.00 s 7036s [7080/8505] TestPathname#test_file_basename = 0.00 s 7036s [7081/8505] TestPathname#test_cleanpath_aggressive_86 = 0.00 s 7036s [7082/8505] TestPathname#test_plus_211 = 0.00 s 7036s [7083/8505] TestPathname#test_directory? = 0.00 s 7036s [7084/8505] TestPathname#test_each_line = 0.01 s 7036s [7085/8505] TestPathname#test_relative_path_from_324 = 0.00 s 7036s [7086/8505] TestPathname#test_plus_208 = 0.00 s 7036s [7087/8505] TestPathname#test_relative_path_from_326 = 0.00 s 7036s [7088/8505] TestPathname#test_slash = 0.00 s 7036s [7089/8505] TestPathname#test_cleanpath_aggressive_59 = 0.00 s 7036s [7090/8505] TestPathname#test_absolute = 0.00 s 7036s [7091/8505] TestPathname#test_relative_path_from_320 = 0.00 s 7036s [7092/8505] TestPathname#test_root?_587 = 0.00 s 7036s [7093/8505] TestPathname#test_relative_path_from_322 = 0.00 s 7036s [7094/8505] TestPathname#test_size = 0.00 s 7036s [7095/8505] TestPathname#test_mountpoint_enoent = 0.00 s 7036s [7096/8505] TestPathname#test_del_trailing_separator_188 = 0.00 s 7036s [7097/8505] TestPathname#test_cleanpath_aggressive_53 = 0.00 s 7036s [7098/8505] TestPathname#test_parent_245 = 0.00 s 7036s [7099/8505] TestPathname#test_cleanpath_aggressive_51 = 0.00 s 7036s [7100/8505] TestPathname#test_root?_589 = 0.00 s 7036s [7101/8505] TestPathname#test_writable? = 0.00 s 7036s [7102/8505] TestPathname#test_cleanpath_aggressive_57 = 0.00 s 7036s [7103/8505] TestPathname#test_relative_path_from_328 = 0.00 s 7036s [7104/8505] TestPathname#test_chmod = 0.00 s 7036s [7105/8505] TestPathname#test_basename = 0.00 s 7036s [7106/8505] TestPathname#test_entries = 0.00 s 7036s [7107/8505] TestPathname#test_parent_241 = 0.00 s 7036s [7108/8505] TestPathname#test_pathsub_559 = 0.00 s 7036s [7109/8505] TestPathname#test_plus_206 = 0.00 s 7036s [7110/8505] TestPathname#test_cleanpath_aggressive_55 = 0.00 s 7036s [7111/8505] TestPathname#test_join = 0.00 s 7036s [7112/8505] TestPathname#test_file_extname = 0.00 s 7036s [7113/8505] TestPathname#test_utime = 0.00 s 7036s [7114/8505] TestPathname#test_mountpoint? = 0.00 s 7036s [7115/8505] TestPathname#test_parent_243 = 0.00 s 7036s [7116/8505] TestPathname#test_cleanpath_conservative_108 = 0.00 s 7036s [7117/8505] TestPathname#test_atime = 0.00 s 7036s [7118/8505] TestPathname#test_cleanpath_aggressive_60 = 0.00 s 7036s [7119/8505] TestPathname#test_null_character = 0.00 s 7036s [7120/8505] TestPathname#test_cleanpath_aggressive_62 = 0.00 s 7036s [7121/8505] TestPathname#test_equality = 0.00 s 7036s [7122/8505] TestPathname#test_cleanpath_aggressive_64 = 0.00 s 7036s [7123/8505] TestPathname#test_relative_path_from_319 = 0.00 s 7036s [7124/8505] TestPathname#test_unlink = 0.00 s 7036s [7125/8505] TestPathname#test_executable? = 0.00 s 7036s [7126/8505] TestPathname#test_ftype = 0.00 s 7036s [7127/8505] TestPathname#test_pathsubext_569 = 0.00 s 7036s [7128/8505] TestPathname#test_dirname = 0.00 s 7036s [7129/8505] TestPathname#test_cleanpath_aggressive_66 = 0.00 s 7036s [7130/8505] TestPathname#test_pathsubext_567 = 0.00 s 7036s [7131/8505] TestPathname#test_initialize = 0.00 s 7036s [7132/8505] TestPathname#test_cleanpath_aggressive_68 = 0.00 s 7036s [7133/8505] TestPathname#test_relative_path_from_317 = 0.00 s 7036s [7134/8505] TestPathname#test_cleanpath_conservative_100 = 0.00 s 7036s [7135/8505] TestPathname#test_each_child = 0.01 s 7036s [7136/8505] TestPathname#test_pathsubext_565 = 0.00 s 7036s [7137/8505] TestPathname#test_blockless_ascend_is_enumerator = 0.00 s 7036s [7138/8505] TestPathname#test_cleanpath_conservative_102 = 0.00 s 7036s [7139/8505] TestPathname#test_relative_path_from_315 = 0.00 s 7036s [7140/8505] TestPathname#test_open = 0.00 s 7036s [7141/8505] TestPathname#test_pathsubext_563 = 0.00 s 7036s [7142/8505] TestPathname#test_size? = 0.00 s 7036s [7143/8505] TestPathname#test_cleanpath_conservative_104 = 0.00 s 7036s [7144/8505] TestPathname#test_relative_path_from_313 = 0.00 s 7036s [7145/8505] TestPathname#test_each_filename = 0.01 s 7036s [7146/8505] TestPathname#test_executable_real? = 0.00 s 7036s [7147/8505] TestPathname#test_file? = 0.00 s 7036s [7148/8505] TestPathname#test_cleanpath_conservative_99 = 0.00 s 7036s [7149/8505] TestPathname#test_relative_path_from_311 = 0.00 s 7036s [7150/8505] TestPathname#test_cleanpath_conservative_106 = 0.00 s 7036s [7151/8505] TestPathname#test_plus_224 = 0.00 s 7036s [7152/8505] TestPathname#test_cleanpath_aggressive_77 = 0.00 s 7036s [7153/8505] TestPathname#test_relative_path_from_308 = 0.00 s 7036s [7154/8505] TestPathname#test_to_s = 0.00 s 7036s [7155/8505] TestPathname#test_descend_459 = 0.00 s 7036s [7156/8505] TestPathname#test_cleanpath_aggressive_75 = 0.00 s 7036s [7157/8505] TestPathname#test_cleanpath_aggressive_73 = 0.00 s 7036s [7158/8505] TestPathname#test_setuid? = 0.00 s 7036s [7159/8505] TestPathname#test_readlink = 0.00 s 7036s [7160/8505] TestPathname#test_plus_220 = 0.00 s 7036s [7161/8505] TestPathname#test_ascend_468 = 0.00 s 7036s [7162/8505] TestPathname#test_relative?_282 = 0.00 s 7036s [7163/8505] TestPathname#test_mtime = 0.00 s 7036s [7164/8505] TestPathname#test_plus_222 = 0.00 s 7036s [7165/8505] TestPathname#test_cleanpath_aggressive_71 = 0.00 s 7036s [7166/8505] TestPathname#test_comparison = 0.00 s 7036s [7167/8505] TestPathname#test_relative_path_from_299 = 0.00 s 7036s [7168/8505] TestPathname#test_relative?_280 = 0.00 s 7036s [7169/8505] TestPathname#test_file_split = 0.00 s 7036s [7170/8505] TestPathname#test_cleanpath_conservative_119 = 0.00 s 7036s [7171/8505] TestPathname#test_symlink? = 0.00 s 7036s [7172/8505] TestPathname#test_del_trailing_separator_160 = 0.00 s 7036s [7173/8505] TestPathname#test_cleanpath_conservative_117 = 0.00 s 7036s [7174/8505] TestPathname#test_relative_path_from_300 = 0.00 s 7036s [7175/8505] TestPathname#test_pathsubext_570 = 0.00 s 7036s [7176/8505] TestPathname#test_relative_path_from_297 = 0.00 s 7036s [7177/8505] TestPathname#test_relative_path_from_302 = 0.00 s 7036s [7178/8505] TestPathname#test_cleanpath_conservative_115 = 0.00 s 7036s [7179/8505] TestPathname#test_del_trailing_separator_162 = 0.00 s 7036s [7180/8505] TestPathname#test_world_readable? = 0.00 s 7036s [7181/8505] TestPathname#test_fnmatch = 0.00 s 7036s [7182/8505] TestPathname#test_hashkey = 0.00 s 7036s [7183/8505] TestPathname#test_relative_path_from_304 = 0.00 s 7036s [7184/8505] TestPathname#test_cleanpath_conservative_113 = 0.00 s 7036s [7185/8505] TestPathname#test_del_trailing_separator_164 = 0.00 s 7036s [7186/8505] TestPathname#test_rename = 0.00 s 7036s [7187/8505] TestPathname#test_initialize_nul = 0.00 s 7036s [7188/8505] TestPathname#test_cleanpath_conservative_111 = 0.00 s 7036s [7189/8505] TestPathname#test_readable_real? = 0.00 s 7036s [7190/8505] TestPathname#test_sub_matchdata = 0.00 s 7036s [7191/8505] TestPathname#test_cleanpath_aggressive_79 = 0.00 s 7036s [7192/8505] TestERBCoreWOStrScan#test_def_method_without_filename = 0.00 s 7036s [7193/8505] TestERBCoreWOStrScan#test_result_with_hash = 0.01 s 7036s [7194/8505] TestERBCoreWOStrScan#test_invalid_trim_mode = 0.02 s 7037s [7195/8505] TestERBCoreWOStrScan#test_core = 0.09 s 7037s [7196/8505] TestERBCoreWOStrScan#test_prohibited_marshal_dump = 0.00 s 7037s [7197/8505] TestERBCoreWOStrScan#test_keep_lineno = 0.01 s 7037s [7198/8505] TestERBCoreWOStrScan#test_def_method_with_fname = 0.00 s 7037s [7199/8505] TestERBCoreWOStrScan#test_def_erb_method = 0.00 s 7037s [7200/8505] TestERBCoreWOStrScan#test_result_with_hash_with_invalid_keys_raises_type_error = 0.00 s 7037s [7201/8505] TestERBCoreWOStrScan#test_explicit_trim_line_with_carriage_return = 0.00 s 7037s [7202/8505] TestERBCoreWOStrScan#test_url_encode = 0.00 s 7037s [7203/8505] TestERBCoreWOStrScan#test_percent_after_etag = 0.00 s 7037s [7204/8505] TestERBCoreWOStrScan#test_escape = 0.00 s 7037s [7205/8505] TestERBCoreWOStrScan#test_percent = 0.01 s 7037s [7206/8505] TestERBCoreWOStrScan#test_deprecated_interface_warnings = 0.03 s 7037s [7207/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_modify_caller_binding = 0.00 s 7037s [7208/8505] TestERBCoreWOStrScan#test_half_working_comment_backward_compatibility = 0.00 s 7037s [7209/8505] TestERBCoreWOStrScan#test_token_extension = 0.01 s 7037s [7210/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_modify_toplevel_binding = 0.00 s 7037s [7211/8505] TestERBCoreWOStrScan#test_version = 0.00 s 7037s [7212/8505] TestERBCoreWOStrScan#test_trim_line2_with_carriage_return = 0.00 s 7037s [7213/8505] TestERBCoreWOStrScan#test_run = 0.00 s 7037s [7214/8505] TestERBCoreWOStrScan#test_def_module = 0.00 s 7037s [7215/8505] TestERBCoreWOStrScan#test_trim_line1_with_carriage_return = 0.00 s 7037s [7216/8505] TestERBCoreWOStrScan#test_result_with_hash_does_not_use_caller_local_variables = 0.00 s 7037s [7217/8505] TestERBCoreWOStrScan#test_prohibited_marshal_load = 0.00 s 7037s [7218/8505] TestERBCoreWOStrScan#test_def_class = 0.00 s 7037s [7219/8505] TestERBCoreWOStrScan#test_explicit = 0.00 s 7037s [7220/8505] TestERBCoreWOStrScan#test_frozen_string_literal = 0.00 s 7037s [7221/8505] TestRDocOptions#test_check_files_warn = 0.00 s 7037s [7222/8505] TestRDocOptions#test_encode_with = 0.01 s 7037s [7223/8505] TestRDocOptions#test_parse_dash_p = 0.01 s 7037s [7224/8505] TestRDocOptions#test_ignore_missing_arg = 0.01 s 7037s [7225/8505] TestRDocOptions#test_ignore_needless_arg = 0.01 s 7037s [7226/8505] TestRDocOptions#test_parse_default = 0.01 s 7037s [7227/8505] TestRDocOptions#test_parse_ignore_invalid_no_quiet = 0.03 s 7037s [7228/8505] TestRDocOptions#test_parse_root = 0.02 s 7037s [7229/8505] TestRDocOptions#test_warn = 0.00 s 7037s [7230/8505] TestRDocOptions#test_visibility = 0.00 s 7037s [7231/8505] TestRDocOptions#test_parse_copy_files_file_absolute = 0.01 s 7037s [7232/8505] TestRDocOptions#test_parse_deprecated = 0.03 s 7037s [7233/8505] TestRDocOptions#test_load_options_empty_file = 0.00 s 7037s [7234/8505] TestRDocOptions#test_parse_tab_width = 0.05 s 7037s [7235/8505] TestRDocOptions#test_parse_h = 0.02 s 7037s [7236/8505] TestRDocOptions#test_generator_descriptions = 0.00 s 7037s [7237/8505] TestRDocOptions#test_parse_extension_alias = 0.01 s 7037s [7238/8505] TestRDocOptions#test_parse_encoding_invalid = 0.01 s 7037s [7239/8505] TestRDocOptions#test_parse_ignore_invalid = 0.01 s 7037s [7240/8505] TestRDocOptions#test_parse_template_load_path = 0.01 s 7037s [7241/8505] TestRDocOptions#test_parse_template = 0.02 s 7037s [7242/8505] TestRDocOptions#test_parse_encoding = 0.01 s 7037s [7243/8505] TestRDocOptions#test_parse_dash_p_files = 0.01 s 7037s [7244/8505] TestRDocOptions#test_encode_with_trim_paths = 0.02 s 7037s [7245/8505] TestRDocOptions#test_parse_ignore_invalid_no = 0.02 s 7037s [7246/8505] TestRDocOptions#test_parse_copy_files_directory_relative = 0.01 s 7037s [7247/8505] TestRDocOptions#test_encoding_default = 0.00 s 7037s [7248/8505] TestRDocOptions#test_parse_visibility = 0.03 s 7037s [7249/8505] TestRDocOptions#test_parse_main = 0.02 s 7037s [7250/8505] TestRDocOptions#test_setup_generator = 0.00 s 7037s [7251/8505] TestRDocOptions#test_setup_generator_no_option_parser = 0.00 s 7037s [7252/8505] TestRDocOptions#test_parse_formatter_ri = 0.03 s 7037s [7253/8505] TestRDocOptions#test_parse_formatter = 0.01 s 7037s [7254/8505] TestRDocOptions#test_init_with_trim_paths = 0.01 s 7037s [7255/8505] TestRDocOptions#test_parse_dry_run = 0.01 s 7037s [7256/8505] TestRDocOptions#test_parse_coverage = 0.01 s 7037s [7257/8505] TestRDocOptions#test_parse_format_for_extra_generator = 0.00 s 7037s [7258/8505] TestRDocOptions#test_parse_help_extra_generator = 0.02 s 7037s [7259/8505] TestRDocOptions#test_parse_template_nonexistent = 0.02 s 7037s [7260/8505] TestRDocOptions#test_parse_copy_files_directory_absolute = 0.01 s 7037s [7261/8505] TestRDocOptions#test_parse_markup = 0.01 s 7037s [7262/8505] TestRDocOptions#test_parse_coverage_level_1 = 0.01 s 7037s [7263/8505] TestRDocOptions#test_parse_page_dir_root = 0.01 s 7037s [7264/8505] TestRDocOptions#test_version = 0.02 s 7037s [7265/8505] TestRDocOptions#test_update_output_dir = 0.01 s 7037s [7266/8505] TestRDocOptions#test_check_files = 0.00 s 7037s [7267/8505] TestRDocOptions#test_parse_template_stylesheets = 0.01 s 7037s [7268/8505] TestRDocOptions#test_parse_formatter_ri_site = 0.02 s 7037s [7269/8505] TestRDocOptions#test_load_options_partial_override = 0.01 s 7037s [7270/8505] TestRDocOptions#test_parse_coverage_no = 0.01 s 7037s [7271/8505] TestRDocOptions#test_parse_help = 0.02 s 7037s [7272/8505] TestRDocOptions#test_load_options_invalid = 0.00 s 7037s [7273/8505] TestRDocOptions#test_parse_ignore_invalid_default = 0.01 s 7037s [7274/8505] TestRDocOptions#test_parse_ri_site = 0.01 s 7037s [7275/8505] TestRDocOptions#test_parse_copy_files_file_relative = 0.01 s 7037s [7276/8505] TestRDocOptions#test_parse_force_update = 0.03 s 7037s [7277/8505] TestRDocOptions#test_dry_run_default = 0.00 s 7037s [7278/8505] TestRDocOptions#test_parse_page_dir = 0.01 s 7037s [7279/8505] TestRDocOptions#test_init_with_encoding = 0.01 s 7037s [7280/8505] TestZlibDeflate#test_total = 0.01 s 7037s [7281/8505] TestZlibDeflate#test_dup = 0.00 s 7037s [7282/8505] TestZlibDeflate#test_finished_p = 0.00 s 7037s [7283/8505] TestZlibDeflate#test_reset = 0.00 s 7037s [7284/8505] TestZlibDeflate#test_data_type = 0.00 s 7037s [7285/8505] TestZlibDeflate#test_deflate = 0.00 s 7037s [7286/8505] TestZlibDeflate#test_flush = 0.00 s 7037s [7287/8505] TestZlibDeflate#test_params = 0.01 s 7037s [7288/8505] TestZlibDeflate#test_closed_p = 0.00 s 7037s [7289/8505] TestZlibDeflate#test_expand_buffer = 0.00 s 7037s [7290/8505] TestZlibDeflate#test_adler = 0.00 s 7037s [7291/8505] TestZlibDeflate#test_set_dictionary = 0.00 s 7037s [7292/8505] TestZlibDeflate#test_initialize = 0.01 s 7037s [7293/8505] TestZlibDeflate#test_close = 0.00 s 7037s [7294/8505] TestZlibDeflate#test_avail = 0.00 s 7037s [7295/8505] TestZlibDeflate#test_addstr = 0.00 s 7037s [7296/8505] Psych::TestMarshalable#test_objects_defining_marshal_dump_and_marshal_load_can_be_dumped = 0.00 s 7037s [7297/8505] Psych::TestMarshalable#test_init_symbolize_names = 0.01 s 7037s [7298/8505] Psych::TestMarshalable#test_init_with_takes_priority_over_marshal_methods = 0.01 s 7037s [7299/8505] TestCSVTable#test_array_delegation = 0.00 s 7037s [7300/8505] TestCSVTable#test_to_csv = 0.01 s 7037s [7301/8505] TestCSVTable#test_headers = 0.00 s 7038s [7302/8505] TestCSVTable#test_values_at = 0.01 s 7038s [7303/8505] TestCSVTable#test_headers_empty = 0.00 s 7038s [7304/8505] TestCSVTable#test_dig_cell_no_dig = 0.01 s 7038s [7305/8505] TestCSVTable#test_dig_mixed = 0.00 s 7038s [7306/8505] TestCSVTable#test_dig_by_column = 0.00 s 7038s [7307/8505] TestCSVTable#test_delete_row = 0.00 s 7038s [7308/8505] TestCSVTable#test_delete_if_row = 0.00 s 7038s [7309/8505] TestCSVTable#test_append = 0.00 s 7038s [7310/8505] TestCSVTable#test_headers_only = 0.00 s 7038s [7311/8505] TestCSVTable#test_set_by_col_with_header_row = 0.00 s 7038s [7312/8505] TestCSVTable#test_set_row_or_column = 0.01 s 7038s [7313/8505] TestCSVTable#test_index = 0.01 s 7038s [7314/8505] TestCSVTable#test_delete_mixed_one = 0.00 s 7038s [7315/8505] TestCSVTable#test_each_split = 0.00 s 7038s [7316/8505] TestCSVTable#test_each = 0.01 s 7038s [7317/8505] TestCSVTable#test_dig_cell = 0.01 s 7038s [7318/8505] TestCSVTable#test_enumerable = 0.00 s 7038s [7319/8505] TestCSVTable#test_delete_if_column_without_block = 0.00 s 7038s [7320/8505] TestCSVTable#test_inspect_shows_current_mode = 0.00 s 7038s [7321/8505] TestCSVTable#test_modes = 0.00 s 7038s [7322/8505] TestCSVTable#test_inspect_encoding_is_ascii_compatible = 0.00 s 7038s [7323/8505] TestCSVTable#test_dig_by_row = 0.01 s 7038s [7324/8505] TestCSVTable#test_to_a = 0.00 s 7038s [7325/8505] TestCSVTable#test_initialize = 0.00 s 7038s [7326/8505] TestCSVTable#test_delete_column = 0.01 s 7038s [7327/8505] TestCSVTable#test_delete_if_row_without_block = 0.00 s 7038s [7328/8505] TestCSVTable#test_delete_headers_only = 0.00 s 7038s [7329/8505] TestCSVTable#test_delete_if_column = 0.00 s 7038s [7330/8505] TestCSVTable#test_headers_modified_by_row = 0.00 s 7038s [7331/8505] TestCSVTable#test_delete_mixed_multiple = 0.00 s 7038s [7332/8505] TestCSVTable#test_delete_with_blank_rows = 0.00 s 7038s [7333/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_one = 0.00 s 7038s [7334/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_empty_value = 0.00 s 7038s [7335/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_nil_value = 0.00 s 7038s [7336/8505] TestCSVWriteConvertersGenerate::DifferentOFS#test_multiple = 0.00 s 7038s [7337/8505] TestDigest::TestSHA512#test_eq = 0.00 s 7038s [7338/8505] TestDigest::TestSHA512#test_s_base64digest = 0.00 s 7038s [7339/8505] TestDigest::TestSHA512#test_alignment = 0.00 s 7038s [7340/8505] TestDigest::TestSHA512#test_bubblebabble_class = 0.00 s 7038s [7341/8505] TestDigest::TestSHA512#test_s_hexdigest = 0.00 s 7038s [7342/8505] TestDigest::TestSHA512#test_bubblebabble = 0.00 s 7038s [7343/8505] TestDigest::TestSHA512#test_update = 0.00 s 7038s [7344/8505] TestDigest::TestSHA512#test_instance_eval = 0.00 s 7038s [7345/8505] TestDigest::TestSHA512#test_s_file = 0.00 s 7038s [7346/8505] TestDigest::TestSHA512#test_bubblebabble_instance = 0.00 s 7038s [7347/8505] TestDigest::TestSHA512#test_s_digest = 0.00 s 7038s [7348/8505] TestDigest::TestSHA512#test_s_new = 0.00 s 7038s [7349/8505] TestIRB::TestWorkSpace#test_code_around_binding_with_script_lines__ = 0.01 s 7038s [7350/8505] TestIRB::TestWorkSpace#test_code_around_binding_on_irb = 0.00 s 7038s [7351/8505] TestIRB::TestWorkSpace#test_code_around_binding = 0.00 s 7038s [7352/8505] TestIRB::TestWorkSpace#test_code_around_binding_with_existing_unreadable_file = 0.00 s 7038s [7353/8505] TestIRB::TestWorkSpace#test_toplevel_binding_local_variables = 0.00 s 7038s [7354/8505] TestSyslogRootLogger#test_warn = 0.01 s 7038s [7355/8505] TestSyslogRootLogger#test_add_level_error = 0.00 s 7038s [7356/8505] TestSyslogRootLogger#test_add_level_info = 0.00 s 7038s [7357/8505] TestSyslogRootLogger#test_custom_formatter = 0.00 s 7038s [7358/8505] TestSyslogRootLogger#test_info_eh = 0.00 s 7038s [7359/8505] TestSyslogRootLogger#test_debug = 0.00 s 7038s [7360/8505] TestSyslogRootLogger#test_debug_eh = 0.00 s 7038s [7361/8505] TestSyslogRootLogger#test_fatal = 0.00 s 7038s [7362/8505] TestSyslogRootLogger#test_add_level_unknown = 0.00 s 7038s [7363/8505] TestSyslogRootLogger#test_warn_eh = 0.00 s 7038s [7364/8505] TestSyslogRootLogger#test_unknown = 0.00 s 7038s [7365/8505] TestSyslogRootLogger#test_error = 0.00 s 7038s [7366/8505] TestSyslogRootLogger#test_fatal_eh = 0.00 s 7038s [7367/8505] TestSyslogRootLogger#test_error_eh = 0.00 s 7038s [7368/8505] TestSyslogRootLogger#test_add = 0.00 s 7038s [7369/8505] TestSyslogRootLogger#test_add_level_fatal = 0.00 s 7038s [7370/8505] TestSyslogRootLogger#test_initialize = 0.00 s 7038s [7371/8505] TestSyslogRootLogger#test_add_level_debug = 0.00 s 7038s [7372/8505] TestSyslogRootLogger#test_info = 0.00 s 7038s [7373/8505] TestSyslogRootLogger#test_add_level_warn = 0.00 s 7038s [7374/8505] TestFormatter#test_call = 0.00 s 7038s [7375/8505] TestFormatter#test_format_datetime = 0.00 s 7038s [7376/8505] TestRipper::Lexer#test_trailing_on_embexpr_end = 0.00 s 7038s [7377/8505] TestRipper::Lexer#test_nested_dedent_heredoc = 0.00 s 7038s [7378/8505] TestRipper::Lexer#test_state_after_ivar = 0.00 s 7038s [7379/8505] TestRipper::Lexer#test_space_after_expr_in_heredoc = 0.00 s 7038s [7380/8505] TestRipper::Lexer#test_tokenize_with_syntax_error = 0.00 s 7038s [7381/8505] TestRipper::Lexer#test_lex_with_syntax_error = 0.00 s 7038s [7382/8505] TestRipper::Lexer#test_lex_with_syntax_error_and_heredoc = 0.00 s 7038s [7383/8505] TestRipper::Lexer#test_state_after_cvar = 0.00 s 7038s [7384/8505] TestRipper::Lexer#test_expr_at_beginning_in_heredoc = 0.00 s 7038s [7385/8505] TestRipper::Lexer#test_embedded_expr_in_heredoc = 0.00 s 7038s [7386/8505] TestRipper::Lexer#test_stack_at_on_heredoc_beg = 0.00 s 7038s [7387/8505] TestRipper::Lexer#test_slice = 0.00 s 7038s [7388/8505] TestSocketAddrinfo#test_addrinfo_new_inet = 0.00 s 7038s [7389/8505] TestSocketAddrinfo#test_addrinfo_timeout = 0.02 s 7038s [7390/8505] TestSocketAddrinfo#test_addrinfo_unix_dgram = 0.00 s 7038s [7391/8505] TestSocketAddrinfo#test_basicsocket_local_address = 0.00 s 7038s [7392/8505] TestSocketAddrinfo#test_addrinfo_ip_unpack = 0.00 s 7038s [7393/8505] TestSocketAddrinfo#test_ipv4_address_predicates = 0.02 s 7038s [7394/8505] TestSocketAddrinfo#test_bind = 0.00 s 7038s [7395/8505] TestSocketAddrinfo#test_addrinfo_tcp = 0.00 s 7038s [7396/8505] TestSocketAddrinfo#test_addrinfo_new_inet6 = 0.00 s 7038s [7397/8505] TestSocketAddrinfo#test_addrinfo_ip = 0.00 s 7038s [7398/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr = 0.00 s 7038s [7399/8505] TestSocketAddrinfo#test_addrinfo_unix_path = 0.00 s 7038s [7400/8505] TestSocketAddrinfo#test_listen = 0.00 s 7038s [7401/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr_inet6 = 0.00 s 7038s [7402/8505] TestSocketAddrinfo#test_basicsocket_remote_address = 0.00 s 7038s [7403/8505] TestSocketAddrinfo#test_addrinfo_udp = 0.00 s 7038s [7404/8505] TestSocketAddrinfo#test_addrinfo_ip_unpack_inet6 = 0.00 s 7038s [7405/8505] TestSocketAddrinfo#test_addrinfo_predicates = 0.00 s 7038s [7406/8505] TestSocketAddrinfo#test_addrinfo_unix = 0.00 s 7038s [7407/8505] TestSocketAddrinfo#test_s_foreach = 0.00 s 7038s [7408/8505] TestSocketAddrinfo#test_addrinfo_inspect_sockaddr_unix = 0.00 s 7038s [7409/8505] TestERBCore#test_def_method_without_filename = 0.00 s 7038s [7410/8505] TestERBCore#test_result_with_hash = 0.00 s 7038s [7411/8505] TestERBCore#test_invalid_trim_mode = 0.01 s 7038s [7412/8505] TestERBCore#test_core = 0.05 s 7038s [7413/8505] TestERBCore#test_prohibited_marshal_dump = 0.00 s 7038s [7414/8505] TestERBCore#test_keep_lineno = 0.02 s 7038s [7415/8505] TestERBCore#test_def_method_with_fname = 0.01 s 7038s [7416/8505] TestERBCore#test_def_erb_method = 0.01 s 7038s [7417/8505] TestERBCore#test_result_with_hash_with_invalid_keys_raises_type_error = 0.00 s 7038s [7418/8505] TestERBCore#test_explicit_trim_line_with_carriage_return = 0.00 s 7038s [7419/8505] TestERBCore#test_url_encode = 0.01 s 7038s [7420/8505] TestERBCore#test_percent_after_etag = 0.01 s 7038s [7421/8505] TestERBCore#test_escape = 0.00 s 7038s [7422/8505] TestERBCore#test_percent = 0.00 s 7038s [7423/8505] TestERBCore#test_deprecated_interface_warnings = 0.02 s 7038s [7424/8505] TestERBCore#test_result_with_hash_does_not_modify_caller_binding = 0.00 s 7038s [7425/8505] TestERBCore#test_half_working_comment_backward_compatibility = 0.00 s 7038s [7426/8505] TestERBCore#test_token_extension = 0.01 s 7038s [7427/8505] TestERBCore#test_result_with_hash_does_not_modify_toplevel_binding = 0.00 s 7038s [7428/8505] TestERBCore#test_version = 0.00 s 7038s [7429/8505] TestERBCore#test_trim_line2_with_carriage_return = 0.00 s 7038s [7430/8505] TestERBCore#test_run = 0.00 s 7038s [7431/8505] TestERBCore#test_def_module = 0.00 s 7038s [7432/8505] TestERBCore#test_trim_line1_with_carriage_return = 0.01 s 7038s [7433/8505] TestERBCore#test_result_with_hash_does_not_use_caller_local_variables = 0.00 s 7038s [7434/8505] TestERBCore#test_prohibited_marshal_load = 0.00 s 7038s [7435/8505] TestERBCore#test_def_class = 0.00 s 7038s [7436/8505] TestERBCore#test_explicit = 0.00 s 7038s [7437/8505] TestERBCore#test_frozen_string_literal = 0.00 s 7038s [7438/8505] TestRDocCrossReference#test_resolve_class = 0.03 s 7038s [7439/8505] TestRDocCrossReference#test_resolve_C4_C4 = 0.02 s 7038s [7440/8505] TestRDocCrossReference#test_resolve_the_same_name_in_instance_and_class_method = 0.02 s 7038s [7441/8505] TestRDocCrossReference#test_resolve_class_and_method_of_the_same_name = 0.05 s 7038s [7442/8505] TestRDocCrossReference#test_resolve_C4 = 0.04 s 7038s [7443/8505] TestRDocCrossReference#test_resolve_page = 0.02 s 7038s [7444/8505] TestRDocCrossReference#test_resolve_C2 = 0.03 s 7038s [7445/8505] TestRDocCrossReference#test_METHOD_REGEXP_STR = 0.03 s 7038s [7446/8505] TestRDocCrossReference#test_resolve_method = 0.03 s 7038s [7447/8505] TestRDocCrossReference#test_resolve_C2_C3 = 0.02 s 7038s [7448/8505] TestRDocCrossReference#test_resolve_file = 0.02 s 7038s [7449/8505] TestRDocCrossReference#test_resolve_C3 = 0.03 s 7038s [7450/8505] TestRDocCrossReference#test_resolve_no_ref = 0.03 s 7038s [7451/8505] TestRDocCrossReference#test_resolve_percent = 0.03 s 7039s [7452/8505] TestRDocCrossReference#test_resolve_method_equals3 = 0.02 s 7039s [7453/8505] TestMutexM#test_cv_wait = 0.01 s 7039s [7454/8505] TestMutexM#test_initialize_with_keyword_arg = 0.00 s 7039s [7455/8505] TestMutexM#test_initialize_no_args = 0.00 s 7039s [7456/8505] JSONGenericObjectTest#test_json_generic_object_load = 0.01 s 7039s [7457/8505] JSONGenericObjectTest#test_attributes = 0.00 s 7039s [7458/8505] JSONGenericObjectTest#test_generate_json = 0.00 s 7039s [7459/8505] JSONGenericObjectTest#test_from_hash = 0.00 s 7039s [7460/8505] JSONGenericObjectTest#test_parse_json = 0.00 s 7039s [7461/8505] PrettyPrintTest::Fill#test_23_26 = 0.01 s 7039s [7462/8505] PrettyPrintTest::Fill#test_00_06 = 0.00 s 7039s [7463/8505] PrettyPrintTest::Fill#test_15_18 = 0.00 s 7039s [7464/8505] PrettyPrintTest::Fill#test_19_22 = 0.00 s 7039s [7465/8505] PrettyPrintTest::Fill#test_11_14 = 0.00 s 7039s [7466/8505] PrettyPrintTest::Fill#test_07_10 = 0.00 s 7039s [7467/8505] PrettyPrintTest::Fill#test_27 = 0.00 s 7039s [7468/8505] TestIOWait#test_wait_buffered = 0.00 s 7039s [7469/8505] TestIOWait#test_wait_readable_forever = 0.00 s 7039s [7470/8505] TestIOWait#test_wait_readwrite_timeout = 0.01 s 7039s [7471/8505] TestIOWait#test_wait_readwrite = 0.00 s 7039s [7472/8505] TestIOWait#test_buffered_ready? = 0.00 s 7039s [7473/8505] TestIOWait#test_wait_readable_eof = 0.00 s 7039s [7474/8505] TestIOWait#test_wait_writable_closed = 0.00 s 7039s [7475/8505] TestIOWait#test_wait_writable = 0.00 s 7041s [7476/8505] TestIOWait#test_wait = 2.00 s 7041s [7477/8505] TestIOWait#test_nread_buffered = 0.00 s 7041s [7478/8505] TestIOWait#test_wait_readable_buffered = 0.00 s 7041s [7479/8505] TestIOWait#test_wait_readable = 0.00 s 7043s [7480/8505] TestIOWait#test_nread = 2.00 s 7043s [7481/8505] TestIOWait#test_wait_forever = 0.00 s 7043s [7482/8505] TestIOWait#test_wait_writable_timeout = 0.01 s 7045s [7483/8505] TestIOWait#test_ready? = 2.00 s 7045s [7484/8505] TestCSVInterfaceRead#test_parse_block = 0.00 s 7045s [7485/8505] TestCSVInterfaceRead#test_parse = 0.00 s 7045s [7486/8505] TestCSVInterfaceRead#test_parse_line_empty_line = 0.00 s 7045s [7487/8505] TestCSVInterfaceRead#test_read = 0.01 s 7045s [7488/8505] TestCSVInterfaceRead#test_enumerator = 0.01 s 7045s [7489/8505] TestCSVInterfaceRead#test_open_with_undef_replace_and_replace_string = 0.01 s 7045s [7490/8505] TestCSVInterfaceRead#test_parse_line_empty = 0.00 s 7045s [7491/8505] TestCSVInterfaceRead#test_new_nil = 0.00 s 7045s [7492/8505] TestCSVInterfaceRead#test_foreach = 0.01 s 7045s [7493/8505] TestCSVInterfaceRead#test_open_block_return_value = 0.00 s 7045s [7494/8505] TestCSVInterfaceRead#test_parse_headers_only = 0.00 s 7045s [7495/8505] TestCSVInterfaceRead#test_table = 0.00 s 7045s [7496/8505] TestCSVInterfaceRead#test_open_invalid_byte_sequence_in_utf_8 = 0.00 s 7045s [7497/8505] TestCSVInterfaceRead#test_shift_and_each = 0.01 s 7045s [7498/8505] TestCSVInterfaceRead#test_each_twice = 0.01 s 7045s [7499/8505] TestCSVInterfaceRead#test_open_with_invalid_replace = 0.01 s 7045s [7500/8505] TestCSVInterfaceRead#test_open_readlines = 0.00 s 7045s [7501/8505] TestCSVInterfaceRead#test_eof? = 0.01 s 7045s [7502/8505] TestCSVInterfaceRead#test_open_read = 0.00 s 7045s [7503/8505] TestCSVInterfaceRead#test_readlines = 0.00 s 7045s [7504/8505] TestCSVInterfaceRead#test_open_with_invalid_replace_and_replace_string = 0.01 s 7045s [7505/8505] TestCSVInterfaceRead#test_open_encoding_invalid = 0.00 s 7045s [7506/8505] TestCSVInterfaceRead#test_open_closed = 0.00 s 7045s [7507/8505] TestCSVInterfaceRead#test_open_encoding_nonexistent = 0.00 s 7045s [7508/8505] TestCSVInterfaceRead#test_foreach_mode = 0.00 s 7045s [7509/8505] TestCSVInterfaceRead#test_shift = 0.00 s 7045s [7510/8505] TestCSVInterfaceRead#test_parse_line = 0.00 s 7045s [7511/8505] TestCSVInterfaceRead#test_parse_line_shortcut = 0.00 s 7045s [7512/8505] TestCSVInterfaceRead#test_open_encoding_valid = 0.00 s 7045s [7513/8505] TestCSVInterfaceRead#test_open_auto_close = 0.00 s 7045s [7514/8505] TestCSVInterfaceRead#test_parse_enumerator = 0.00 s 7045s [7515/8505] TestCSVInterfaceRead#test_foreach_enumurator = 0.00 s 7045s [7516/8505] TestCSVInterfaceRead#test_open_with_undef_replace = 0.01 s 7045s [7517/8505] TestCSVInterfaceRead#test_open_with_invalid_nil = 0.00 s 7045s [7518/8505] TestCSVInterfaceRead#test_open_encoding_utf_8_with_bom = 0.00 s 7045s [7519/8505] TestCSVInterfaceRead#test_closed? = 0.00 s 7045s [7520/8505] TestCSVInterfaceRead#test_options_not_modified = 0.01 s 7045s [7521/8505] TSortTest#test_s_strongly_connected_components = 0.00 s 7045s [7522/8505] TSortTest#test_array = 0.00 s 7045s [7523/8505] TSortTest#test_s_tsort = 0.00 s 7045s [7524/8505] TSortTest#test_cycle = 0.00 s 7045s [7525/8505] TSortTest#test_s_each_strongly_connected_component = 0.00 s 7045s [7526/8505] TSortTest#test_s_each_strongly_connected_component_from = 0.00 s 7045s [7527/8505] TSortTest#test_s_tsort_each = 0.00 s 7045s [7528/8505] TSortTest#test_dag = 0.00 s 7045s [7529/8505] TestFileUtils#test_rmdir = 0.03 s 7045s [7530/8505] TestFileUtils#test_chmod_verbose = 0.08 s 7045s [7531/8505] TestFileUtils#test_remove_entry_cjk_path = 0.02 s 7045s [7532/8505] TestFileUtils#test_chmod_R = 0.03 s 7045s [7533/8505] TestFileUtils#test_move = 0.01 s 7045s [7534/8505] TestFileUtils#test_have_option? = 0.01 s 7045s [7535/8505] TestFileUtils#test_chown_error = 0.02 s 7045s [7536/8505] TestFileUtils#test_identical? = 0.01 s 7045s [7537/8505] TestFileUtils#test_mv_symlink = 0.02 s 7045s [7538/8505] TestFileUtils#test_chdir_verbose_frozen = 0.01 s 7045s [7539/8505] TestFileUtils#test_chown_without_permission = 0.01 s 7045s [7540/8505] TestFileUtils#test_ln_pathname = 0.01 s 7045s [7541/8505] TestFileUtils#test_ln_sf = 0.03 s 7045s [7542/8505] TestFileUtils#test_cp = 0.04 s 7045s [7543/8505] TestFileUtils#test_install_mode_option = 0.04 s 7045s [7544/8505] TestFileUtils#test_assert_output_lines = 0.01 s 7045s [7545/8505] TestFileUtils#test_cp_lr = 0.04 s 7045s [7546/8505] TestFileUtils#test_remove_dir_file_perm = 0.01 s 7045s [7547/8505] TestFileUtils#test_uptodate? = 0.01 s 7045s [7548/8505] TestFileUtils#test_chmod_symbol_mode = 0.02 s 7045s [7549/8505] TestFileUtils#test_remove_entry_multibyte_path = 0.01 s 7045s [7550/8505] TestFileUtils#test_remove_entry_secure = 0.03 s 7045s [7551/8505] TestFileUtils#test_with_big_file = 0.04 s 7045s [7552/8505] TestFileUtils#test_cd = 0.01 s 7045s [7553/8505] TestFileUtils#test_cp_r_symlink_preserve = 0.02 s 7045s [7554/8505] TestFileUtils#test_link = 0.01 s 7045s [7555/8505] TestFileUtils#test_symlink = 0.01 s 7045s [7556/8505] TestFileUtils#test_copy_stream = 0.01 s 7045s [7557/8505] TestFileUtils#test_chdir_verbose = 0.01 s 7045s [7558/8505] TestFileUtils#test_rm_r = 0.02 s 7045s [7559/8505] TestFileUtils#test_chown_noop = 0.02 s 7046s [7560/8505] TestFileUtils#test_rm_pathname = 0.03 s 7046s [7561/8505] TestFileUtils#test_mv = 0.02 s 7046s [7562/8505] TestFileUtils#test_install_pathname = 0.02 s 7046s [7563/8505] TestFileUtils#test_mkpath = 0.01 s 7046s [7564/8505] TestFileUtils#test_rm_f_2 = 0.01 s 7046s [7565/8505] TestFileUtils#test_mkdir_p_file_perm = 0.01 s 7046s [7566/8505] TestFileUtils#test_cp_preserve_permissions = 0.01 s 7046s [7567/8505] TestFileUtils#test_remove_file = 0.01 s 7046s [7568/8505] TestFileUtils#test_chown = 0.01 s 7046s [7569/8505] TestFileUtils#test_ln_s_pathname = 0.01 s 7046s [7570/8505] TestFileUtils#test_cp_r_symlink = 0.02 s 7046s [7571/8505] TestFileUtils#test_copy_entry_symlink = 0.01 s 7046s [7572/8505] TestFileUtils#test_cd_result = 0.01 s 7046s [7573/8505] TestFileUtils#test_chown_dir_group_ownership_not_recursive = 0.01 s 7046s [7574/8505] TestFileUtils#test_getwd = 0.01 s 7046s [7575/8505] TestFileUtils#test_pwd = 0.01 s 7046s [7576/8505] TestFileUtils#test_ln_sf_broken_symlink = 0.01 s 7046s [7577/8505] TestFileUtils#test_mv_broken_symlink = 0.01 s 7046s [7578/8505] TestFileUtils#test_ln_sf_pathname = 0.01 s 7046s [7579/8505] TestFileUtils#test_remove_entry_secure_pathname = 0.01 s 7046s [7580/8505] TestFileUtils#test_mv_pathname = 0.01 s 7046s [7581/8505] TestFileUtils#test_compare_file = 0.01 s 7046s [7582/8505] TestFileUtils#test_rm_f = 0.01 s 7046s [7583/8505] TestFileUtils#test_install = 0.01 s 7046s [7584/8505] TestFileUtils#test_chmod_symbol_mode_R = 0.02 s 7046s [7585/8505] TestFileUtils#test_mkdir_pathname = 0.02 s 7046s [7586/8505] TestFileUtils#test_cmp = 0.02 s 7046s [7587/8505] TestFileUtils#test_chown_R_noop = 0.01 s 7046s [7588/8505] TestFileUtils#test_options = 0.01 s 7046s [7589/8505] TestFileUtils#test_commands = 0.01 s 7046s [7590/8505] TestFileUtils#test_remove_dir = 0.01 s 7046s [7591/8505] TestFileUtils#test_rmtree = 0.01 s 7046s [7592/8505] TestFileUtils#test_mkdir_lf_in_path = 0.01 s 7046s [7593/8505] TestFileUtils#test_install_owner_option = 0.02 s 7046s [7594/8505] TestFileUtils#test_install_symlink = 0.01 s 7046s [7595/8505] TestFileUtils#test_rm_symlink = 0.01 s 7046s [7596/8505] TestFileUtils#test_cp_r_dev = 0.01 s 7046s [7597/8505] TestFileUtils#test_cp_r_symlink_remove_destination = 0.01 s 7046s [7598/8505] TestFileUtils#test_mkdir_p = 0.06 s 7046s [7599/8505] TestFileUtils#test_mkdir = 0.01 s 7046s [7600/8505] TestFileUtils#test_cp_symlink = 0.01 s 7046s [7601/8505] TestFileUtils#test_ln_s = 0.01 s 7046s [7602/8505] TestFileUtils#test_rm_r_pathname = 0.01 s 7046s [7603/8505] TestFileUtils#test_remove_entry_secure_symlink = 0.01 s 7046s [7604/8505] TestFileUtils#test_cp_preserve_permissions_dir = 0.01 s 7046s [7605/8505] TestFileUtils#test_mkdir_file_perm = 0.01 s 7046s [7606/8505] TestFileUtils#test_install_group_option = 0.01 s 7046s [7607/8505] TestFileUtils#test_compare_stream = 0.01 s 7046s [7608/8505] TestFileUtils#test_rm = 0.01 s 7046s [7609/8505] TestFileUtils#test_ln_s_broken_symlink = 0.01 s 7046s [7610/8505] TestFileUtils#test_copy_stream_duck = 0.01 s 7046s [7611/8505] TestFileUtils#test_options_of = 0.01 s 7046s [7612/8505] TestFileUtils#test_chmod = 0.01 s 7046s [7613/8505] TestFileUtils#test_cp_r = 0.03 s 7046s [7614/8505] TestFileUtils#test_ln = 0.01 s 7046s [7615/8505] TestFileUtils#test_copy_entry_symlink_remove_destination = 0.01 s 7046s [7616/8505] TestFileUtils#test_copy_file = 0.01 s 7046s [7617/8505] TestFileUtils#test_copy_entry = 0.01 s 7046s [7618/8505] TestFileUtils#test_collect_methods = 0.01 s 7046s [7619/8505] TestFileUtils#test_rm_rf = 0.01 s 7046s [7620/8505] TestFileUtils#test_cp_r_pathname = 0.01 s 7046s [7621/8505] TestFileUtils#test_remove_file_file_perm = 0.01 s 7046s [7622/8505] TestFileUtils#test_cp_r_socket = 0.01 s 7046s [7623/8505] TestFileUtils#test_safe_unlink = 0.01 s 7046s [7624/8505] TestFileUtils#test_rm_r_symlink = 0.01 s 7046s [7625/8505] TestFileUtils#test_cp_r_fifo = 0.01 s 7046s [7626/8505] TestFileUtils#test_makedirs = 0.01 s 7046s [7627/8505] TestFileUtils#test_touch = 0.01 s 7046s [7628/8505] TestFileUtils#test_chown_R = 0.01 s 7046s [7629/8505] TestFileUtils#test_ln_symlink = 0.01 s 7046s [7630/8505] TestFileUtils#test_chown_R_without_permission = 0.01 s 7046s [7631/8505] TestFileUtils#test_chdir = 0.01 s 7046s [7632/8505] TestFileUtils#test_mkdir_p_pathname = 0.01 s 7046s [7633/8505] TestFileUtils#test_cp_pathname = 0.01 s 7046s [7634/8505] TestFileUtils#test_s_chmod_verbose = 0.01 s 7046s [7635/8505] TestFileUtils#test_install_broken_symlink = 0.01 s 7046s [7636/8505] TestFileUtils#test_ln_broken_symlink = 0.01 s 7046s [7637/8505] TestCSVParseSkipLines::DifferentOFS#test_string = 0.00 s 7046s [7638/8505] TestCSVParseSkipLines::DifferentOFS#test_regexp_quoted = 0.00 s 7046s [7639/8505] TestCSVParseSkipLines::DifferentOFS#test_not_matchable = 0.00 s 7046s [7640/8505] TestCSVParseSkipLines::DifferentOFS#test_regexp = 0.00 s 7046s [7641/8505] TestCSVParseSkipLines::DifferentOFS#test_multibyte_data = 0.00 s 7046s [7642/8505] TestCSVParseSkipLines::DifferentOFS#test_crlf = 0.00 s 7046s [7643/8505] TestCSVParseSkipLines::DifferentOFS#test_matchable = 0.00 s 7046s [7644/8505] TestCSVParseSkipLines::DifferentOFS#test_default = 0.00 s 7046s [7645/8505] TestCSVParseSkipLines::DifferentOFS#test_empty_line_and_liberal_parsing = 0.00 s 7055s [7646/8505] OpenSSL::OSSL#test_memcmp_timing = 8.73 s 7055s [7647/8505] OpenSSL::OSSL#test_secure_compare = 0.03 s 7055s [7648/8505] OpenSSL::OSSL#test_fixed_length_secure_compare = 0.03 s 7055s [7649/8505] TestIRB::TestColor#test_inspect_colorable = 0.02 s 7055s [7650/8505] TestRDocGeneratorDarkfish#test_install_rdoc_static_file = 0.01 s 7055s [7651/8505] TestRDocGeneratorDarkfish#test_generated_method_with_html_tag_yield = 0.13 s 7055s [7652/8505] TestRDocGeneratorDarkfish#test_generate_static_dry_run = 0.09 s 7055s [7653/8505] TestRDocGeneratorDarkfish#test_generate_dry_run = 0.06 s 7055s [7654/8505] TestRDocGeneratorDarkfish#test_setup = 0.00 s 7056s [7655/8505] TestRDocGeneratorDarkfish#test_template_stylesheets = 0.08 s 7056s [7656/8505] TestRDocGeneratorDarkfish#test_install_rdoc_static_file_missing = 0.00 s 7056s [7657/8505] TestRDocGeneratorDarkfish#test_generate_static = 0.08 s 7056s [7658/8505] TestRDocGeneratorDarkfish#test_template_for_dry_run = 0.01 s 7056s [7659/8505] TestRDocGeneratorDarkfish#test_generate = 0.10 s 7056s [7660/8505] TestRDocGeneratorDarkfish#test_template_for_partial = 0.00 s 7056s [7661/8505] TestRDocGeneratorDarkfish#test_template_for = 0.01 s 7056s [7662/8505] TestIRB::TestContext#test_multiline_output_on_default_inspector = 0.02 s 7056s [7663/8505] TestIRB::TestContext#test_omit_multiline_on_assignment = 0.07 s 7056s [7664/8505] TestIRB::TestContext#test_echo_on_assignment = 0.06 s 7056s [7665/8505] TestIRB::TestContext#test_evaluate_with_exception = 0.00 s 7056s [7666/8505] TestIRB::TestContext#test_omit_on_assignment = 0.15 s 7056s [7667/8505] TestIRB::TestContext#test_eval_input_with_long_exception = 0.05 s 7056s [7668/8505] TestIRB::TestContext#test_default_return_format = 0.02 s 7056s [7669/8505] TestIRB::TestContext#test_assignment_expression = 0.02 s 7056s [7670/8505] TestIRB::TestContext#test_eval_object_without_inspect_method = 0.05 s 7056s [7671/8505] TestIRB::TestContext#test_last_value = 0.00 s 7056s [7672/8505] TestIRB::TestContext#test_lineno = 0.01 s 7056s [7673/8505] TestIRB::TestContext#test_echo_on_assignment_conf = 0.01 s 7056s [7674/8505] TestDigest::TestSHA2#test_s_file = 0.00 s 7056s [7675/8505] TestRDocMarkupVerbatim#test_ruby_eh = 0.00 s 7056s [7676/8505] TestRDocMarkupVerbatim#test_equals2 = 0.00 s 7056s [7677/8505] Psych::TestBoolean#test_no = 0.00 s 7056s [7678/8505] Psych::TestBoolean#test_YES = 0.00 s 7056s [7679/8505] Psych::TestBoolean#test_on = 0.00 s 7056s [7680/8505] Psych::TestBoolean#test_true = 0.00 s 7056s [7681/8505] Psych::TestBoolean#test_n = 0.00 s 7056s [7682/8505] Psych::TestBoolean#test_TRUE = 0.00 s 7056s [7683/8505] Psych::TestBoolean#test_false = 0.00 s 7056s [7684/8505] Psych::TestBoolean#test_Off = 0.00 s 7056s [7685/8505] Psych::TestBoolean#test_off = 0.00 s 7056s [7686/8505] Psych::TestBoolean#test_True = 0.00 s 7056s [7687/8505] Psych::TestBoolean#test_No = 0.00 s 7056s [7688/8505] Psych::TestBoolean#test_y = 0.00 s 7056s [7689/8505] Psych::TestBoolean#test_On = 0.00 s 7056s [7690/8505] Psych::TestBoolean#test_False = 0.00 s 7056s [7691/8505] Psych::TestBoolean#test_OFF = 0.00 s 7056s [7692/8505] Psych::TestBoolean#test_NO = 0.00 s 7056s [7693/8505] Psych::TestBoolean#test_FALSE = 0.00 s 7056s [7694/8505] Psych::TestBoolean#test_yes = 0.00 s 7056s [7695/8505] Psych::TestBoolean#test_Yes = 0.00 s 7056s [7696/8505] Psych::TestBoolean#test_ON = 0.00 s 7056s [7697/8505] TestRDocI18nText#test_multiple_paragraphs = 0.01 s 7056s [7698/8505] TestRDocI18nText#test_translate_keep_empty_lines = 0.01 s 7056s [7699/8505] TestRDocI18nText#test_translate_not_translated_message = 0.01 s 7056s [7700/8505] TestRDocI18nText#test_translate_multiple_paragraphs = 0.00 s 7056s [7701/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_word = 0.03 s 7056s [7702/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_mbchar_one = 0.01 s 7056s [7703/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_big_word = 0.01 s 7056s [7704/8505] Reline::KeyActor::ViInsert::Test#test_completion = 0.00 s 7056s [7705/8505] Reline::KeyActor::ViInsert::Test#test_ed_quoted_insert_with_vi_arg = 0.00 s 7056s [7706/8505] Reline::KeyActor::ViInsert::Test#test_vi_add = 0.00 s 7056s [7707/8505] Reline::KeyActor::ViInsert::Test#test_vi_add_at_eol = 0.00 s 7056s [7708/8505] Reline::KeyActor::ViInsert::Test#test_vi_list_or_eof_with_non_empty_line = 0.00 s 7056s [7709/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char = 0.01 s 7056s [7710/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next = 0.01 s 7056s [7711/8505] Reline::KeyActor::ViInsert::Test#test_vi_kill_line_prev = 0.01 s 7056s [7712/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev_for_mbchar = 0.01 s 7056s [7713/8505] Reline::KeyActor::ViInsert::Test#test_ed_next_char = 0.00 s 7056s [7714/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_next_char_at_eol = 0.00 s 7056s [7715/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word_for_mbchar = 0.00 s 7056s [7716/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_two = 0.01 s 7056s [7717/8505] Reline::KeyActor::ViInsert::Test#test_ed_newline_with_cr = 0.00 s 7056s [7718/8505] Reline::KeyActor::ViInsert::Test#test_completion_with_disable_completion = 0.00 s 7056s [7719/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_next_big_word = 0.01 s 7056s [7720/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_for_plural_mbchar_by_plural_code_points = 0.00 s 7056s [7721/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word_for_mbchar_by_plural_code_points = 0.01 s 7056s [7722/8505] Reline::KeyActor::ViInsert::Test#test_vi_change_meta_with_vi_next_word = 0.01 s 7056s [7723/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char_for_mbchar_by_plural_code_points = 0.00 s 7056s [7724/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey = 0.02 s 7056s [7725/8505] Reline::KeyActor::ViInsert::Test#test_vi_command_mode_with_input = 0.00 s 7056s [7726/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char = 0.00 s 7056s [7727/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_word_with_operator = 0.00 s 7057s [7728/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey_in_middle_of_line = 0.01 s 7057s [7729/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev_for_mbchar_by_plural_code_points = 0.00 s 7057s [7730/8505] Reline::KeyActor::ViInsert::Test#test_vi_replace_char = 0.01 s 7057s [7731/8505] Reline::KeyActor::ViInsert::Test#test_ed_prev_char = 0.00 s 7057s [7732/8505] Reline::KeyActor::ViInsert::Test#test_vi_first_print = 0.01 s 7057s [7733/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_prev = 0.00 s 7057s [7734/8505] Reline::KeyActor::ViInsert::Test#test_vi_next_char_with_operator = 0.01 s 7057s [7735/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_vi_next_word_at_eol = 0.00 s 7057s [7736/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_arg = 0.01 s 7057s [7737/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_one = 0.00 s 7057s [7738/8505] Reline::KeyActor::ViInsert::Test#test_completion_journey_reverse = 0.02 s 7057s [7739/8505] Reline::KeyActor::ViInsert::Test#test_ed_newline_with_lf = 0.01 s 7057s [7740/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_char = 0.01 s 7057s [7741/8505] Reline::KeyActor::ViInsert::Test#test_ed_delete_prev_word = 0.00 s 7057s [7742/8505] Reline::KeyActor::ViInsert::Test#test_history = 0.01 s 7057s [7743/8505] Reline::KeyActor::ViInsert::Test#test_vi_to_next_char = 0.01 s 7057s [7744/8505] Reline::KeyActor::ViInsert::Test#test_vi_list_or_eof = 0.00 s 7057s [7745/8505] Reline::KeyActor::ViInsert::Test#test_vi_yank = 0.00 s 7057s [7746/8505] Reline::KeyActor::ViInsert::Test#test_vi_insert = 0.00 s 7057s [7747/8505] Reline::KeyActor::ViInsert::Test#test_ed_move_to_beg = 0.01 s 7057s [7748/8505] Reline::KeyActor::ViInsert::Test#test_ed_quoted_insert = 0.00 s 7057s [7749/8505] Reline::KeyActor::ViInsert::Test#test_vi_command_mode = 0.00 s 7057s [7750/8505] Reline::KeyActor::ViInsert::Test#test_vi_next_char = 0.00 s 7057s [7751/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta_with_vi_next_char = 0.01 s 7057s [7752/8505] Reline::KeyActor::ViInsert::Test#test_vi_change_meta = 0.01 s 7057s [7753/8505] Reline::KeyActor::ViInsert::Test#test_vi_insert_at_bol = 0.01 s 7057s [7754/8505] Reline::KeyActor::ViInsert::Test#test_unimplemented_vi_command_should_be_no_op = 0.01 s 7057s [7755/8505] Reline::KeyActor::ViInsert::Test#test_pasting = 0.00 s 7057s [7756/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_mbchar_two = 0.01 s 7057s [7757/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next_for_mbchar_by_plural_code_points = 0.01 s 7057s [7758/8505] Reline::KeyActor::ViInsert::Test#test_pasting_fullwidth = 0.01 s 7057s [7759/8505] Reline::KeyActor::ViInsert::Test#test_vi_to_prev_char = 0.01 s 7057s [7760/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_next_char_for_mbchar = 0.00 s 7057s [7761/8505] Reline::KeyActor::ViInsert::Test#test_ed_insert_for_mbchar_by_plural_code_points = 0.00 s 7057s [7762/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_next_word = 0.02 s 7057s [7763/8505] Reline::KeyActor::ViInsert::Test#test_vi_replace_char_with_mbchar = 0.01 s 7057s [7764/8505] Reline::KeyActor::ViInsert::Test#test_vi_prev_char = 0.01 s 7057s [7765/8505] Reline::KeyActor::ViInsert::Test#test_vi_end_big_word_with_operator = 0.01 s 7057s [7766/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_meta = 0.01 s 7057s [7767/8505] Reline::KeyActor::ViInsert::Test#test_vi_paste_next_for_mbchar = 0.01 s 7057s [7768/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char_for_mbchar = 0.00 s 7057s [7769/8505] Reline::KeyActor::ViInsert::Test#test_vi_delete_prev_char_for_mbchar_by_plural_code_points = 0.01 s 7057s [7770/8505] TestDate#test_infinity_comparison = 0.00 s 7057s [7771/8505] TestDate#test_sub = 0.00 s 7057s [7772/8505] TestDate#test_freeze = 0.00 s 7057s [7773/8505] TestDate#test_hash = 0.00 s 7057s [7774/8505] TestDate#test_range_infinite_float = 0.00 s 7057s [7775/8505] TestDate#test_submillisecond_comparison = 0.00 s 7057s [7776/8505] TestDate#test_eql_p = 0.00 s 7057s [7777/8505] TestDate#test__const = 0.00 s 7057s [7778/8505] TestCSVEncodings#test_parser_works_with_encoded_headers = 0.02 s 7057s [7779/8505] TestCSVEncodings#test_parses_shift_jis_encoding = 0.01 s 7057s [7780/8505] TestCSVEncodings#test_read_allows_you_to_set_encodings = 0.02 s 7057s [7781/8505] TestCSVEncodings#test_regular_expression_escaping = 0.27 s 7057s [7782/8505] TestCSVEncodings#test_auto_line_ending_detection = 0.00 s 7057s [7783/8505] TestCSVEncodings#test_encoding_is_upgraded_for_ascii_content_during_writing_as_needed = 0.01 s 7057s [7784/8505] TestCSVEncodings#test_row_separator_detection_with_invalid_encoding = 0.00 s 7057s [7785/8505] TestCSVEncodings#test_csv_chars_are_transcoded = 0.00 s 7057s [7786/8505] TestCSVEncodings#test_parses_latin1_encoding = 0.01 s 7057s [7787/8505] TestCSVEncodings#test_explicit_encoding = 0.00 s 7057s [7788/8505] TestCSVEncodings#test_encoding_is_upgraded_during_writing_as_needed = 0.00 s 7057s [7789/8505] TestCSVEncodings#test_encoding_is_not_upgraded_for_non_ascii_content_during_writing_as_needed = 0.00 s 7057s [7790/8505] TestCSVEncodings#test_built_in_header_converters_transcode_to_utf_8_then_convert = 0.01 s 7057s [7791/8505] TestCSVEncodings#test_read_with_default_encoding = 0.06 s 7057s [7792/8505] TestCSVEncodings#test_foreach_allows_you_to_set_encodings = 0.01 s 7057s [7793/8505] TestCSVEncodings#test_can_write_csv_in_any_encoding = 0.23 s 7058s [7794/8505] TestCSVEncodings#test_open_allows_you_to_set_encodings = 0.01 s 7058s [7795/8505] TestCSVEncodings#test_parses_utf16be_encoding = 0.01 s 7058s [7796/8505] TestCSVEncodings#test_built_in_converters_transcode_to_utf_8_then_convert = 0.01 s 7058s [7797/8505] TestCSVEncodings#test_parses_utf8_encoding = 0.01 s 7058s [7798/8505] TestCSVEncodings#test_invalid_encoding_row_error = 0.01 s 7058s [7799/8505] TestCSVEncodings#test_encoding_with_default_internal = 0.00 s 7058s [7800/8505] TestCSVEncodings#test_reading_with_most_encodings = 0.30 s 7058s [7801/8505] TC_Operator#test_or = 0.00 s 7058s [7802/8505] TC_Operator#test_and = 0.00 s 7058s [7803/8505] TC_Operator#test_private? = 0.00 s 7058s [7804/8505] TC_Operator#test_equal = 0.01 s 7058s [7805/8505] TC_Operator#test_compare = 0.00 s 7058s [7806/8505] TC_Operator#test_loopback? = 0.01 s 7058s [7807/8505] TC_Operator#test_shift_left = 0.00 s 7058s [7808/8505] TC_Operator#test_link_local? = 0.00 s 7058s [7809/8505] TC_Operator#test_hash = 0.01 s 7058s [7810/8505] TC_Operator#test_mask = 0.01 s 7058s [7811/8505] TC_Operator#test_shift_right = 0.00 s 7058s [7812/8505] TC_Operator#test_include? = 0.00 s 7058s [7813/8505] TC_Operator#test_carrot = 0.00 s 7058s [7814/8505] TestCSVInterfaceDelegation::TestStringIO#test_binmode? = 0.00 s 7058s [7815/8505] TestCSVInterfaceDelegation::TestStringIO#test_to_io = 0.00 s 7058s [7816/8505] TestCSVInterfaceDelegation::TestStringIO#test_ioctl = 0.00 s 7058s [7817/8505] TestCSVInterfaceDelegation::TestStringIO#test_stat = 0.00 s 7058s [7818/8505] TestCSVInterfaceDelegation::TestStringIO#test_path = 0.00 s 7058s [7819/8505] TestCSVInterfaceDelegation::TestStringIO#test_to_i = 0.00 s 7058s [7820/8505] TestCSVInterfaceDelegation::TestStringIO#test_flock = 0.00 s 7058s [7821/8505] TestOptionParser::NoArg::Def2#test_into = 0.00 s 7058s [7822/8505] TestOptionParser::NoArg::Def2#test_nonopt_pattern = 0.00 s 7058s [7823/8505] TestOptionParser::NoArg::Def2#test_order = 0.00 s 7058s [7824/8505] TestOptionParser::NoArg::Def2#test_abbrev = 0.01 s 7058s [7825/8505] TestOptionParser::NoArg::Def2#test_regexp = 0.00 s 7058s [7826/8505] TestOptionParser::NoArg::Def2#test_hyphenize = 0.00 s 7058s [7827/8505] TestOptionParser::NoArg::Def2#test_short = 0.01 s 7058s [7828/8505] TestOptionParser::NoArg::Def2#test_ambiguous = 0.01 s 7058s [7829/8505] TestOptionParser::NoArg::Def2#test_long = 0.01 s 7058s [7830/8505] TestOptionParser::NoArg::Def2#test_permute = 0.00 s 7058s [7831/8505] TestOptionParser::NoArg::Def2#test_require_exact = 0.01 s 7058s [7832/8505] TestCSVParseRowSeparator#test_multiple_characters = 0.00 s 7058s Finished tests in 438.274341s, 17.8701 tests/s, 482.5608 assertions/s. 7058s 7832 tests, 211494 assertions, 0 failures, 0 errors, 33 skips 7058s 7058s 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 [x86_64-linux] 7059s autopkgtest [09:36:28]: test mri-stdlib: -----------------------] 7059s autopkgtest [09:36:28]: test mri-stdlib: - - - - - - - - - - results - - - - - - - - - - 7059s mri-stdlib PASS 7059s autopkgtest [09:36:28]: @@@@@@@@@@@@@@@@@@@@ summary 7059s smoke PASS (superficial) 7059s jgem PASS 7059s jirb PASS 7059s jruby PASS 7059s spec-compiler PASS 7059s spec-ffi PASS 7059s spec-ji PASS 7059s spec-jruby PASS 7059s spec-ruby FLAKY non-zero exit status 1 7059s mri-core PASS 7059s mri-extra FLAKY non-zero exit status 1 7059s mri-stdlib PASS 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)... 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)... 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)... 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)... 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)... 7070s Creating nova instance adt-noble-amd64-jruby-20240327-073849-juju-7f2275-prod-proposed-migration-environment-3-123d0380-c126-43ae-b747-a644aa3784d1 from image adt/ubuntu-noble-amd64-server-20240326.img (UUID cbdbe79e-04a9-406e-8b2a-dc1aaa88a200)...